Merged
test(rms_norm_quant): 补充 Ascend 950 golden 测试资产 #11974
test(rms_norm_quant): 补充 Ascend 950 golden 测试资产 #11974
Merged
raoliang_sacAdd on 24 days ago
raoliang_sacCollaborators
24 days ago

描述

将 Ascend 950 的 RmsNormQuant 系列 golden/TestSpec 迁入算子仓 tests/assets/,并修复验证中发现的 native golden 标量处理、多维广播及输出 shape 问题。提交三份 Python 测试资产,并补齐 V2 的 GEIR 示例及 README 入口,不修改 ACLNN、InferShape、tiling、kernel、算子配置或构建规则,不改变任何产品的算子执行行为。

逐文件说明:

文件 修改内容、目的与效果
norm/rms_norm_quant/tests/assets/golden.py 注册 aclnnRmsNormQuant,迁入 V1 ACLNN CPU 参考与量化比较配置。保留最后一维归约、前导1 gamma/beta、INT32 存储的 INT4 输出处理;本轮异常修复未修改此文件。
norm/rms_norm_quant_v2/tests/assets/golden.py 注册 rms_norm_quant_v2,供 Kernel/GEIR 使用。旧参考访问 scalar 的 shape[0]、把 scale/zero point 展平并广播到 gamma,会对合法多维形状抛异常或给出错误输出 shape。改为只展平归一化轴、保留量化参数的原始广播轴、量化前恢复 x 的逻辑 shape。
norm/rms_norm_quant_v3/tests/assets/golden.py 同一个文件注册 native rms_norm_quant_v3 与 aclnnRmsNormQuantV3,保留各自函数及 TestSpec。native 同步上述修复,并将 rstd 恢复为未归约维度不变、归约各维大小为1的 shape。ACLNN 参考及其比较配置保持不变;未请求的输出返回 None。
norm/rms_norm_quant_v2/examples/test_geir_rms_norm_quant_v2.cpp 补齐线上 Check_Example 门禁发现的 V2 示例缺失。使用真实 GEIR 接口构造 FP32 x=[2,16]、gamma=[16]、scales1=[1]、scales2=[1] 的 INT8 双输出图,检查执行状态、输出 shape/dtype 和 y1=2、y2=4;不伪造独立 ACLNN V2 接口。
norm/rms_norm_quant_v2/README.md 将图模式示例入口从空占位替换为上述可点击源码链接。

范围与使用说明:

  • V3 原来的独立 ACLNN golden 文件已合入同一个 golden.py。TTK 允许单文件注册多个 TestSpec;两种接口函数不合并,比较门限不放宽。
  • 三份 golden 提供四套显式 TestSpec,同时保留 __golden__ 兼容注册;GEIR 复用 native spec。--plugin 可指向 tests/assets/ 或单文件。
  • 覆盖单/双量化、可选 beta/zero points、div_mode、INT8/INT4/FP8/HIFLOAT8 及 V3 可选 FP32 rstd。950 没有独立公开 aclnnRmsNormQuantV2,不迁入历史占位资产;V1 native kernel 不在此次950范围。
  • PR 不包含 ST、CSV、运行日志及空 Tensor 功能修改。新增56条广播/标量用例及辅助校验脚本维护在 MyTestCase 的 RmsNormQuant/golden_checks/;对应正常 golden 副本同步修复。
  • 已验证 TTK:raoliang_sac/ops-test-kit 的 fix/rms_norm_quant-packed-int4-comparison 或同提交任务分支 fix/rms_norm_quant-empty-tensor-testing,提交 db23e879adcd942c9ff2c34ff2139c7ac1a794b2。依赖其 FP8 requant、INT32 打包 INT4 与 HIFLOAT8 比较支持。
  • 已检查的原版 TTK master c34f3373111b523cec91f64518a95833a8015687 不接受 Spec 中的 standard="requant"。本 PR 未修改 TTK,不宣称适配该原版 master。

关联的Issue

https://gitcode.com/cann/ops-nn/issues/6688

测试

本轮使用修复后的仓内 golden,Ascend 950 实机、TTK 单进程;不同模式是执行次数,不合并为不重复用例总数:

