Open
[性能问题][aclnnFusedCrossEntropyLossWithMaxSum]aclnnFusedCrossEntropyLossWithMaxSum算子存在 性能问题(单case失败) #225
sleeveenAdd on  5 days ago
sleeveenCollaborators
5 days ago Create

确定性问题描述:[性能问题][aclnnFusedCrossEntropyLossWithMaxSum]aclnnFusedCrossEntropyLossWithMaxSum算子存在 性能问题(单case失败)
通路:aclnn
golden版本:20261103
golden链接:https://gitcode.com/opencann/operator-artifacts/blob/master/FusedCrossEntropyLossWithMaxSum/Golden/golden.py
cann版本:20261103
ttk版本:20261103
用例链接:https://gitcode.com/sleeveen/operator_test_case/tree/main/LongTail/Cases/Functional_Accuracy/Aclnn/aclnnFusedCrossEntropyLossWithMaxSum
用例名:aclnnFusedCrossEntropyLossWithMaxSum_L1_003
复现命令:python3 -m ttk aclnn -i 失败用例集_aclnnFusedCrossEntropyLossWithMaxSum_aclnn_性能失败.csv --plugin /home/CI/golden/aclnnFusedCrossEntropyLossWithMaxSum/ --device-whitelist=0 --dl=1 --xpu-perf -t aclnnFusedCrossEntropyLossWithMaxSum_L1_003
问题现象:

均值判断: 均值 = 该算子所有有gpu/npu性能结果的gpu/npu之和(811.204) ÷ 有性能值用例总数(299) = 2.7131; 与用例“带宽折算(均值)”比对, 均值 < 带宽折算(均值)判性能均值不过(本次均值不过用例0条)
单case判断: 逐用例比对 gpu/npu 与“带宽折算(单case)”, gpu/npu < 带宽折算(单case)判性能单case不达标(本次单case不达标用例70条)
gpu/npu=0.171 < 带宽折算(单case)=0.405, 性能单case不达标

开发责任人:张磊
PL:张磊

likedislike
严明奎
严明奎
4 days ago Comments:

请说明环境使用的NPU型号/带宽 GPU型号/带宽

likedislike
AlfengYuan
AlfengYuan
2 days ago Comments:

问题已修复,MR:https://gitcode.com/cann/ops-nn/pull/14270 (关联 cann/ops-nn#8653,根因/方案/验证数据的完整版见该 issue)

根因:49 条性能不达标用例全部为小 V 场景(V∈{1,2,3,4,7},299 条中 200 条 V=1)。原实现按大 V 通路逐行广播(每行一次 DIST_BRC_B32),小 V 时每行仅 1~8 有效 lane,广播与 2-D 小搬运的固定开销占满流水,有效带宽退化约两个数量级。

方案(4 个提交):

  1. 小 V 多行平坦打包快路:vocab 整块 1-D 搬入,softmax 按 G 行打包 G*v lane 处理,Gather(l/V) 展开 max/invSum,V=1 免 Gather;b16 预 cast fp32;tiling 新增 aPerLoop。
  2. 预取流水:消除 tile 内"搬入→计算→搬出"全串行,prologue 预取 + 循环内发本块 VEC/预取下一块/等输出,四队列深 2,MTE/VEC 重叠。提速 1.12~1.22x。
  3. 裸 vdiv + b16 内联 cast:inv_sum 补偿除改裸 vdiv(次正规 sum 时补偿无效);b16 vocab 加载时 DIST_UNPACK_B16 内联 cast 免整 tile 预转(bit 级等价)。再提速 1.04~1.99x。
  4. 评审修复:标量队列声明深度与小V预取流水用法对齐;vocab 源缓冲增加一个 VL 的 padding,收敛 V=3/5/6/7(G*v<VL)满 tile 末组向量读的越界(越界 lane 本就掩码、不影响结果)。

验证:

  • 49 条原不达标用例精度+性能 49/49 PASS;有效带宽 730~835 → 1164~1309 GB/s,追平 torch copy 实测上限(1230 GB/s);相对基线累计约 25~45x。
  • 全量 299 回归:性能 299/299、精度 298/299。唯一 FAIL(L1_296)与本次修改无关:同种子同输入下 baseline 与修复分支输出 bit 级完全一致(V=3789 不走小V快路);该用例输入随机生成且构造数据踩 fp32 溢出区(logits_max∈(-1000,-10)、vocab 恒 6.1e-5),rmse 比值在阈值 2.0 两侧随机波动(复跑 9 次 7 次 PASS),属用例数据设计问题,建议后续调整该用例的数据范围或阈值。
  • ophost UT 8/8 PASS(含新增 V=3 边界用例);新增 V=3/5/6 满 tile 边界用例 3/3 PASS。
likedislike
SsleeveenCollaborators
1 day ago Added label: 已提单