已合并
fix(inductor): support Flex Attention mask_out cppwrapper #45507
fix(inductor): support Flex Attention mask_out cppwrapper #45507
已合并
Xuan Peng创建于 18 天前
Xuan Peng
18 天前

【合入来源】

Fixes https://gitcode.com/Ascend/pytorch/issues/4431

【修改方案】

  1. 将 Triton kernel metadata 中的 workspace_sizelock_numlock_init_valNPUCachingAutotuner 传递到 NPU C++ wrapper。
  2. C++ launcher 根据 metadata 分配 runtime workspace 和同步锁,初始化锁内存,并检查 aclrtMemcpy 返回值。
  3. 为 PyTorch 2.7.1 的 Flex Attention backward template 补充 SymbolicGridFn,使动态 call size 在 cpp_wrapper 下能够生成符号化 grid 表达式。

【资料变更】

不涉及。

【接口变更】

不涉及跨仓或客户可见接口变更;仅调整 Inductor NPU 内部 kernel metadata 传递和 C++ wrapper 代码生成。

【功能验证】

  • python3 -m py_compile torch_npu/_inductor/codegen/cpp_wrapper_npu.py torch_npu/_inductor/runtime/triton_heuristics.py torch_npu/_inductor/kernel/flex_attention.py:通过。
  • git diff upstream/v2.7.1..HEAD --check:通过。
  • 使用现有 Flex Attention mask_out 动态 backward + cpp_wrapper 复现路径验证,原始 cpp_wrapper requires SymbolicGridFn 断言不再出现。
  • 未新增或修改测试代码;PR CI 待创建后执行。

【CheckList】

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Xuan Peng 的贡献)
XXuan Peng
18 天前 创建了 pull request,commit cd846386
XXuan Peng
18 天前 关联了issue:[Bug]: Flex Attention cppwrapper fails in mask_out backward on v2.7.1
atomgit-bot
atomgit-bot
18 天前 评论:

变更摘要

本 PR 修复 PyTorch 2.7.1 下 Inductor NPU cpp_wrapper 不支持 Flex Attention mask_out 动态 backward 的问题。核心改动是将 Triton kernel metadata 中的 workspace_sizelock_numlock_init_val 通过 NPUCachingAutotuner 传递到 NPU C++ wrapper,由 C++ launcher 按 metadata 在运行时分配 workspace 与同步锁内存并初始化锁,同时为 PyTorch 2.7.1 的 Flex Attention backward template 补充 SymbolicGridFn,使动态 call size 在 cpp_wrapper 下能生成符号化 grid 表达式。

主要改动

  • kernel metadata 传递torch_npu/_inductor/runtime/triton_heuristics.py):NPUCachingAutotuner 在构造 params 时新增从 input_launcher.bin.metadata 读取 lock_numlock_init_valworkspace_size 三个字段(缺省为 0),供后续 C++ wrapper 使用。
  • C++ wrapper 生成 workspace 与同步锁torch_npu/_inductor/codegen/cpp_wrapper_npu.py):generate_args_decl 新增 kernel_params 参数,在非 force_simt_only 且相应 metadata 大于 0 时,通过 allocate_workspaceworkspace_size * grid_0 * grid_1 * grid_2 分配 workspace,并按 lock_num * sizeof(int64_t) 分配同步锁内存、以 lock_init_val 初始化后调用 aclrtMemcpyACL_MEMCPY_HOST_TO_DEVICE)写入设备,且校验其返回值是否为 ACL_SUCCESS;同时 generate_args_decl 的调用处传入 kernel_params,并新增包含 NPUWorkspaceAllocator.h 的头文件引入。
  • Flex Attention backward 符号化 gridtorch_npu/_inductor/kernel/flex_attention.py):新增以 SymbolicGridFn 装饰的 _symbolic_flex_attention_backward_grid,依据 BLOCK_M2BLOCK_N1 等 meta 参数计算三维 grid,并将其赋给 upstream_flex_attention_backward_template.grid,替代 PyTorch 2.7.1 中无法对符号化 call size 生成 C++ 表达式的普通 grid 函数。
likedislike
不准确?
atomgit-bot
atomgit-bot
18 天前 评论:

代码审查

✅ 未发现问题

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

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

Protected Branch Version Release
master
v2.9.0
v2.10.0
v2.11.0
v2.12.0
v2.7.1
v2.7.1-26.1.0
v2.9.0-26.1.0
v2.12.0-26.1.0
v2.11.0-26.1.0
v2.10.0-26.1.0
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成员
18 天前 评论:

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
torch_npu/_inductor TonyYA, crazyDannyBoy (2/2) crazyDannyBoy (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
AtlasAccountAtlasAccount成员
18 天前 添加了label:ci-pipeline-running
ascend-robot
ascend-robot成员
18 天前 评论:

ascend docs pipeline is running...

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

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

likedislike
ascend-robotascend-robot成员
18 天前 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
18 天前 添加了label:docs-ci-pipeline-success
AtlasAccountAtlasAccount成员
18 天前 删除了label:ci-pipeline-running
AtlasAccountAtlasAccount成员
18 天前 添加了label:ci-pipeline-passed
AtlasAccount
AtlasAccount成员
18 天前 评论:
流水线 PR-pipeline_pytorch#64678 [ commitID:4962d2d7 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 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
zhucehw成员
18 天前 评论:

/lgtm

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

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
zhucehw

likedislike
pangjiayi
pangjiayi
16 天前 评论:

/lgtm

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

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
zhucehw

likedislike
dezheng889成员
16 天前 评论:

/approve

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

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
zhucehw

likedislike
ascend-robotascend-robot成员
16 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
16 天前 合入了pull request
AtlasAccount
AtlasAccount成员
16 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14734 [ commitID:4962d2d7 ] 已完成
likedislike