检查 结果
修复前 Kernel/GEIR 探针 Kernel 8条:2 PASS、6 GOLDEN_FAILURE;GEIR 4条:2 PASS、2 GOLDEN_FAILURE
修复后56条 Kernel binary 新探针 36 PASS、20设备精度 FAIL、0 GOLDEN_FAILURE;全部 BINARY_MATCH
修复后20条 GEIR binary 新探针 14 PASS、6设备精度 FAIL、0 GOLDEN_FAILURE
原有正常场景 ACLNN 回归 54/54 PASS:合法 shape 12、量化 dtype 10、合法标量 rstd 32
原有正常场景 Kernel binary 回归 106/106 PASS:dtype 100、可选输出6;全部 BINARY_MATCH
原有正常场景 GEIR binary 回归 6/6 PASS
独立 Torch FP64 公式/shape/dtype 检查(CPU辅助) 56/56 PASS;不冒充 NPU 用例
原有正常 native 新旧逐位对照(CPU辅助) 1440/1440 一致;V1文件和V3 ACLNN/helper/TestSpec AST未变

新探针覆盖 scalar scales1/scales2、[1,1]量化参数、多维 gamma、量化/归一化维度不同、单量化、div_mode 双取值,及输入 FP16/FP32/BF16、五类量化输出。采用固定输入回灌,比较标准不变,未请求输出明确 SUPPRESSED。

本地 CI 已于2026-10-15重新执行并通过:受测提交 c82ca0f65f5567eda12fe12a5fedc778b6eac7b0,官方 master 快照 dfeee933397dc4aa8c567ea26d51aa514d5d90bc。PR保持单提交,rebase前后完整diff一致,本轮三份golden内容未改变。指定 /workspace/CI-skills/ci_local_check.sh 执行pre-commit、隔离OAT、链接、Python语法、新增的仓内 Check_Example 门禁及 GEIR 示例语法检查;新增 C++ 示例按现有规则完成950/A2定向package和graph UT构建。graph UT在两平台的筛选结果均为0例,不计作UT功能覆盖,也不把构建成功等同于设备功能验证。本轮另用任务内 CANN_Master、仓内golden及TTK --pc=1 运行与示例完全相同参数的GEIR binary用例:1/1 PASS,y1/y2精度均100%;示例本体做了C++11 -Wall -Wextra -Werror语法检查,没有执行示例二进制。可复现用例已同步至MyTestCase aaf7c10。上表保留此前精度验证结果;本地CI通过不代表已知设备广播精度问题已修复。线上CI已对同一受测提交触发,compile评论193937869已回查,机器人确认新流水线已启动;结果尚未返回,不宣称线上通过。

异常分类与验证边界:

  • 原先合并等价检查的 scales1=[H], scales2=[](H>1)组合不满足当前950要求两组 scale 等形状的校验(scalar 按[1]比较),不是合法精度支持要求。此次改用通过当前 host 校验的 scalar、多轴归一化、量化广播场景,不再将原来的80组人工异常作为遗留 golden 问题。
  • 新探针未全部设备精度通过。 Q=scale元素数、R=gamma元素数;当 Q 既不为1也不等于R时,56条 Kernel 中20条、20条 GEIR 中6条实际输出超差,均已完成 golden 计算,不是 GOLDEN_FAILURE。独立 FP64、固定输入回灌及设备 dump 共同确认差异;没有删用例、放宽容差或修改 golden 去迎合设备结果。
  • 例如 x=[2,3,16]、gamma=[3,16]、scale=[16]:INT8 y1 的 golden 与 FP64 最大绝对差为0,设备与 FP64 最大绝对差为131,22/96个元素超出1 LSB;gamma=[16]、scale=[3,16] 时也复现不符。当前 host 允许上述后缀形状,主线与包内 full_load kernel 在 Q!=1 时均按 R 个元素搬运量化参数,与一般 Q/R 广播不匹配。该算子实现缺口另行处理,本 PR 没有修复 kernel,不据此宣称算子全场景无问题。
  • 本轮是现有任务 CANN_Master 包的 golden 回归,不声称重新编译部署当前主线。使用源码核对辅助定位,不把源码一致性替代受测 binary 来源证明。
  • 之前 GEIR JIT 的一条 V3 scalar scales2 + output_rstd=true 在线编译超时未解决;本轮 GEIR 跑 binary,不宣称覆盖 JIT。未进行第三方 GPU 比对。

