在 Ascend950 的 arch35(A5) 路径上,以下 6 个算子存在两类缺陷:
一、跨核同步:SyncAll() 前未排空 MTE3,0 号核可能读到未落地的 partial
SyncAll()
PoissonNllLoss、MultilabelMarginLoss 的跨核规约都是"各核把 partial 写入 workspace → SyncAll() → 0 号核读回合并"。写 workspace 用的 DataCopyPad 是异步出口流水(__out_pipe__(MTE3)),但栅栏前没有排空,0 号核可能读到其他核尚未落地的值。该错误与时序/负载相关,表现为并发下偶现:同一用例、同一随机种子,--pc 2 跑两轮结论不一致(一轮 219/219 全绿,另一轮 1 例红)。
PoissonNllLoss
MultilabelMarginLoss
DataCopyPad
__out_pipe__(MTE3)
--pc 2
PoissonNllLoss 另有一处收尾同步使用固定事件号 EVENT_ID0(同文件其余 5 处均由 FetchEventID 分配),与在飞的同号事件冲突时会漏同步。
EVENT_ID0
FetchEventID
二、规约精度
SoftmaxFocalLoss
ce
fw
(hi, lo)
reduction=none
reduction=sum/mean
ReduceSum
partial +=
cross_check
SoftmaxFocalLossGrad
rightPadding
dstStride
stride-len ≥ 8
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
--compare close
--compare
bin_precision=NO_OUTPUT
# 同步缺陷: 同种子两轮判定不一致 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 全线
[Bug-Report|缺陷反馈]: 6 个 Loss/Norm 算子 arch35 路径存在跨核同步与规约精度缺陷
Describe the current behavior / 问题描述
在 Ascend950 的 arch35(A5) 路径上,以下 6 个算子存在两类缺陷:
一、跨核同步:
SyncAll()前未排空 MTE3,0 号核可能读到未落地的 partialPoissonNllLoss、MultilabelMarginLoss的跨核规约都是"各核把 partial 写入 workspace →SyncAll()→ 0 号核读回合并"。写 workspace 用的DataCopyPad是异步出口流水(__out_pipe__(MTE3)),但栅栏前没有排空,0 号核可能读到其他核尚未落地的值。该错误与时序/负载相关,表现为并发下偶现:同一用例、同一随机种子,--pc 2跑两轮结论不一致(一轮 219/219 全绿,另一轮 1 例红)。PoissonNllLoss另有一处收尾同步使用固定事件号EVENT_ID0(同文件其余 5 处均由FetchEventID分配),与在飞的同号事件冲突时会漏同步。二、规约精度
SoftmaxFocalLoss:ce/fw的低位残差槽未按 tile 清零。(hi, lo)是读改写,不清零会把 UB 残留当作上一轮残差累加。全量泛化 1198 例中 111 例红,全部集中在reduction=none且 D≥1000 的精确路径,元素通过率低至 0%。PoissonNllLoss:reduction=sum/mean段内用库函数整段ReduceSum(块间无补偿裸加)、段间partial +=,绝对误差随块数/段数增长。三方cross_check中 rmse 比值达 4.55 / 6.01 / 8.31(限值 1.5),而 mare/mere 相对误差仅 0.001 量级 —— 即我方绝对误差约为竞品 pairwise 的 8 倍。SoftmaxFocalLossGrad:搬入参数把整条行距差值写进rightPadding,但该字段只能把一行补到 32B 块边界,超出部分必须走dstStride。int32 目标缓冲在stride-len ≥ 8的档位(D=1/2/4/6/21)全线 VEC_ERROR。MultilabelMarginLoss:块对齐长度向上取整会让 B 超过 k,块内顺序累加成为主导误差项。Environment Information / 环境信息
Steps to reproduce the issue / 重现步骤
PoissonNllLoss的 geir 用例集(219 例)以--pc 2连跑两轮 两轮的红例集合不一致;改--pc 1并以固定输入连跑 4 遍则结果逐位一致(说明本方计算确定,差异来自同步)。SoftmaxFocalLosskernel 全量泛化(1198 例,--compare close),111 例红,集中在reduction=none、D≥1000。PoissonNllLoss三方cross_check(不带--compare),reduction=sum/mean的大 n 用例 rmse 比值 >1.5。bin_precision=NO_OUTPUT。Describe the expected behavior / 预期结果
reduction=sum/mean的求和误差不随块数/段数增长,三方cross_check三项比值均在限值内。Related log / screenshot / 日志 / 截图