已关闭
[Bug-Report|缺陷反馈]: DVM图模式SiLU BF16与ACLNN精度不一致 #4543
SorryNaCN创建于  9月3日关闭于  12 天前
SorryNaCN
SorryNaCN成员
9月3日 创建

问题描述

在 Ascend910B3 上使用 DVM 图模式执行 BF16 SiLU/SiLU backward 时,结果与原生 ACLNN 不一致。

  • SiLU 前向的 DVM decomposition 原运算顺序等价于 x * (1 / (1 + exp(-x))),而 ACLNN 使用 x / (1 + exp(-x))。浮点运算不满足结合律,两种写法在 BF16 下存在不同的舍入结果。
  • silu_backward 注册了 CompositeImplicitAutograd。AOTAutograd 图模式的外层 FunctionalTensorMode 会在 DVM 显式 decomposition 命中前走 CIA 展开,展开计算未按照 ACLNN 的 opmath 路径升到 FP32,导致 BF16 精度不一致。

期望结果

DVM 图模式下 BF16 SiLU forward/backward 与原生 ACLNN 位级一致。

修复方案

  1. 在 DVM decomposition 中通过 pw_cast_for_opmath 将 BF16/FP16 输入升到 FP32 计算,输出再转换回原 dtype。
  2. SiLU 前向保留 ACLNN 的除法运算顺序。
  3. 使用专门列表阻止 silu_backward 被 CIA 提前展开,使其进入 DVM 显式 decomposition。
  4. sigmoid 和 silu_backward 使用 aten.reciprocal(...),避免 Tensor.__rdiv__ 引入冗余的 reciprocal * 1.0。

验证结果

CANN 9.1.0 Beta3、torch 2.9.0、torch_npu 2.9.0.post3、Ascend910B3 环境下,BF16 normal、特殊值和 uniform[-20, 20] 三组输入,每组 67591 个元素;SiLU forward/backward 相对原生 ACLNN 均为 0 mismatch,最大绝对误差为 0。

likedislike
TorchNPU-BotTorchNPU-Bot成员
9月3日 添加了label:triage-review
TorchNPU-Bot
TorchNPU-Bot成员
9月3日 评论:

issue待分派,添加triage-review标签

likedislike
TorchNPU-BotTorchNPU-Bot成员
9月3日 添加了label:bot-triaged;删除了label:triage-review
TorchNPU-Bot
TorchNPU-Bot成员
9月3日 评论:

检测到当前 issue 已关联 PR,自动添加标签:bot-triaged

likedislike
SorryNaCNSorryNaCN成员
9月3日 关联了pull request:[bugfix][v2.7.1] 修复DVM SiLU BF16精度不一致
SorryNaCNSorryNaCN成员
9月3日 关联了pull request:[bugfix][v2.10.0] 修复DVM SiLU BF16精度不一致
SorryNaCNSorryNaCN成员
9月3日 关联了pull request:[bugfix][v2.11.0] 修复DVM SiLU BF16精度不一致
SorryNaCNSorryNaCN成员
9月3日 关联了pull request:[bugfix][v2.12.0] 修复DVM SiLU BF16精度不一致
SorryNaCNSorryNaCN成员
9月3日 关联了pull request:[bugfix][master] 修复DVM SiLU BF16精度不一致
SorryNaCNSorryNaCN成员
9月4日 关联了pull request:[bugfix][v2.7.1-26.1.0] 修复DVM SiLU BF16精度不一致
SorryNaCNSorryNaCN成员
9月4日 关联了pull request:[bugfix][v2.9.0-26.1.0] 修复DVM SiLU BF16精度不一致
SorryNaCNSorryNaCN成员
9月8日 关联了pull request:[bugfix][v2.10.0-26.1.0] 修复DVM SiLU BF16精度不一致
chenrayray
chenrayray成员
12 天前 评论:

因为本单相关实施 PR 已全部结束(9 个已合入、0 个已关闭),按照本轮 issue 整理规则,先关闭此单。

核对的 PR:

如仍有问题或需要继续推进,请重新打开,并补充当前 PyTorch / TorchNPU / CANN 版本、硬件环境、复现步骤及相关日志;需求类请补充尚未完成的具体内容。

likedislike
chenrayraychenrayray成员
12 天前 关闭了 issue
chenrayraychenrayray成员
12 天前 issue状态由 TODO 改变为 DONE
ascend-robotascend-robot成员
12 天前 添加了label:resolved