已合并
fix(triton_experimental): propagate NaN in min/max reductions #44773
fix(triton_experimental): propagate NaN in min/max reductions #44773
已合并
创建于 17 天前
伦
成员
17 天前

【合入来源】

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

【修改方案】

修复 triton_experimental 后端 min/max 归约的 NaN 传播语义错误。

  1. codegen/triton.py:元素级 minimum/maximum 从裸 tl.minimum(a, b) 改为 tl.minimum(a, b, tl.PropagateNan.ALL)(maximum 同理)。
  2. npu_triton_helpers.pymin2/max2 归约从 tl.min 改为 tl.reduce(a, dim, _min_prop_nan)(NaN 传播合体形式,对齐 cuda 后端)。

根因:裸 tl.minimum/maximumarith.minnumf/maxnumf(NaN-dropping),NaN 会被丢弃;PropagateNan.ALLarith.minimumf/maximumf(NaN-propagating)。后者既保证 NaN语义正确,又避开 minnumf 在向量管道约 5× 的指令开销,实测 1.6–2.8× 加速。

【资料变更】

不涉及

【接口变更】

不涉及

【功能验证】

image.png
image.png

【CheckList】

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

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

变更摘要

该 PR 旨在修复 Triton 实验性代码生成(triton_experimental)中 min/max 归约操作对 NaN 的传播问题,确保归约结果在输入含 NaN 时能正确返回 NaN。核心改动包括:在 NPUTritonKernelOverrides.minimum/maximum 生成的 tl.minimum/tl.maximum 指令中显式传入 tl.PropagateNan.ALL;同时在 npu_triton_helpers.py 中新增带 propagate_nan 语义的归约辅助函数,并调整 min2 的实现方式。

主要改动

  • triton.pyminimum/maximum 的 NaN 传播: NPUTritonKernelOverrides.minimummaximum 生成的代码由 tl.minimum({a}, {b})/tl.maximum({a}, {b}) 改为追加 tl.PropagateNan.ALL 参数,使元素级 min/max 运算在任一输入为 NaN 时返回 NaN。
  • 新增 _min_prop_nan 归约内核: 在 npu_triton_helpers.py 中新增 @triton.jit 函数 _min_prop_nan,内部通过 core.minimum(a, b, propagate_nan=core.PropagateNan.ALL) 实现 NaN 传播的最小值比较。
  • min2 改用 tl.reduce 并引入 core 模块: min2 由原来的 tl.min(a, dim, propagate_nan=True) 改为 tl.reduce(a, dim, _min_prop_nan),并新增 from triton.language import core 导入以支撑新实现。
likedislike
atomgit-bot
atomgit-bot
17 天前 评论:

代码审查

✅ 未发现问题

likedislike
ascend-robotascend-robot成员
17 天前 添加了label:ascend-cla/yes
此处折叠了183条消息 查看更多
ascend-robotascend-robot成员
3 天前 添加了label:lgtm
ascend-robotascend-robot成员
3 天前 关闭了关联的issue
ascend-robotascend-robot成员
3 天前 合入了pull request
ascend-robot
ascend-robot成员
3 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
AtlasAccount
AtlasAccount成员
3 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14800 [ commitID:dadfddd7 ] 运行失败
likedislike