已合并
[inductor]constrain the usage scenarios of welford #43722
[inductor]constrain the usage scenarios of welford #43722
已合并
rain-666创建于 8月4日
rain-666
rain-666成员
8月4日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

【功能验证】

说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

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

变更摘要

该 PR 约束了 Welford 归约在 NPU Inductor 中的使用场景,核心思路是在 var_mean_helper_ 中新增 allow_welford 参数,由各调用方根据语义自行决定是否允许走 Welford 路径。具体而言:独立的 aten.var/prims.var 降级时禁止 Welford(allow_welford=False),以避免 Welford 产生的双归约内核导致从 NPU 线性路径回退;aten.var_mean 和 native_layer_norm 则允许 Welford(allow_welford=True)。同时放宽了 Ascend 950 上 native_layer_norm 对 float16/bfloat16 的回退条件:仅当 enable_welford 为 False 时才回退,否则信任 Welford 路径。

主要改动

  • var_mean_helper_ 新增 allow_welford 参数:在 torch_npu/_inductor/lowering.py 中为 var_mean_helper_ 增加 allow_welford 形参,内部判断逻辑由单一的 not npu_config.enable_welford 扩展为 not allow_welford or not npu_config.enable_welford,使得调用方可以显式禁止 Welford。

  • aten.var/prims.var 降级禁止 Welford:var_ 函数调用 var_mean_helper_ 时传入 allow_welford=False,防止独立的方差计算被错误转为 Welford 双归约内核,避免从 NPU 线性路径回退。

  • native_layer_norm 低精度回退条件收紧:在 Ascend 950 上对 float16/bfloat16 的强制回退逻辑中新增 and not npu_config.enable_welford 条件,当用户显式启用 Welford 时不再回退,同时调用 var_mean_helper_ 显式传入 allow_welford=True。

  • 新增单测 test_welford_does_not_change_standalone_var_codegen:验证 enable_welford=True 时,独立的 torch.var + torch.mean 组合不会生成 triton_helpers.welford_reduce / triton_helpers.welford( 代码。

  • 新增单测 test_welford_simd_low_precision_codegen:验证在 float16/bfloat16 低精度且 enable_welford=True 时,layer_norm 可正确生成 SIMD 风格的 Welford 代码(包含 vectorized_welford_axis 和 npu_kernel_type: simd)。

likedislike
不准确?
rain-666rain-666成员
8月4日 关联了看板:FrameworkPTAdapter 版本issue看板
atomgit-bot
atomgit-bot
8月4日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
此处折叠了46条消息 查看更多
weizhan4成员
8月4日 评论:

/lgtm
/approve

likedislike
ascend-robotascend-robot成员
8月4日 添加了label:lgtm
ascend-robotascend-robot成员
8月4日 关闭了关联的issue
ascend-robotascend-robot成员
8月4日 合入了pull request
ascend-robot
ascend-robot成员
8月4日 评论:
流水线 pytorch_gitcode_PR_multiVersion#13614 [ commitID:ded7c067 ] 已完成
likedislike