已关闭
[Bug-Report|缺陷反馈]: RmsNormQuant 系列 950 参数校验、错误分类与可选输出推导不完整 #6248
raoliang_sac创建于  25 天前关闭于  25 天前
raoliang_sac成员
25 天前 创建

Describe the current behavior / 问题描述

Ascend 950/RegBase 的 RmsNormQuant 系列存在参数校验遗漏、错误分类以及可选输出元数据推导问题:

  1. aclnnRmsNormQuant 的非一维 scale 检查只打印错误日志,却没有返回失败;部分非法二维 gamma/beta 在预处理阶段才失败,用户参数错误被报告为 561103 内部空指针错误。
  2. aclnnRmsNormQuantV3 缺少部分最小维度、数据类型组合及输入输出形状检查,非法参数可能进入下层构建流程。
  3. 原生 RmsNormQuantV2/V3 未提供 scales2 时,InferShape 仍将 y2 推导为 x 的完整形状,与无效占位语义不一致。
  4. RmsNormQuantV3 在 output_rstd=false 时未推导必需输出 rstd 的有效 dtype,可导致 GE 因 DT_UNDEFINED 拒绝执行。
  5. V2/V3 的 zero_points2-only 组合原本已经拒绝,但错误分类不准确且存在重复日志;另有 offset 类型日志主体误写及支持类型日志漏写 INT4。

Environment Information / 环境信息

  • 目标平台:Ascend 950/RegBase;实测设备 Ascend950PR_9579。
  • CANN:9.2.0。
  • 测试方式:TTK ACLNN、kernel binary、GEIR,以及 API/InferShape/tiling UT。
  • 对应修复:PR !10865,当前头提交 9e03a60a90f54496a93d75601cf76b1e4688fa69。

Steps to reproduce the issue / 重现步骤

  1. ACLNN 标量 scale:使用 x/y=[2,32]、gamma/beta=[32]、scale/offset=[];x、gamma、beta、scale 为 FLOAT16,offset/y 为 INT8,epsilon=1e-6,调用 aclnnRmsNormQuant 两段接口。修改前会打印 scale 维度错误,但两段接口均可返回 0。
  2. ACLNN 非法 norm 形状:将二维 gamma 或 beta 的首维设置为非 1,保持其余输入满足对应接口约束,检查 GetWorkspaceSize 的真实返回码及日志。
  3. 原生 V2/V3 图:不提供 scales2,检查 y2 推导结果;另提供标量 scales2=[] 作为正向对照,避免将标量误判为缺省。
  4. 原生 V3 图:output_rstd=false,从未设置 rstd dtype 的图描述执行类型推导及 GE 图执行,检查是否仍残留 DT_UNDEFINED。
  5. 原生 V2/V3 图:只提供 zero_points2、不提供 scales2,检查拒绝原因、错误分类及重复日志。

Describe the expected behavior / 预期结果

  • 950 ACLNN 对接口约束之外的 dtype/shape 返回 161002;必选空指针仍为 161001,真正内部错误仍保留内部错误分类。
  • V1 新增非一维 scale 的拒绝仅在 IsRegbase() 为真时执行;A2/A3/310 保留历史日志及继续执行行为,不改变原有计算路由。
  • V2/V3 真正未提供 scales2 时,y2 推导为 [1] 无效占位;提供标量 scales2=[] 时仍识别为有效第二路,y2 推导为 x.shape。
  • V3 始终推导 rstd dtype=FLOAT,不因此开启 output_rstd=false 场景的 rstd 计算;ACLNN 一维 x 对应的标量 rstd 兼容性保留。
  • zero_points2-only 继续拒绝,使用 EZ0037 明确说明缺少 scales2,避免重复记录同一原因。

定向对照结果:

950 V1 scale=[],修改前:
  DimNum of scale must be 1, but get [0]
  aclnnRmsNormQuantGetWorkspaceSize = 0
  aclnnRmsNormQuant = 0
  TTK precision = 100.0%
950 V1 scale=[],当前修复:
  aclnnRmsNormQuantGetWorkspaceSize = 161002
950 V1 scale=[1],当前修复:
  两段接口均返回 0,TTK precision = 100.0%
  • 旧平台 Host API 模拟矩阵 136 项检查:当前修复与主线返回值一致,包含标量及多维 scale。此结果不是 A2/310 实机验证。
  • V2/V3 标量 scales2 的 950 TTK GEIR 定向 4/4 PASS,有效输出精度通过率均为 100%;未请求输出不计精度百分比。
  • 更完整的历史回归、前后对照及各批次验证范围见关联 PR 的测试记录。最后的 RegBase 条件提交仅增量编译及定向验证,未宣称重新执行全量 CI。

Special notes for this issue / 备注

本修复不修改 kernel 计算、tiling key 或 AddRmsNormQuant V1/V2 产品代码。950 V1 非一维 scale 从“日志报错但放行”改为拒绝,是明确的接口约束收紧;不将原生 GEIR 的标量支持与公开 ACLNN 的一维 scale 约束混为一谈。测试资产不放入产品 PR 的 ST 目录。

关联 PR:https://gitcode.com/cann/ops-nn/pull/10865

likedislike
Rraoliang_sac成员
25 天前 添加了label:bug-report
yuning_chenyuning_chen成员
25 天前 将 raoliang_sac 设为负责人
CANN-robotCANN-robot成员
25 天前 关闭了 issue
Rraoliang_sac成员
25 天前 关联了pull request:docs(norm): 将 RmsNormQuant 产品差异说明移出返回码表
CANN-robotCANN-robot成员
25 天前 添加了label:resolved