已关闭
6 个 Loss/Norm 算子 arch35 路径存在跨核同步与规约精度缺陷 #6879
zl_hw创建于  8 天前关闭于  8 天前
zl_hw成员
8 天前 创建

[Bug-Report|缺陷反馈]: 6 个 Loss/Norm 算子 arch35 路径存在跨核同步与规约精度缺陷

Describe the current behavior / 问题描述

在 Ascend950 的 arch35(A5) 路径上,以下 6 个算子存在两类缺陷:

一、跨核同步:SyncAll() 前未排空 MTE3,0 号核可能读到未落地的 partial

PoissonNllLoss、MultilabelMarginLoss 的跨核规约都是"各核把 partial 写入 workspace → SyncAll() → 0 号核读回合并"。写 workspace 用的 DataCopyPad 是异步出口流水(__out_pipe__(MTE3)),但栅栏前没有排空,0 号核可能读到其他核尚未落地的值。该错误与时序/负载相关,表现为并发下偶现:同一用例、同一随机种子,--pc 2 跑两轮结论不一致(一轮 219/219 全绿,另一轮 1 例红)。

PoissonNllLoss 另有一处收尾同步使用固定事件号 EVENT_ID0(同文件其余 5 处均由 FetchEventID 分配),与在飞的同号事件冲突时会漏同步。

二、规约精度

  1. SoftmaxFocalLoss:ce/fw 的低位残差槽未按 tile 清零。(hi, lo) 是读改写,不清零会把 UB 残留当作上一轮残差累加。全量泛化 1198 例中 111 例红,全部集中在 reduction=none 且 D≥1000 的精确路径,元素通过率低至 0%。
  2. PoissonNllLoss:reduction=sum/mean 段内用库函数整段 ReduceSum(块间无补偿裸加)、段间 partial +=,绝对误差随块数/段数增长。三方 cross_check 中 rmse 比值达 4.55 / 6.01 / 8.31(限值 1.5),而 mare/mere 相对误差仅 0.001 量级 —— 即我方绝对误差约为竞品 pairwise 的 8 倍。
  3. SoftmaxFocalLossGrad:搬入参数把整条行距差值写进 rightPadding,但该字段只能把一行补到 32B 块边界,超出部分必须走 dstStride。int32 目标缓冲在 stride-len ≥ 8 的档位(D=1/2/4/6/21)全线 VEC_ERROR。
  4. MultilabelMarginLoss:块对齐长度向上取整会让 B 超过 k,块内顺序累加成为主导误差项。

Environment Information / 环境信息

  • 昇腾硬件型号:Ascend950PR
  • CANN 版本:9.3.0
  • Python 版本:3.11
  • 测试工具:ops-test-kit(kernel / geir 子命令)

Steps to reproduce the issue / 重现步骤

  1. 同步缺陷(偶现):用固定种子对 PoissonNllLoss 的 geir 用例集(219 例)以 --pc 2 连跑两轮
    python3 -m ttk geir -i poisson_geir_gen.csv -o out.csv --plugin <assets> \
      -d false -b release --geir-serve --seed 20261013 --pc 2
    
    两轮的红例集合不一致;改 --pc 1 并以固定输入连跑 4 遍则结果逐位一致(说明本方计算确定,差异来自同步)。
  2. SFL 精度:跑 SoftmaxFocalLoss kernel 全量泛化(1198 例,--compare close),111 例红,集中在 reduction=none、D≥1000。
  3. Poisson 精度:跑 PoissonNllLoss 三方 cross_check(不带 --compare),reduction=sum/mean 的大 n 用例 rmse 比值 >1.5。
  4. SFLG VEC_ERROR:跑 fp16、D∈{1,2,4,6,21} 的用例,bin_precision=NO_OUTPUT。

Describe the expected behavior / 预期结果

  1. 跨核规约结果与分核方式、并发度、重复次数无关:同输入多次执行逐位一致,固定种子下多轮判定一致。
  2. reduction=sum/mean 的求和误差不随块数/段数增长,三方 cross_check 三项比值均在限值内。
  3. 支持面内的 fp16 小 D 形状(D=1/2/4/6/21)正常出结果,不得 VEC_ERROR。
# 同步缺陷: 同种子两轮判定不一致
A 轮 seed=20261013 : 219 条, 红 0 例
B 轮 seed=20261013 : 219 条, 红 1 例  pnll_T4K1_16_n17575_logF_fullT_tiny_pos_r0366

# Poisson 三方 cross_check (修复前)
pnll_T2K2_32_n2797_logT_fullF_normal_r0165  mare=0.00136 mere=0.00136 rmse=8.31
pnll_T1K2x_32_n820_logT_fullT_large_r0537   mare=0.00161 mere=0.00161 rmse=6.01
pnll_T2K2x_32_n25000_logT_fullF_large_r0672 mare=0.00104 mere=0.00104 rmse=4.55

# SFL 泛化 (修复前)
sfl_gen_pkg.csv 1198 条 {'PASS': 1087, 'FAIL': 111}
  sfl_32_32_b8_d1024_1153     (8, 1024)    float32  元素通过率 0.0%
  sfl_32_32_b128_d1024_178    (128, 1024)  float32  元素通过率 90.6%

# SFLG 搬入非法补齐 (修复前)
bin_precision=NO_OUTPUT, bin_perf_us=UNKNOWN   D=1/2/4/6/21 全线
likedislike
yuning_chenyuning_chen成员
8 天前 将 zl_hw 设为负责人
CANN-robotCANN-robot成员
8 天前 关闭了 issue
CANN-robotCANN-robot成员
7 天前 添加了label:resolved