已关闭
ImprovePrecision 保留后端不支持的浮点 Cast 中间路径 #247
zqmin创建于  22 天前关闭于  19 天前
zqmin
zqmin成员
22 天前 创建

ImprovePrecision 当前会逐个删除浮点类型之间的 Cast,存在以下问题:

  1. 级联删除风险:逐节点删除 Cast 时,DelNode 修改图连接后,后续 Cast 的实际输入 dtype 会改变,可能发生级联错误。
  2. 不支持 dtype 转换被折叠:如 BF16 -> FP32 -> FP16,直接折叠为 BF16 -> FP16 可能超出后端支持的 Cast 类型范围。

修复方案

将 Cast 处理从逐节点改为两阶段链级处理:

  • 第一阶段:收集连续线性 Cast 链,使用 DP 计算最小保留路径(CanCollapseCast 校验每条边是否被后端支持,identity 成本 0,真实转换成本 1),统一删除不需要的 Cast。
  • 第二阶段:只对保留的 Cast 执行原有 IsFloatToUltraLowNeedInsertCastShouldChangeDataType 精度后处理。

附加修复(代码检视发现):

  • MarkRetainedCastNodes 回溯循环增加越界保护
  • ProcessCastChains 对孤立节点容错
  • CollectLinearCastChain 去除冗余线性检查
  • 移除 ProcessCastNodePrecision 前置声明,按调用顺序重排函数定义
  • 抽取 UT/ST 重复 helper 到公共头文件

验证场景

  • BF16 -> FP32 -> FP32 -> FP16:删除中间 identity,保留 BF16 -> FP32FP32 -> FP16
  • FP32 -> FP32(首尾相同):整链删除
  • INT32 -> Cast -> Cast(非浮点源):fallback 逐节点处理,identity 仍删除
  • FP16 -> Cast(FP16) -> Abs(分支):不走链级优化,单节点处理

UT 4/4 通过,ST 25/25 通过,PR pipeline 通过。

likedislike
zqminzqmin成员
22 天前 关联了pull request:fix: 保留后端不支持的浮点 Cast 路径(#247)
zqminzqmin成员
22 天前 添加了label:Passesbug
wangmingming成员
21 天前 评论:

待分析处理

likedislike
Wwangmingming成员
21 天前 将 zqmin 设为负责人
zqminzqmin成员
19 天前 修改了issue 的描述
zqminzqmin成员
19 天前 修改了issue 的描述
zqminzqmin成员
19 天前 修改了issue 的描述
CANN-robotCANN-robot成员
19 天前 关闭了 issue
CANN-robotCANN-robot成员
19 天前 添加了label:resolved