Closed
[Bug-Report|缺陷反馈]: SquareSumAll FP32 末级 partial 合并导致三方精度超差 #3596
raoliang_sacAdd on  23 days agoClosed at  23 days ago
raoliang_sacCollaborators
23 days ago Create

一、问题描述 (必填)

SquareSumAll Ascend 950 FP32 大归约的末级 partial 合并存在逐级舍入误差,导致三方 cross_check L1 超差。冻结故障输入共 251300672 元素:NPU 输出 8376.875,FP64 golden 为 8376.874228193426,A100 FP32 dot 为 8376.8740234375,RMSE 比 3.76939797 超过 1.5。

实际导出的 1728 个 NPU partial 的 FP64 和为 8376.8740940094,其 FP32 舍入值与 A100 相同;误差集中于末级合并。修复仅在末级 group 累加和水平归约保留 TwoSum 残差,非有限主和清零补偿,以保留 NaN/Inf 行为。

二、环境信息 (可选)

  • 仓库基线:cann/ops-math master,49a680e4180b43f2b0bda9d7644998e705a29689。
  • NPU:Ascend950PR_9579;CANN 包 9.3.0~weekly.20260923.01(opp 内部版本 9.2.0,timestamp 20260923_000324205)。
  • TTK:3.0.0,e3fb50a977f89da24084e344c073d34834e659e3;显式 --pc=1。
  • GPU:A100-PCIE-40GB,torch 2.14.1+cu130。

三、重现步骤 (可选)

固定输入生成、原 golden、真实 GPU 输出采集与输入 SHA256 核对脚本保存在本地验证目录;关联 PR 仅提交 kernel 修复。

使用原 cross_check L1 比较发布 binary。新增配方中的 ssa_random_n8192_s112 和 ssa_random_n221185_s119 第二路输出也可复现基线失败;修复后通过。原冻结 seed43 输入属于交接保留的数据,不声称普通随机生成即可逐位重建该历史输入。

四、预期结果 (可选)

在不修改原 golden 或容差的前提下通过三方 L1 比较,保持 NaN/Inf/上溢行为。修复版发布 binary 59/59 用例、118/118 输出通过,全部 BINARY_MATCH、内存检查通过;共同 55 例基线有 3 例失败。原失败大输入 TTK 耗时约增加 0.17%。

💡 备注

补偿不承诺任意输入与任意 GPU 版本逐位一致。本地 CI 已通过,受测 SHA c292bc18bb1d3a811a57ec4c54c256dabdb46c8d。Ascend 950/A2 定向构建入口通过;算子只交付 Ascend 950,kernel UT 目标无实际用例。精度回归与本地 CI 分别记录。

关联 PR:https://gitcode.com/cann/ops-math/merge_requests/6386

likedislike
Rraoliang_sacCollaborators
23 days ago Added label: bug-report
Rraoliang_sacCollaborators
23 days ago Modify description of issue
CANN-robotCANN-robotCollaborators
23 days ago Close issue
CANN-robotCANN-robotCollaborators
23 days ago Added label: resolved
Xxujiachen8Collaborators
8 days ago Assign raoliang_sac as responsible person