已合并
[inductor]layernorm fix welford_reduce issue #45429
[inductor]layernorm fix welford_reduce issue #45429
已合并
rain-666创建于 11 天前
rain-666
rain-666成员
11 天前

本 PR 修复了 torch_npu Inductor 后端中 LayerNorm 使用 welford_reduce 时(尤其是 Ascend 950 上)SIMD 归约代码生成错误的问题。核心改动位于 torch_npu/_inductor/codegen/triton.py:新增 Welford 累加器(_acc_sum/_acc_sum_sq/_acc_count)的 tl.zeros 初始化逻辑,并按"向量化外层轴"与"标量外层轴"区分生成归约循环,避免多行数据在各自 tile 内相互累加;同时将持久化归约判定扩展为支持 A5 上归约长度 ≤ 8192 的 welford_reduce。此外新增默认关闭的 enable_layernorm_v4 开关(环境变量 TORCHINDUCTOR_ENABLE_LAYERNORM_V4),在 W=512 的大行 LayerNorm 场景回退到融合的 CANN 内核,并补充了对应的代码生成测试用例。

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 rain-666 的贡献)
rain-666rain-666成员
11 天前 创建了 pull request,commit d8337465
atomgit-bot
atomgit-bot
11 天前 评论:

变更摘要

本 PR 修复了 torch_npu Inductor 后端中 LayerNorm 使用 welford_reduce 时(尤其是 Ascend 950 上)SIMD 归约代码生成错误的问题。核心改动位于 torch_npu/_inductor/codegen/triton.py:新增 Welford 累加器(_acc_sum/_acc_sum_sq/_acc_count)的 tl.zeros 初始化逻辑,并按"向量化外层轴"与"标量外层轴"区分生成归约循环,避免多行数据在各自 tile 内相互累加;同时将持久化归约判定扩展为支持 A5 上归约长度 ≤ 8192 的 welford_reduce。此外新增默认关闭的 enable_layernorm_v4 开关(环境变量 TORCHINDUCTOR_ENABLE_LAYERNORM_V4),在 W=512 的大行 LayerNorm 场景回退到融合的 CANN 内核,并补充了对应的代码生成测试用例。

