已关闭
[AddRmsNormQuant] Host与Kernel层y2输出判断逻辑不一致 #2668
liangyuhua创建于  5月13日关闭于  5月14日
liangyuhua
liangyuhua成员
5月13日 创建

问题描述

AddRmsNormQuant算子在regbase(950)版本中,Host层和Kernel层对于y2输出的判断逻辑不一致,导致潜在的功能异常。

问题详情

Kernel层实现

  • 位置:norm/add_rms_norm_quant/op_kernel/arch35/add_rms_norm_quant_regbase_perf.h:31
  • 逻辑:#define HAS_Y2 (HAS_SCALE2 || HAS_ZEROPOINTS2)
  • 判断条件:只要存在scales2或zeroPoints2,就会有y2输出

Host层原有实现

  • 位置:norm/add_rms_norm_quant/op_host/op_api/add_rms_norm_quant.cpp:31,87
  • 逻辑:bool isDual = (nullptr != scales2Optional);
  • 判断条件:仅判断scales2,忽略了zeroPoints2

影响场景

当用户传入zeroPoints2参数但不传入scales2参数时:

  • Kernel层认为有y2输出(因为zeroPoints2存在)
  • Host层分配dummy shape给y2Out(因为scales2不存在)
  • 导致Host和Kernel行为不一致

修复方案

引入芯片版本判断,使regbase版本的Host层逻辑与Kernel层保持一致:

  • regbase版本:isDual = (scales2 || zeroPoints2)
  • 其他版本:保持原逻辑 isDual = (scales2)

关联PR

修复已提交至PR #4788:https://gitcode.com/cann/ops-nn/merge_requests/4788

likedislike
oscillatedoscillated成员
5月13日 将 liangyuhua 设为负责人
liangyuhua
liangyuhua成员
5月13日 评论:

验证更新

修复已完成并通过UT测试验证:

修改内容

  • 修改文件:norm/add_rms_norm_quant/op_host/op_api/add_rms_norm_quant.cpp
  • 新增测试:test_aclnn_add_rms_norm_quant.cpp 新增测试case

验证结果

✅ 编译成功,无错误无警告
✅ UT测试全部通过(9个测试case)
✅ Host层与Kernel层逻辑一致
✅ 不影响其他芯片版本

UT测试详情

[==========] Running 9 tests from 1 test suite.
[  PASSED  ] 9 tests.

新增测试case:
ascend950PR_zeroPoints2_only_no_scales2 - PASS

代码检查

  • ✅ 无重复代码
  • ✅ 无超大函数
  • ✅ 测试case简洁(约23行)
  • ✅ 符合codecheck规范

修复已提交至PR #4788,待审核合并。

likedislike
CANN-robotCANN-robot成员
5月14日 关闭了 issue
CANN-robotCANN-robot成员
5月14日 添加了label:resolved