已合并
fix(norm): 补齐 RmsNormQuant 参数校验与可选输出推导 #10865
raoliang_sac创建于 9月20日
fix(norm): 补齐 RmsNormQuant 参数校验与可选输出推导 #10865
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 raoliang_sac 的贡献)9月20日 创建了 pull request,commit a894da8e
9月20日 添加了label:cann-cla/yes
CANN-robot
9月20日 评论:
9月20日 评论:
CANN-robot
9月20日 评论:
9月20日 评论:
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) |
| */*/docs/acl*.md | ✅ 陈娇, 钱泽洪, 陈展熹 (3/2) | ✅ 陈娇 (1/1) |
| */*/op_graph/*_proto.h | ✅ 陈展熹, 汤磊, 钱泽洪 (3/2) | ✅ 汤磊 (1/1) |
| norm | ✅ 钱泽洪, 陈展熹 (2/2) | ✅ 陈展熹, 钱泽洪 (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies 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. 👍


9月20日 将zengjuan,u010470851,chaotang233,kevin_huang1234,crystalhu,yangyang016,fanqirui,gitee-duhuiping,wangrui_,renruhai,su-yueming,zhajianqing123,tang-lei01,yourealize,chenqi317,wang-xing001,liubo75,tangweiwei2,gitcode-chenjiao,chenxingyu18,liujie12345678,pingchuantang,Chen_HaoWen,qianzehong,wangyongguang,fengying555682,caiwenwen,yanglu-1设为评审人
9月20日 将zengjuan,u010470851,chaotang233,kevin_huang1234,crystalhu,yangyang016,fanqirui,gitee-duhuiping,wangrui_,renruhai,su-yueming,zhajianqing123,tang-lei01,yourealize,chenqi317,wang-xing001,liubo75,tangweiwei2,gitcode-chenjiao,chenxingyu18,liujie12345678,pingchuantang,Chen_HaoWen,qianzehong,wangyongguang,fengying555682,caiwenwen,yanglu-1设为评审人
此处折叠了95条消息 查看更多
CANN-robot
9月28日 评论:
9月28日 评论:
The MR can not be merged, because of CodeReview discussion not resolved
If you want to solve this problem, you can click here to do it in the FAQs.


9月28日 解决了最后一个问题
9月28日 关闭了关联的issue
9月28日 合入了pull request
CANN-robot
9月28日 评论:
9月28日 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
修复 Ascend 950/RegBase 上 RmsNormQuant 系列的参数校验遗漏、错误分类和可选输出推导问题。合并原扫描整改与返回码/日志整改;不修改 kernel 计算、tiling key 或 AddRmsNormQuant V1/V2 产品代码。
问题、原因与效果
GetOptionalInputShape(INPUT_SCALE2_IDX) != nullptr判断第二路是否实际提供:标量scales2=[]仍有非空 shape 对象,因此按已提供处理并推导y2=x.shape;只有真正未提供 scales2 时才使用y2=[1]占位。561103内部空指针错误。TTK 基于原 PR 提交3fce33f2c部署实测 34 条此类输入返回 561103;改为在 RegBase API 层检查并返回161002。161001,空 Tensor 为161002。V3 可选 offset/beta 和未请求的 rstd 保留合法空值语义。[H]、[1,H]合法组合、scale 长度 1/H、INT32 打包 INT4 和有效 rstd 的形状约定;当 x 为一维时,rstd 保留[1]和标量两种历史表示;原生 GEIR 的多轴归一化能力不套用 ACLNN 的末轴限制。zero_points2单独提供场景:旧代码已经拒绝该组合,但使用内部错误上报,并在外层重复记录相同原因。改为EZ0037用户参数错误,明确提供zero_points2时必须提供scales2;去掉外层重复日志,仍返回GRAPH_FAILED,不新增限制、不放宽支持范围。此规则不套用到支持该组合的 AddRmsNormQuant V1/V2。output_rstd=false时 InferDataType 不写必需输出 rstd 的 dtype,初始DT_UNDEFINED导致 GEEZ3002拒绝执行。改为始终推导DT_FLOAT,只补输出元数据,不开启 rstd 计算;原先错误断言“false 时不应写 dtype”的 UT 同步纠正。aclnnRmsNormQuantV3GetWorkspaceSize边界对照确认:offset为标量、以及 H=1 时beta为标量,修改前 ACLNN 实现返回成功,修改后依公开接口的形状约束返回161002;合法 H=1 的[1]、[1,1]norm 参数前后均通过。这两条属于 ACLNN 非法输入校验遗漏,不混记为561103分类修正。每个文件的修改、目的及前后效果
norm/rms_norm_quant/op_host/op_api/aclnn_rms_norm_quant.cppreturn false;本轮仅 RegBase 提前拒绝首维不为 1 的二维 gamma/beta、非法 scale 长度,将用户形状错误从 561103 纠正为 161002;修正 offset dtype 日志主体。norm/rms_norm_quant/tests/ut/op_host/op_api/test_aclnn_rms_norm_quant.cppnorm/rms_norm_quant/docs/aclnnRmsNormQuant.mdnorm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_infershape.cppGetOptionalInputShape(INPUT_SCALE2_IDX) != nullptr判断可选输入是否存在,真正缺省时推导[1]无效占位,标量scales2=[]仍识别为已提供并推导 x 形状。norm/rms_norm_quant_v2/tests/ut/op_host/test_rms_norm_quant_v2_infershape.cppscales2=[]的 y2 推导断言,分别验证[1]占位和y2=x.shape分支。norm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_tiling_regbase_base.cppzero_points2单独提供原先以内部错误上报且重复记录,改用OP_LOGE_FOR_INVALID_ARGUMENT_WITH_REASON上报 EZ0037,并删除外层重复日志。拒绝条件、GRAPH_FAILED、tiling 计算及 GEIR shape 能力不变。norm/rms_norm_quant_v2/op_graph/rms_norm_quant_v2_proto.hnorm/rms_norm_quant_v2/README.mdnorm/rms_norm_quant_v3/op_api/aclnn_rms_norm_quant_v3.cppnorm/rms_norm_quant_v3/tests/ut/op_api/test_aclnn_rms_norm_quant_v3.cppnorm/rms_norm_quant_v3/docs/aclnnRmsNormQuantV3.mdnorm/rms_norm_quant_v3/op_host/rms_norm_quant_v3_infershape.cppscales2=[]及其他已提供形状均推导y2=x.shape。另修复 output_rstd=false 时 rstd 的 dtype 未设置导致 GE 拒绝的问题,始终推导 FLOAT,不改变是否计算 rstd。norm/rms_norm_quant_v3/tests/ut/op_host/test_rms_norm_quant_v3_infershape.cpp[]、普通形状及未知秩分支;纠正原 false 场景错误的 dtype 期望;从初始 UNDEFINED 验证 5 种 dst_type × true/false 和属性缺省的完整输出类型推导。norm/rms_norm_quant_v3/tests/ut/op_host/test_rms_norm_quant_v3_tiling.cppnorm/rms_norm_quant_v3/op_graph/rms_norm_quant_v3_proto.hnorm/rms_norm_quant_v3/README.md兼容性边界
IsRegbase()分支调用;不改 A2/A3 原有预处理和计算路径。zero_points2日志整改仅在 V2/V3 的 RegBase tiling 路径生效;两者入口已通过IsRegbaseSocVersion()限定平台,不修改 A2/A3 路由及行为,也不改 kernel。关联的Issue
关联的Issue:#6248
Fixes #6248
测试
以下为 2026-09-20 已完成的回归记录;2026-09-21 与 2026-09-23 的增量验证单列在本节末尾,不将旧回归算成本次重新执行。使用工作目录的 TTK(add_ops_onto_master,f78078fb)和 CANN 9.2.0,950 实机;构建最多 -j8,所有 TTK 模式显式 --pc=1,批次串行。按 CSV 原始结果及真实返回码逐条核验,不以 runner exit=0 代替测试通过。
aclnnRmsNormQuantV3GetWorkspaceSize标量边界为 0→161002。记录真实 GetWorkspaceSize 返回码,不用 TTK N/A 冒充 PASS。aclnnRmsNormQuantV2资产 1 条为 OP_API_NOT_FOUND,不算精度 PASS;950 的公开 V2 计算入口是aclnnRmsNormQuant,已由其 500 条回归覆盖。截至 2026-09-20,既有全量及新增 kernel/GEIR 批次合计 4143 条记录:3558 条精度 PASS、578 条未注册 binary 组合、6 条预期拒绝、1 条不可用 API。上述 71 条返回码对照及 88 条合法输入前后对照另行统计,不重复堆入通过数。当时用例资产为 18 个 CSV、4244 行;资产行数也不等于通过数。最终自动核验覆盖资产 SHA256、完整行数、真实返回码、注册组合匹配和精度状态,全部符合上述预期。
本轮将 TTK Golden 对 ACLNN 二维 gamma 的归一化轴修正为公开接口的末轴语义,并增加 6 条 CPU 回归,相关 Golden/量化比较 CPU 测试共 45 PASS;没有放宽精度容差。GEIR 的原生多轴能力保留,不能复用 ACLNN 的轴限制。
上一版 GEIR runner 的 rc=-11 已定位到本机 Python 日志任务查询问题,可用不依赖 CANN 的最小程序复现;结合 TTK 的栈限制设置,仅在任务启动环境内处理。GEIR 能真正执行后又复现上述 V3 dtype 产品缺陷,并完成修复后 58 条正向回归;没有将产品缺陷归咎于环境,也没有把绕过 runner 崩溃本身算作算子通过。
2026-09-21,提交
b5ff65c07的 zero_points2-only 日志整改补测:313ed0c99对应已部署产物,修改后重新以 --pkg -j8 构建相关算子包并部署到同一工作目录 CANN;包内和实际加载的 tiling 库 SHA256 一致。API/proto 库 SHA256 与修改前一致。Invalid_Argument(EZ0037),指出 zero_points2 存在时缺少 scales2,且删除外层重复日志。负向 CSV 保留 EXEC_FAILURE,不算精度 PASS、没有精度百分比。Golden 不支持非法组合而报 TypeError 的原始记录也保留;拒绝结论来自其后实际 GEIR 执行的 tiling/RunGraph 日志,不来自 Golden 失败。2026-09-21,提交
520c75e4b的一维 x / 标量 rstd 兼容补测:examples/regression/rms_norm_quant_v3_950_aclnn.py:自动收集同族输入 CSV 中的 V3 用例,排除结果 CSV,检查重名/禁用/负向预期缺失,记录逐例来源及源文件 SHA256;新增问题用例继续沉淀到 TTK,不进入产品 PR。2026-09-23,提交
879de1f52的标量 scales2 与 A3 兼容性补测:scales2=[],验证GetOptionalInputShape(INPUT_SCALE2_IDX)返回非空 shape 指针,y2推导为 x 形状;缺省 scales2 的独立用例仍推导[1]占位。--pc=1:V2 覆盖二维/三维 x,V3 覆盖output_rstd=false/true。V2 两个输出均为 100%;V3 未请求 rstd 时为SUPPRESSED,请求 rstd 时三个输出均为 100%。这组实测确认标量不会被误判为缺省输入。Ascend910_9362) 使用同一提交独立编译、刷入任务专用 CANN/vendor 后,RmsNormQuant 合法 ACLNN 矩阵 22/22 PASS,每条有效输出精度达标比例均为 100%;覆盖 FLOAT16/BFLOAT16、INT8/INT4、rank 1/2/3/4/8、H=1 及多组 epsilon。非法二维 scale 返回 161002。未修改 kernel,A3 合法计算路径未见回归;A2 未实机执行,其结论仍来自与 A3 共用的非 RegBase V1 API 路径审计。文档更新
两份 ACLNN 说明补齐上述返回码和约束;V2/V3 README 与图原型同步 y2 占位约定。
类型标签
AI/Agent生成声明