主要改动

  • Welford 累加器初始化与循环代码生成修复(triton.py: 新增 _is_scalar_welford_outer_axis() 判断和 initialize_welford_accumulators() 辅助函数,在向量化 tile 进入后初始化 Welford 状态;外层归约循环从统一的 for loop_r in range(...) 改写为按 _offset/BLOCK/BLOCK_SUB 步进的 for <name> in range(...)for <name>_loop_offset in range(...),防止各行数据相互累加。
  • 新增 vectorized_welford_rank() 与动态 rank 维度生成: 新增方法计算加入向量化外层轴后的 DSL rank,get_axis_direction()reduction_resize() 及累加器 shape(welford_acc_type/welford_acc_shape)均基于该 rank 生成 [block_sub, 1, ...] 形式的广播维度。
  • 持久化归约判定扩展(triton.py: 在 npu_config.is_ascend950 且启用 enable_welford、归约类型为 welford_reduce 且归约长度静态 ≤ 8192 时直接启用持久化归约;同时将 find_reduction_node() 改为通过 getattr(self, "node_schedule", self.features.node_schedule) 取值,兼容基类构造函数中 node_schedule 尚未赋值的情况。
  • 新增 enable_layernorm_v4 配置与 W=512 回退(config.pylowering.py: 新增默认关闭的开关 enable_layernorm_v4;在 lowering.py 中通过 should_use_layer_norm_v4() 判断(A5、启用 Welford 与开关、FP16/BF16、normalized_shape == (512,) 且行数可静态证明 ≥ 512)时,回退到融合的 native_layer_norm CANN 内核,避免 Welford 降级拆分为 SIMD 归约与 SIMT 后处理。
  • 新增测试用例(test/_inductor/test_var_mean.py: 新增 test_welford_simd_codegen_above_persistent_threshold,在 Ascend 950 上验证 (200, 5036) LayerNorm 编译产物包含 npu_kernel_type': 'simd'vectorized_welford_axis,且不再生成 for loop_r 循环。
likedislike
不准确?
atomgit-bot
atomgit-bot
11 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
ascend-robotascend-robot成员
11 天前 添加了label:ascend-cla/yes
ascend-robotascend-robot成员
11 天前 添加了label:needs-issue
ascend-robot
ascend-robot成员
11 天前 评论:

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.


PR Approval Progress

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

Module Approval Details

module lgtm status approve status
test crazyDannyBoy, TonyYA, weizhan4 (3/2) crazyDannyBoy (1/1)
torch_npu/_inductor weizhan4, crazyDannyBoy, TonyYA (3/2) weizhan4, crazyDannyBoy (2/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
ascend-robot
ascend-robot成员
11 天前 评论:

当前仓库存在以下 保护分支

Protected Branch Version Release
master
v2.9.0
v2.12.0
v2.11.0
v2.10.0-26.1.0
v2.12.0-26.1.0
v2.10.0
v2.7.1-26.1.0
v2.11.0-26.1.0
v2.9.0-26.1.0
v2.7.1
ci-test

评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作

注意:

  1. /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
  2. 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭
likedislike
ascend-robot
ascend-robot成员
11 天前 评论:

Linking Issue Notice

@rain-666 , the pull request must be linked to at least one issue.
If an issue has already been linked, but the needs-issue label remains, you can remove the label by commenting /check-issue .

likedislike
AtlasAccountAtlasAccount成员
11 天前 添加了label:ci-pipeline-running
rain-666
rain-666成员
11 天前 评论:

compile

likedislike
AtlasAccountAtlasAccount成员
11 天前 删除了label:ci-pipeline-running
AtlasAccount
AtlasAccount成员
11 天前 评论:
流水线 PR-pipeline_pytorch#64379 [ commitID:763e7202 ] 已终止运行
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_X86 🕚 >>>
Build_ARM 🕚 >>>
Build_X86_torchair 🕚 >>>
Build_ARM_torchair 🕚 >>>
patch_test 🕚 >>>
Build_X86_213 🕚 >>>
Build_ARM_213 🕚 >>>
恶意代码检查 Antipoison 🟨 >>>
编码安全与规范检查 codecheck_pre-commit 🟨 >>>
check_error 🟨 >>>
lintrunner 🟨 >>>
开源片段检查 SCA 🟨 >>>
开发者测试 UT_ARM_A3_Part_01 🕚 >>>
UT_ARM_A3_Part_02 🕚 >>>
UT_ARM_A2_Part_01 🕚 >>>
UT_ARM_A2_Part_02 🕚 >>>
UT_ARM_A2_Part_03 🕚 >>>
UT_inductor_Part_01 🕚 >>>
UT_inductor_Part_02 🕚 >>>
UT_inductor_Part_03 🕚 >>>
UT_inductor_Part_04 🕚 >>>
UT_DIST_ARM_Part_01 🕚 >>>
UT_DIST_ARM_Part_02 🕚 >>>
UT_DIST_ARM_Part_03 🕚 >>>
UT_DIST_ARM_Part_04 🕚 >>>
UT_ARM_A2_Select_Part_01 🕚 >>>
UT_ARM_A2_Select_Part_02 🕚 >>>
UT_ARM_A2_Part_213 🕚 >>>
UT_inductor_Part_213 🕚 >>>
UT_DIST_ARM_Part_213 🕚 >>>
UT_ARM_A2_Select_Part_213 🕚 >>>
流水线 PR-pipeline_pytorch 🟨 >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员[wujinyuan1, huangjingwei, liangsongwei, yashi999, culechan, Dring, wuyouqi1, L1919_snow, qq_52711437, WhiteNight12, nomiz, xiu_21, ffmh, wanglijun55, hss-shuai, husichao, smallsilly, lanshaozuishuai, jimmyisme1, lzy0920232, alpha-junh, Sunshine_Youngster, wei_zhuoyi, zhangyihuiben, zyw-hw, zzzkeke, rmch, yangch0324, LucciC, AACAES, renyujin, wjlflyer, senzhen-town, pengjingyou, qsc97, limuan, yule100, xiaoqi-zhou, kuhn7, chenxingying, hanye02, zichun_ye, anyrenwei, kkjocker, wangzili121, Lu_G, yvjc, puddingfjz, HandsoemLemon, bigprestigee1, huawuyi, zhenyu10, dairenjie, du-jin-hang, zou-jieyu, adelaideliu, TrHan, wanlinan, Windwindzzz, pengqihw, kisnwang, yuheng_wang, honghao_wang, jizewei, zhangguoguang, sunyu-xuan, chenrayray, hbhu_bin, liujunzhu, c_34, LiNuoh, maoyuanpeng1, zzhongmin, zhaoyu65, bellatan, jiabaolin, zhuofanshen, wencaiwen, lu_zhuge, caoshuyang, molly12, lyx324521, LQ1206, gitcode-chenjiao, cai-weiwei1989, CHDong, ogqin, yuanlipingGit, xuqinglin1, lqz2, zouwei1, chaoluoa, paradox325, jackzhang1116, yaoyao, akh, yujiacheng, dengjie0116, Hubert11111, Shine_Ws, wslhj555, longqiand, OYtao666, JiaqingQiang, luyyyy, Kingbelial, zhanghaiyu0101, wenxp1018, yanliu-luoluo, ksun_sekiro, liyong328, wgzheng, tangky, vivi_is_coding, aoiaoisola, weixin_44494597, wangmengmengwang65667, hid57809721, qq_35468730, comeonup, C547032, gcw_m5OQChA4, yao_yao_ling_xian, cnnbwcy, szqfes_12, cora_19, cann_lilin, can, shawnylee233, fanglanyue0916, hhz0, LiNuohang, taohuoquan, Jesse, WSs_321]评论有效
  • compile、compile_inductor、compile_torchair : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
ascend-robot
ascend-robot成员
11 天前 评论:

ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
11 天前 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
11 天前 评论:

✅ 跳过 docs ci 检查,没有需要检查的文档文件

likedislike
ascend-robotascend-robot成员
11 天前 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
11 天前 添加了label:docs-ci-pipeline-success
ascend-robot
ascend-robot成员
11 天前 评论:

ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
11 天前 删除了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
11 天前 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
11 天前 评论:

✅ 跳过 docs ci 检查,没有需要检查的文档文件

likedislike
ascend-robotascend-robot成员
11 天前 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
11 天前 添加了label:docs-ci-pipeline-success
AtlasAccountAtlasAccount成员
11 天前 添加了label:ci-pipeline-passed
AtlasAccount
AtlasAccount成员
11 天前 评论:
流水线 PR-pipeline_pytorch#64380 [ commitID:763e7202 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_X86 >>>
Build_ARM >>>
Build_X86_torchair 🛑 >>>
Build_ARM_torchair 🛑 >>>
patch_test 🛑 >>>
Build_X86_213 >>>
Build_ARM_213 >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 codecheck_pre-commit >>>
check_error >>>
lintrunner >>>
开源片段检查 SCA >>>
开发者测试 UT_ARM_A3_Part_01 🛑 >>>
UT_ARM_A3_Part_02 🛑 >>>
UT_ARM_A2_Part_01 >>>
UT_ARM_A2_Part_02 >>>
UT_ARM_A2_Part_03 >>>
UT_inductor_Part_01 🛑 >>>
UT_inductor_Part_02 🛑 >>>
UT_inductor_Part_03 🛑 >>>
UT_inductor_Part_04 🛑 >>>
UT_DIST_ARM_Part_01 🛑 >>>
UT_DIST_ARM_Part_02 🛑 >>>
UT_DIST_ARM_Part_03 🛑 >>>
UT_DIST_ARM_Part_04 🛑 >>>
UT_ARM_A2_Select_Part_01 >>>
UT_ARM_A2_Select_Part_02 >>>
UT_ARM_A2_Part_213 >>>
UT_inductor_Part_213 🛑 >>>
UT_DIST_ARM_Part_213 🛑 >>>
UT_ARM_A2_Select_Part_213 >>>
流水线 PR-pipeline_pytorch >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员[wujinyuan1, huangjingwei, liangsongwei, yashi999, culechan, Dring, wuyouqi1, L1919_snow, qq_52711437, WhiteNight12, nomiz, xiu_21, ffmh, wanglijun55, hss-shuai, husichao, smallsilly, lanshaozuishuai, jimmyisme1, lzy0920232, alpha-junh, Sunshine_Youngster, wei_zhuoyi, zhangyihuiben, zyw-hw, zzzkeke, rmch, yangch0324, LucciC, AACAES, renyujin, wjlflyer, senzhen-town, pengjingyou, qsc97, limuan, yule100, xiaoqi-zhou, kuhn7, chenxingying, hanye02, zichun_ye, anyrenwei, kkjocker, wangzili121, Lu_G, yvjc, puddingfjz, HandsoemLemon, bigprestigee1, huawuyi, zhenyu10, dairenjie, du-jin-hang, zou-jieyu, adelaideliu, TrHan, wanlinan, Windwindzzz, pengqihw, kisnwang, yuheng_wang, honghao_wang, jizewei, zhangguoguang, sunyu-xuan, chenrayray, hbhu_bin, liujunzhu, c_34, LiNuoh, maoyuanpeng1, zzhongmin, zhaoyu65, bellatan, jiabaolin, zhuofanshen, wencaiwen, lu_zhuge, caoshuyang, molly12, lyx324521, LQ1206, gitcode-chenjiao, cai-weiwei1989, CHDong, ogqin, yuanlipingGit, xuqinglin1, lqz2, zouwei1, chaoluoa, paradox325, jackzhang1116, yaoyao, akh, yujiacheng, dengjie0116, Hubert11111, Shine_Ws, wslhj555, longqiand, OYtao666, JiaqingQiang, luyyyy, Kingbelial, zhanghaiyu0101, wenxp1018, yanliu-luoluo, ksun_sekiro, liyong328, wgzheng, tangky, vivi_is_coding, aoiaoisola, weixin_44494597, wangmengmengwang65667, hid57809721, qq_35468730, comeonup, C547032, gcw_m5OQChA4, yao_yao_ling_xian, cnnbwcy, szqfes_12, cora_19, cann_lilin, can, shawnylee233, fanglanyue0916, hhz0, LiNuohang, taohuoquan, Jesse, WSs_321]评论有效
  • compile、compile_inductor、compile_torchair : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
rain-666rain-666成员
10 天前 修改了pull request 的描述
rain-666rain-666成员
10 天前 关联了issue:[Feature]: 修复layernorm的codegen问题以及在部分场景使用aten.layernormv4
rain-666rain-666成员
10 天前 关联了issue:修复了 torch_npu Inductor 后端中 LayerNorm 使用 welford_reduce 时(尤其是 Ascend 950 上)SIMD 归约代码生成错误的问题
pangjiayi
pangjiayi
10 天前 评论:

/lgtm

likedislike
weizhan4成员
10 天前 评论:

/lgtm
/approve

likedislike
ascend-robotascend-robot成员
10 天前 添加了label:lgtm
dezheng889成员
10 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
10 天前 添加了label:approved
rain-666rain-666成员
10 天前 删除了关联的issue:修复了 torch_npu Inductor 后端中 LayerNorm 使用 welford_reduce 时(尤其是 Ascend 950 上)SIMD 归约代码生成错误的问题
ascend-robotascend-robot成员
10 天前 删除了label:needs-issue
ascend-robotascend-robot成员
10 天前 合入了pull request
AtlasAccount
AtlasAccount成员
10 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14653 [ commitID:763e7202 ] 已完成
likedislike