已合并
fix(add_layer_norm): 修复InferShape未将norm多尾轴置1的bug #8804
fix(add_layer_norm): 修复InferShape未将norm多尾轴置1的bug #8804
已合并
rk创建于 8月17日
rk成员
8月17日

描述

AddLayerNorm 算子的 InferShape4AddLayerNorm 在推导 mean/rstd 形状时,仅对 x1 尾部第 1 根 norm 轴调用 SetDim(..., 1),漏置其余 norm 轴。当 gamma 为多根尾轴(例如 x1=[A,B,C,D]gamma=[C,D])时,mean/rstd 被错误推导为 [A,B,1,D],正确应为 [A,B,1,1],进而触发 tiling 侧 CheckX1GammaMean 校验失败(要求尾部 gammaDimNum 维全为 1)。

修复:将单次 SetDim 改为循环,把 x1 尾部 gammaDimNum 维全部置 1。gamma 为 1 维时循环只执行 1 次,行为与原实现完全一致,零回归。InplaceAddLayerNorm 复用同一 InferShape 函数,一并修复。

改动原因

  • InferShape 漏写循环,导致多维 gamma 场景下 mean/rstd 形状错误。
  • tiling 合轴、aveFactor、bias 分类、kernel 2D 扁平寻址均已正确支持多尾轴,仅 InferShape 是瓶颈。

改动方法

norm/add_layer_norm/op_host/add_layer_norm_infershape.cpp

auto shape(*x1_shape);
for (size_t i = shape.GetDimNum() - gamma_shape->GetDimNum(); i < shape.GetDimNum(); i++) {
    shape.SetDim(i, 1);
}
*mean_shape = shape;
*rstd_shape = shape;

关联的Issue

#https://gitcode.com/cann/ops-nn/issues/4856

测试

  • 补充 UT AddLayerNorm_infershape_multi_dim_gammax1=[4,1,8,16]gamma=[8,16],校验 mean/rstd=[4,1,1,1]

文档更新

无。

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 rk 的贡献)
Rrk成员
8月17日 创建了 pull request,commit 5508af16
atomgit-bot
atomgit-bot
8月17日 评论:

变更摘要

本 PR 主要修复 AddLayerNorm 算子在 InferShape4AddLayerNorm 中推断 meanrstd 输出形状时的 bug:当 gamma 为多尾轴(多维度)时,原实现仅将最后一个归一化维置为 1,导致输出形状错误。修复后改为循环遍历所有被归一化的尾部维度并将其逐一置为 1,同时新增了对应的单元测试用例。

主要改动

  • 修复多尾轴形状推断逻辑: 在 norm/add_layer_norm/op_host/add_layer_norm_infershape.cppInferShape4AddLayerNorm 中,将原先仅执行一次 shape.SetDim(shape.GetDimNum() - gamma_shape->GetDimNum(), 1) 的写法改为循环遍历从 shape.GetDimNum() - gamma_shape->GetDimNum() 到末尾的所有维度并分别 SetDim(i, 1),确保 mean_shaperstd_shape 的归一化尾部维度全部置为 1
  • 新增多维度 gamma 单元测试: 在 norm/add_layer_norm/tests/ut/op_host/test_AddLayerNorm_infershape.cpp 中新增 AddLayerNorm_infershape_multi_dim_gamma 测试,构造 x1/x2 形状为 {4, 1, 8, 16}gamma/beta 形状为 {8, 16} 的输入,验证 meanrstd 输出形状为 {4, 1, 1, 1}yx 输出形状保持 {4, 1, 8, 16}
likedislike
不准确?
atomgit-bot
atomgit-bot
8月17日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
8月17日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
8月17日 评论:

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.
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
norm 唐玮玮, 钱泽洪 (2/2) 钱泽洪 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)
likedislike
CANN-robot
CANN-robot成员
8月17日 评论:

CLA Signature Pass

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

likedislike
CANN-robotCANN-robot成员
8月17日 将zengjuan,chaotang233,kevin_huang1234,crystalhu,yangyang016,fanqirui,wangrui_,renruhai,su-yueming,zhajianqing123,chenqi317,wang-xing001,liubo75,tangweiwei2,liujie12345678,pingchuantang,Chen_HaoWen,qianzehong设为评审人
CANN-robotCANN-robot成员
8月17日 将kevin_huang1234,wangrui_,renruhai,su-yueming,zhajianqing123,wang-xing001,liujie12345678,pingchuantang,Chen_HaoWen,qianzehong设为审查人
rk成员
8月17日 评论:

compile

likedislike
Rrk成员
8月17日 预合并成功(commit_id: 06e930e7c41d484bcdbff5a02305d4a62d39a4e2)
CANN-robotCANN-robot成员
8月17日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
8月17日 评论:

流水线任务触发成功
任务链接 [be7e771a20274c6c9b03cd8fb78f619e][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_mobile_station ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_experimental ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_950 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_950 ✅ SUCCESS >>>>> >>>>>
Compile_Pre ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_mobile_station_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_950_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_experimental_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_950_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_classify ✅ SUCCESS >>>>>
Compile_Ascend_X86_mobile_station_9030_ubuntu24 ✅ SUCCESS >>>>> >>>>>
UT_Test_ophost ✅ SUCCESS
UT_Test_opapi ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
UT_Test_opgraph ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
API_Check ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>
UT_Test_report_lcov ✅ SUCCESS >>>>>

[2026-08-17 19:22:19]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
8月17日 评论:

流水线任务触发成功
任务链接 [d9ee68e6c8b449a180a4d9556f7ffb4b][流水线指导]

任务名称状态日志下载链接
antipoison ✅ SUCCESS >>>>>
codecheck_checkpr ✅ SUCCESS
StaticCheck_codespell ✅ SUCCESS
StaticCheck_link_validity ✅ SUCCESS
StaticCheck_resource_existence ✅ SUCCESS
StaticCheck_tag_closed ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_precommit ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>

[2026-08-17 19:13:53]    CI执行结束

likedislike
CANN-robotCANN-robot成员
8月17日 添加了label:api-check-pass
CANN-robotCANN-robot成员
8月17日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
8月17日 添加了label:ci-pipeline-passed
Rrk成员
8月17日 修改了pull request 的描述
Rrk成员
8月18日 修改了pull request 的描述
tangweiwei2成员
8月18日 评论:

/lgtm

likedislike
qianzehong成员
8月20日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
8月20日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
8月20日 关闭了关联的issue
CANN-robotCANN-robot成员
8月20日 合入了pull request