已关闭
[Bug-Report|缺陷反馈]: QuantizeAddLayerNorm Ascend950 精度回归未通过:多行 Full-load 大偏差及量化/残差差异(附 Golden) #6041
陈展熹创建于 9月20日关闭于 27 天前
yuning_chen
9月20日 评论:
9月20日 评论:
初步分析
感谢反馈,我们已开始核对这个问题。
现象理解:quantize_add_layer_norm 在 Ascend950/arch35 上按冻结 Golden 回归,1218 条中有一批未通过;正文请优先看多行 Full-load 大偏差,并区分量化输出 ±1 与残差加法顺序差异。
当前判断:初步判断,待复现确认。这是实测对比差异汇总,不能等同于同等数量的独立 kernel 缺陷;大偏差、±1 和残差 x 失败可能不是同一原因,需按代表例复现。
涉及范围:norm/quantize_add_layer_norm 的 arch35 实现,以及量化输出 y、残差输出 x 的比较口径。
下一步:我们会优先按附件复现 Full-load 大偏差代表例,并核对量化前精度与残差加法顺序的契约。


chenqi_814540
9月21日 评论:
9月21日 评论:
正在复现修复中


9月21日 关联了pull request:fix: 修复quantize_add_layer_norm A5算子精度问题
27 天前 关闭了 issue
27 天前 添加了label:resolved
Cchenqi_814540
17 天前 关联了pull request:fix: quantize_add_layer_norm算子950量化前补充低精度回转(对齐 910 与 SE 规格),修复 22 条逐位比对失败
17 天前 关联了pull request:fix: quantize_add_layer_norm算子950量化前补充低精度回转(对齐 910 与 SE 规格),修复 22 条逐位比对失败
问题描述
对官方
quantize_add_layer_norm的 Ascend950/arch35 实现,使用已有 TSE 黑盒和 STDesign 用例及冻结 Golden 回归。1218 条实际设备数值比较中,936 条通过、282 条按该参考未通过。附全部 282 条失败定义、逐例指标、原样 Golden,以及代表例原始输入和设备输出。本 issue 汇总的是实测比较差异,不将 282 条记录等同于 282 个独立 kernel 缺陷。 用例跨集合存在重复场景;部分参考语义仍需确认。建议优先复现下述 13 条多行 Full-load 大偏差,特别是普通有限值域的 5 条黑盒用例。
分套结果
所有 TSE L1/L2 都已实际执行,包括此前未执行的 305 条。其余 host 拒绝、Golden 不适用/拒绝、资源未执行和异常用例检查不计入上述 282 条。
282 条中:262 条仅 y 失败、14 条仅 x 失败、6 条二者均失败。y 为 INT8 量化输出,x 为启用 additional_output 时的残差相加输出。
A. 多行 Full-load 大偏差:13 条,根因待定位
13 条均走 key=8012 的多行 Full-load 路径;y 最大绝对差为 128~255。以下 5 条来自普通有限值域黑盒,epsilon 均为 1e-5:
完整 ID 为
quantize_add_layer_norm_bb_l2_<后缀>。另 8 条为QuantizeAddLayerNorm_L0_049/070、QuantizeAddLayerNorm_L1_300/404/563/567/631/661,涉及极值输入、小或负 scale、极小/极大 epsilon 等组合,完整配置见附件 CSV。共同路径/输入条件是观察结果,尚未证明为共同根因。不能用下述四例的量化前 dtype 回转解释直接覆盖这 13 条。
B. y 相差 ±1:255 条
另有 255 条的 y 最大绝对差为 1,涉及 FP16/BF16 和部分 FP32。按原标签,黑盒 L2 的 239 条失败分为:
已对 L2_520/524(FP16)和 L2_760/764(BF16)做固定输入 CPU 诊断:保持同一 F.layer_norm 和其它计算,仅在诊断参考中省去
norm.to(input_dtype).float(),四条设备输出与诊断结果逐元素相等,原 1/3/10/19 个差异全部得到解释。这与上游 Welford 直接在 FP32 仿射结果上 Div/加 offset/量化的源码一致。这仅解释已诊断的四条,正式验收仍使用原 Golden,四条仍记失败。诊断参考没有用于替换 Golden。
C. x 比较失败:20 条
18 条 FP32、2 条 FP16;其中 6 条同时有 y 问题,故不能与 A/B 直接相加。
(x2+bias)+x1,冻结 Golden 为(x1+x2)+bias;Full-load/Welford 共用的残差加载函数采用前一种顺序。环境信息
重现步骤
预期结果与请求确认
日志、结果与附件
SHA256:
d3f75f0f0ed00fdc5d1e76297aaa9db9f98ac82321cc0261561fa4aa3d5cf802SHA256:
b0dac4781e7a7fb6b27094c9590f8eb4f93005d314fe170d0bb783550fe16e2d两个包都包含原样
golden.py。代表包中运行python3 verify_saved_outputs.py可核对保存证据;加--recompute-golden可用冻结 Golden 重算。我们已在 Torch 2.7.1+cpu 下确认五例重算 Normal 与保存参考逐位一致;这不改变原精度失败判定,也不表示重放了正式 x CrossCheck。当前 Golden:附件中的 golden.py 是本轮原样冻结文件,SHA256:
9d7307dd73553798c05e88eff96f9263820f8c2b7d0765c462a6edf627ddd592其计算使用 Torch F.layer_norm,残差为
(x1.float()+x2.float())+bias.float();FP16/BF16 量化前回转原 dtype,再除 scale、加 zero_points、最近偶数舍入并 clamp 到 INT8。主包 README 和两份诊断报告说明其适用范围与 Promote 内部 FP32 的限制。相关需求:quantize_add_layer_norm 增加 Ascend 950 支持 #4496。本 issue 针对上述固定提交的实际回归结果。