已合并
【feature】: 修改升精度流程:Transpose节点不参与升精度 #2027
liyuewei创建于 9月9日
【feature】: 修改升精度流程:Transpose节点不参与升精度 #2027
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liyuewei 的贡献)9月9日 添加了label:enhancement
atomgit-bot
9月9日 评论:
9月9日 评论:
变更摘要
本 PR 修改升精度(improve_precision)流程,使 Transpose 节点不参与升精度:将 Transpose 视作与 Cast/Load/Gather/Store 同类的边界节点,不再对其做升精度处理,并将降精度 Cast 尽量移动到 Transpose 之前执行,从而避免 Transpose 在高精度下参与计算。改动集中在 autofuse/optimize/pre_process/improve_precision.cpp,并新增对应单测 autofuse/tests/ut/optimize/test_improve_precision.cpp。
主要改动
Transpose不参与升精度:在ProcessOtherComputeNodes中直接continue跳过Transpose节点;同时将af::ascir_op::Transpose::Type加入IsNeedInsertCastAfterLoad与IsNeedInsertCastBeforeOther的边界节点判断,使Transpose输出低精度时触发降精度转换、且Load后不再重复插入Cast。- 新增
SetNodeOutputDtype辅助函数:统一同步设置节点的输出数据类型,同时更新AscNode的outputs[0].attr.dtype与OpDesc的MutableOutputDesc(0)。 - 新增
TryInsertCastBeforeTransposeForStore:当低精度Store直接消费Transpose时,若Transpose的所有消费者均为同目标精度的Store且其输入为高精度,则将降精度Cast插入到Transpose之前,并把Transpose的输出精度更新为目标低精度。 ProcessStoreNodes增加优先分支:低精度Store且上游为Transpose时,先尝试调用TryInsertCastBeforeTransposeForStore,插入成功则跳过原有的InsertCastBeforeNode默认逻辑。- 新增单测覆盖:在
test_improve_precision.cpp增加 4 个用例(LoadTransposeKeepsTransposeInLowPrecision、TransposeStoreMovesDowncastBeforeTranspose、SharedTransposeKeepsStoreLocalDowncast、SharedTransposeMovesDowncastWhenAllStoresUseSameLowPrecision),覆盖Load->Transpose、Transpose->Store以及共享Transpose多消费者等场景。


不准确?
atomgit-bot
9月9日 评论:
9月9日 评论:
9月9日 添加了label:cann-cla/yes
此处折叠了130条消息 查看更多
29 天前 添加了label:lgtm
zhang_shengjie
29 天前 评论:
29 天前 评论:
/lgtm


yangyongqiang
29 天前 评论:
29 天前 评论:
/approve


29 天前 添加了label:approved
29 天前 合入了pull request
Pull Request
描述
1、修改升精度流程:Transpose节点不参与升精度。
2、进一步扩展Transpose融合使用Compact模式的场景。
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
NA
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。