文档更新

无公开接口文档变更;V2 README 增加 GEIR 示例入口。使用依赖、验证结果与已发现的实现缺口在本描述说明;可复现用例及详细记录保存在 MyTestCase。

类型标签

AI/Agent生成声明

likedislike
Pull Request has been successfully merged by CANN-robot.
(Thank you for raoliang_sac's contribution.)
Rraoliang_sacCollaborators
24 days ago Created pull request, commit 9479b319
atomgit-bot
atomgit-bot
24 days ago Comments:

变更摘要

本 PR 为 Ascend 950 回归测试补充 RmsNormQuant 系列的 golden/TestSpec 资产,将 norm/rms_norm_quant* 下四个 tests/assets/ 文件迁入算子仓,实现测试资产随算子版本管理。各文件通过 __golden__ 注册 ACLNN 或 kernel 入口,并通过显式 __spec__ 绑定对应 TestSpec 类,提供参考计算逻辑与量化比较门限,不涉及 ACLNN、InferShape、tiling、kernel、配置或构建规则的改动。

主要改动

  • 迁移 aclnnRmsNormQuant ACLNN golden:norm/rms_norm_quant/tests/assets/golden.py 新增 aclnn_rms_norm_quant_golden,实现最后一维 RMSNorm 归约、[1, H] gamma 展平、dst_type/y dtype 映射,以及 _pack_int4_to_int32 将 INT4 结果打包为 INT32 存储,并定义 AclnnRmsNormQuantTestSpec。
  • 新增 rms_norm_quant_v2 kernel golden:norm/rms_norm_quant_v2/tests/assets/golden.py 注册 rms_norm_quant_v2,支持 gamma 后缀维度归约、可选 input_beta/input_zero_points1/2、div_mode 与单/双量化,输出覆盖 INT8/INT4/FP8/HIFLOAT8 等类型。
  • 新增 rms_norm_quant_v3 kernel golden:norm/rms_norm_quant_v3/tests/assets/golden.py 注册 rms_norm_quant_v3,在 output_rstd 为假时返回 None 的 rstd,FP32 rstd 使用 stat_rel_err 比较标准。
  • 新增 aclnnRmsNormQuantV3 ACLNN golden:norm/rms_norm_quant_v3/tests/assets/aclnn_golden.py 按公开 API 参数顺序(epsilon/div_mode/output_rstd 排在输出 tensor 之前)实现 aclnn_rms_norm_quant_v3_golden,保留 div_mode 乘除分支与 INT4 打包,output_rstd 为真时返回 [y, rstd]。
  • 统一注册与量化比较配置:四份文件均提供显式 __spec__ 并保留 __golden__ 兼容注册,比较标准按整数 quant、FP8 requant、INT4 打包 packed_bits: 4 及 float32 stat_rel_err 配置。

🧩 本次 Review 已使用自定义 Skill:

likedislike
Incorrect?
atomgit-bot
atomgit-bot
24 days ago Comments:

代码审查

✅ 未发现问题


🧩 本次 Review 已使用自定义 Skill:

likedislike
Incorrect?
CANN-robotCANN-robotCollaborators
24 days ago Added label: cann-cla/yes
CANN-robot
CANN-robotCollaborators
24 days ago Comments:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
*/*/README.md ✅ 陈娇, 陈展熹, 钱泽洪 (3/2) ✅ 陈娇 (1/1)
norm ✅ 钱泽洪, 陈展熹 (2/2) ✅ 钱泽洪, 陈展熹 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

raoliang_sac, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
77 messages are collapsed here。 See more
yuning_chen
yuning_chenCollaborators
23 days ago Comments:

您好,pr合入已准备就绪,请尽快联系committer进行检视,谢谢!

likedislike
chenjiaoCollaborators
23 days ago Comments:

/approve

likedislike
CANN-robotCANN-robotCollaborators
23 days ago Added label: approved
CANN-robotCANN-robotCollaborators
23 days ago Closed associated issue
CANN-robotCANN-robotCollaborators
23 days ago Merged pull request