已关闭
[Bug-Report|缺陷反馈]: ReduceStdV2Update Arch35 多轮 mask 与 FP16/BF16 group 路径精度异常 #2593
zhongheng创建于  29 天前关闭于  27 天前
zhongheng
29 天前 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

一、问题描述 (必填)

ReduceStdV2Update 的 Arch35 kernel 存在两类确定性精度错误:

  1. 多轮 mask 计数被重复递减

AscendC::Reg::UpdateMask(remaining) 会通过引用自动更新 remaining。当前 kernel 在调用 UpdateMask 后又手工递减一次,导致剩余元素数被重复扣减。

当处理元素数超过单轮 FP32 mask 容量 64 时,后续数据可能被直接跳过。例如输入包含 128 个元素时,后半部分数据没有参与计算,造成方差和标准差结果错误。

  1. FP16/BF16 group tail-A 路径源步长计算错误

UB 中 tail-A 的 padding 按输入 dtype 的 32B 对齐生成,但 Phase1OutputToWorkspace 按 FP32 计算 cache 源步长。

对于 FP16/BF16,实际对齐宽度应为 16 个元素,错误实现按 8 个元素计算,导致 workspace 搬运读取 padding 区域,部分输出错误变为 0。

问题用例中可观察到输出索引 2、3、6、7 异常为 0。

该问题属于 kernel 实现的确定性精度错误,会影响:

  • 输入或中间数据需要超过 64 个 FP32 lane 的多轮寄存器计算路径。
  • FP16/BF16 的 group tail-A 分组归约路径。

二、环境信息 (可选)

• 昇腾硬件型号:Ascend950DT_9582
• CANN版本:CANN 9.2.0
• 操作系统:Ubuntu 20.04.6 LTS,x86_64
• Python版本:Python 3.11.9
• ops-test-kit版本:e559b7f1f550
• 算子:ReduceStdV2Update,Arch35 Ascend C kernel

三、重现步骤 (可选)

场景一:多轮 mask 问题

  1. 使用未修复版本编译并安装 ReduceStdV2Update。
  2. 构造 FP32 输入 shape=[8,16],共 128 个元素。
  3. 设置 dim=[1]、correction=1,分别测试:
    • if_std=false、keepdim=false;
    • if_std=true、keepdim=true。
  4. 通过 GEIR 运行并与 CPU Golden 逐元素比较。
  5. 可观察到前半部分输出正确,后半部分输出错误。

场景二:FP16/BF16 group tail-A 问题

运行以下用例:

  • wb_reduce_std_v2_update_0165

    • dtype=bfloat16
    • shape=(2,256,2,256,2)
    • dim=[1,3]
    • keepdim=false
  • wb_reduce_std_v2_update_0201

    • dtype=float16
    • shape=(2,256,2,256,2)
    • dim=[1,3]
    • keepdim=true

与 CPU Golden 比较时,可观察到部分输出错误变为 0。

四、预期结果 (可选)

  • UpdateMask 多轮循环应完整处理所有元素,不应重复递减 remaining。
  • FP16/BF16 group tail-A 路径应按照输入 dtype 的实际 UB padding 计算源步长。
  • ReduceStdV2Update 的所有输出应与 CPU Golden 一致。
  • 精度检查和内存越界检查均应通过。

💡 备注(选填)

likedislike
zhongheng
29 天前 评论:

/assign

likedislike
CANN-robotCANN-robot成员
29 天前 将 zhongheng 设为负责人
Zzhongheng
29 天前 修改了issue 的描述
CANN-robotCANN-robot成员
27 天前 关闭了 issue
CANN-robotCANN-robot成员
27 天前 添加了label:resolved