已合并
[Performance]: [v2.10.0]inductor reduce-overhead场景,有FA更新时,FA update动作和模型执行并行 #43349
[Performance]: [v2.10.0]inductor reduce-overhead场景,有FA更新时,FA update动作和模型执行并行 #43349
已合并
dingdairong创建于 27 天前
dingdairong成员
27 天前

【合入来源】

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

【修改方案】

在 同一 NPUGraphTree key 第三次及以后执行的 replay 路径,如果当前 graph 支持 ACLGraph update、存在 update plan,且 ASCEND_LAUNCH_BLOCKING 未开启,则先拷贝 tensor 输入并异步提交 graph.replay(),再在 update_stream 上提交 ACLGraph update;图内 IFA 前捕获的 external event 会保证 IFA 等到 update 完成后再执行。blocking 场景, 避免卡死,保持旧顺序,先 update 后 replay。

【资料变更】

“不涉及”

【接口变更】

不涉及”

【功能验证】

新增ST验证看护,性能优化效果参考issu中profiling截图

【CheckList】

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

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

变更摘要

此 PR 主要优化了 NPUGraphNode.run() 中 ACLGraph 更新与图重放(replay)的执行顺序:在满足特定条件时,将 update_aclgraph_records_for_graph 调用推迟到 run_graph() 之后执行,以减少不必要的同步等待。同时新增了两个辅助函数 _npu_launch_blocking_enabled_can_replay_before_aclgraph_update 用于判断是否可以采用这一优化路径。

主要改动

  • 新增 _npu_launch_blocking_enabled() 函数:通过检查 torch_npu._C._npu_launch_blocking_enabled 属性或 ASCEND_LAUNCH_BLOCKING 环境变量,判断当前是否启用了 NPU 启动阻塞模式。
  • 新增 _can_replay_before_aclgraph_update() 函数:综合 graph 是否存在且启用了 auto_dispatch_capturecpu_update_input 是否有效、以及是否处于 launch blocking 模式三个条件,决定是否可以在 ACLGraph 更新之前执行重放。
  • 调整 NPUGraphNode.run() 中的执行顺序:当 _can_replay_before_aclgraph_update 返回 True 时,先执行 _copy_inputs_and_remove_from_srcrun_graph(),再执行 update_aclgraph_records_for_graph;否则保持原有顺序(先更新 ACLGraph 再重放)。
  • 新增 import os:为 _npu_launch_blocking_enabled 中读取环境变量提供支持。
likedislike
atomgit-bot
atomgit-bot
27 天前 评论:

代码审查

我已经彻底审查了 torch_npu/npu/_graph_tree.py 中的所有变更。涉及的区域包括:

  1. 新增的 import os
  2. 新增的 _npu_launch_blocking_enabled() 函数
  3. 新增的 _can_replay_before_aclgraph_update() 函数
  4. NPUGraphNode.run() 方法的重构:将 ACLGraph 更新与图重放解耦,并在特定条件下调整执行顺序

经过仔细分析:

  • _npu_launch_blocking_enabled() 逻辑正确:优先使用 C 扩展提供的检测函数,回退到 ASCEND_LAUNCH_BLOCKING 环境变量。默认值 "0" 表示未启用,符合预期。
  • _can_replay_before_aclgraph_update() 的条件组合逻辑正确:图有效 + auto_dispatch_capture + 有更新计划 + 非 launch blocking 模式 → 可以先重放后更新。与 update_aclgraph_records_for_graph() 中的前置检查保持一致。
  • run() 方法的重构:两个分支(先更新后重放 / 先重放后更新)均完整执行了 _copy_inputs_and_remove_from_srcrun_graphupdate_aclgraph_records_for_graph 三个关键操作,只是顺序不同;aclgraph_update_submitted 变量在所有路径上均被赋值,不存在未定义引用的风险;aclgraph_cpu_update_input 在分支前已解析完成,不受后续 _copy_inputs_and_remove_from_srcnew_inputs 的修改影响。
  • import os 仅有 _npu_launch_blocking_enabled 一处使用,导入位置正确且必要。

未发现逻辑错误、安全漏洞、可靠性问题、破坏性变更或性能退化。


审查总结:

优先级 数量
P0 0
P1 0
P2 0
P3 0

已审查文件:

  • torch_npu/npu/_graph_tree.py — 无问题

总体风险判断: 低。该变更是对 NPUGraphNode.run() 方法的结构化重构,在特定条件下(auto_dispatch_capture 启用且有 ACLGraph 更新计划且非 launch blocking 模式)将 ACLGraph 更新延迟到图重放之后执行,以优化 CPU/NPU 并行性。所有执行路径均保持完整性和一致性,未引入新的正确性或可靠性风险。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
ascend-robotascend-robot成员
27 天前 添加了label:ascend-cla/yes
此处折叠了95条消息 查看更多
ascend-robotascend-robot成员
27 天前 添加了label:approved
luochao60成员
26 天前 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
26 天前 添加了label:lgtm
ascend-robotascend-robot成员
26 天前 合入了pull request
ascend-robot
ascend-robot成员
26 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13414 [ commitID:2595916d ] 已完成
likedislike