已合并
feat(inductor): partition FA v3 TND+dropout via inductor pattern matcher #35040
luochao60创建于 5月8日
feat(inductor): partition FA v3 TND+dropout via inductor pattern matcher #35040
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 luochao60 的贡献)ascend-robot
5月8日 评论:
5月8日 评论:
Ascend docs pipeline is running...


5月8日 添加了label:docs-ci-pipeline-running
此处折叠了203条消息 查看更多
ascend-robot
16 天前 评论:
16 天前 评论:
The MR can not be merged, because of CodeReview discussion not resolved
If you want to solve this problem, you can click here to do it in the FAQs.


16 天前 合入了pull request
ascend-robot
16 天前 评论:
16 天前 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


AtlasAccount
16 天前 评论:
16 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14738 [ commitID:f55781f1 ] 已完成


【合入来源】
【修改方案】
将 FA v3(
npu_fusion_attention_v3/npu_fusion_attention_grad_v3)在 TND 布局 + dropout (keep_prob < 1) 场景下"不可被 ACLgraph 捕获"的处理路径,由 monkey-patch inductor 内部_fx_node_is_input_dependent_cudagraph_unsafe的方案,重构为基于 inductorPatternMatcherPass+POST_GRAD_PATTERNS的合入方式。新增
torch_npu/_inductor/fx_passes/_proxy_ops.py:torch.library.Library("npu", "FRAGMENT")克隆原算子 schema,注册npu_fusion_attention_v3_unsafe/npu_fusion_attention_grad_v3_unsafe两个代理算子,并在 schema 上挂torch._C.Tag.cudagraph_unsafe。CompositeExplicitAutograd实现与register_fake实现都直接转发到原算子(FA v3 的输入混合 NPU q/k/v 与 CPUactual_seq_qlen/kvlen,复用原算子的 device-propagation 规则)。PROXY_TARGETS: dict[OpOverload, OpOverload]供 pass 使用。新增
torch_npu/_inductor/fx_passes/fav3_partition_pass.py:PatternMatcherPass(pass_name="fav3_partition")注册 forward / backward 两条CallFunctionVarArgs(target)规则。extra_check中通过torch.fx.operator_schemas.normalize_function拿到归一化 kwargs,仅在input_layout == "TND"且keep_prob < 1时命中;同时在inductor_config.triton.cudagraphs关闭时直接 short-circuit,避免无意义的 dispatcher 跳转。node.target = proxy,不引入新的 fx 节点;scheduler 之后会按cudagraph_unsafetag 把这些节点切出 captured graph 走 eager。register_fav3_partition_pass()在__init__.py中调用一次:将 PMP 挂到POST_GRAD_PATTERNS["fav3_partition"],并setdefault写入post_grad_fusion_options。调整
torch_npu/_inductor/__init__.py:patch_fx_node_is_input_dependent_cudagraph_unsafe的导入与调用。register_fav3_partition_pass()调用,与register_fa_pass()等其他 inductor 扩展挂载点放在一起。清理
torch_npu/_inductor/utils.py:_fx_node_is_input_dependent_cudagraph_unsafe与patch_fx_node_is_input_dependent_cudagraph_unsafe(旧 monkey-patch 实现),逻辑已由新 pass 覆盖。【资料变更】
不涉及
【接口变更】
不涉及。新增的
npu::npu_fusion_attention_v3_unsafe/npu::npu_fusion_attention_grad_v3_unsafe仅作为 inductor 图改写的内部代理算子,行为完全转发至原 FA v3 算子,不对外暴露给用户脚本调用;patch_fx_node_is_input_dependent_cudagraph_unsafe是 inductor 内部的 monkey-patch 入口,非客户面接口。【功能验证】
新增 UT:
test/_inductor/test_fav3_partition_pass.py(225 行)覆盖以下场景:keep_prob == 1.0等不命中场景保持原 target 不变。inductor_config.triton.cudagraphs关闭时 pass 不生效的 short-circuit 行为。【CheckList】