已合并
[Performance]: [v2.10.0]inductor reduce-overhead场景,有FA更新时,FA update动作和模型执行并行 #43349
dingdairong创建于 27 天前
[Performance]: [v2.10.0]inductor reduce-overhead场景,有FA更新时,FA update动作和模型执行并行 #43349
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 dingdairong 的贡献)27 天前 创建了 pull request,commit 19d04e78
atomgit-bot
27 天前 评论:
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_capture、cpu_update_input是否有效、以及是否处于 launch blocking 模式三个条件,决定是否可以在 ACLGraph 更新之前执行重放。 - 调整
NPUGraphNode.run()中的执行顺序:当_can_replay_before_aclgraph_update返回True时,先执行_copy_inputs_and_remove_from_src和run_graph(),再执行update_aclgraph_records_for_graph;否则保持原有顺序(先更新 ACLGraph 再重放)。 - 新增
import os:为_npu_launch_blocking_enabled中读取环境变量提供支持。


ascend-robot
27 天前 评论:
27 天前 评论:
atomgit-bot
27 天前 评论:
27 天前 评论:
代码审查
我已经彻底审查了 torch_npu/npu/_graph_tree.py 中的所有变更。涉及的区域包括:
- 新增的
import os - 新增的
_npu_launch_blocking_enabled()函数 - 新增的
_can_replay_before_aclgraph_update()函数 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_src、run_graph和update_aclgraph_records_for_graph三个关键操作,只是顺序不同;aclgraph_update_submitted变量在所有路径上均被赋值,不存在未定义引用的风险;aclgraph_cpu_update_input在分支前已解析完成,不受后续_copy_inputs_and_remove_from_src对new_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 并行性。所有执行路径均保持完整性和一致性,未引入新的正确性或可靠性风险。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


27 天前 添加了label:ascend-cla/yes
此处折叠了95条消息 查看更多
27 天前 添加了label:approved
26 天前 添加了label:lgtm
26 天前 合入了pull request
ascend-robot
26 天前 评论:
26 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13414 [ commitID:2595916d ] 已完成


【合入来源】
【修改方案】
在 同一 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。
【资料变更】
【接口变更】
【功能验证】
【CheckList】