已关闭
[Bug-Report|缺陷反馈]: BNInferGrad kernel 与 GEIR Golden 计算逻辑不一致 #5284
yulianjie创建于  8月28日关闭于  9月1日
yulianjie成员
8月28日 创建

Describe the current behavior / 问题描述 (Mandatory / 必填)

BNInferGrad 的 Ascend950 kernel 与 GEIR Golden 存在计算语义不一致:

  1. GEIR Golden 按 sqrt(abs(batch_variance + epsilon)) 计算,原 kernel 缺少 abs,当 batch_variance + epsilon < 0 时 NPU 输出 NaN,而 Golden 为有限值。
  2. 极值输入下,AscendC 的 (scale * rsqrt) * grads 会在 FP32 中间步骤先溢出;GEIR NumPy 计算的中间值可提升为 float64,因此最终结果仍可能可表示。

GEIR Excel Level1 前 200 条用例在修复前表现为 99 PASS、101 FAIL,失败主要为 NaN/Inf 不一致。

Environment / 环境信息 (Mandatory / 必填)

  • Hardware: Ascend 950
  • CANN: 9.2.0
  • Operator repository: cann/ops-nn
  • Operator: norm/bn_infer_grad
  • Test framework: /home/ylj/cann/ops-test-kit
  • Case source: BNInferGrad.xlsx, Level1 rows 2-201

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

  1. 构建并安装包含 BNInferGrad 的 custom_nn 自定义算子包。
  2. 将 BNInferGrad.xlsx 的 Level1 rows 2-201 原序转换为 TTK kernel CSV。
  3. 使用与 GEIR 一致的 Golden:grads * scale / sqrt(abs(batch_variance + epsilon))。
  4. 执行 TTK kernel 精度测试并查看 precision_status。
  5. 对负 batch_variance + epsilon 用例可观察到原 NPU 输出 NaN、GEIR Golden 输出有限值;对乘法极值用例可观察到中间溢出差异。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

BNInferGrad kernel 应与 GEIR Golden 保持一致:

  • 对 batch_variance + epsilon 先取绝对值再开方。
  • 正常有限输入保持 GEIR 的乘法顺序。
  • 仅在该顺序产生 FP32 Inf/NaN 中间结果时,使用数学等价的乘法结合顺序避免伪溢出。
  • Level1 前 200 条 TTK 用例精度和 memory OOB 全部通过。

修复后验证结果:

  • Ascend950 package build:PASS。
  • 构建产物:6/6 个 dtype/format .o,12 个子 kernel,安装包生成成功。
  • GEIR Excel Level1 前 200 条:200/200 precision PASS,0 FAIL,0 SKIP;memory OOB 全部 PASS。
  • FP32 中间溢出定向用例:9/9 PASS。
  • 修复提交:acc8e51c8e0d4294713bb09e15935e9b4e863685

Special notes for this issue/备注 (Optional / 选填)

修复 PR:https://gitcode.com/cann/ops-nn/merge_requests/9432

本次仅修改 norm/bn_infer_grad/op_kernel/arch35/bn_infer_grad.h,不改变接口、tiling、dtype 或 format 支持范围。

likedislike
Yyulianjie成员
8月28日 添加了label:bug-report
yulianjie成员
8月28日 评论:

/assign

likedislike
Yyulianjie成员
8月28日 关联了pull request:fix(BNInferGrad): 对齐 GEIR Golden 计算逻辑
CANN-robotCANN-robot成员
8月28日 将 lianjieyu 设为负责人
Ttianyu52成员
8月28日 关联了pull request:BNInfer,InplaceApplyRMSProp以及ApplyCamePart1算子检视意见闭环
CANN-robotCANN-robot成员
9月1日 关闭了 issue
CANN-robotCANN-robot成员
9月1日 添加了label:resolved
Ttianyu52成员
9月1日 删除了关联的pull request:BNInfer,InplaceApplyRMSProp以及ApplyCamePart1算子检视意见闭环