已合并
perf: defer dynamo and inductor imports on master #44294
黄桂军创建于 8月10日
perf: defer dynamo and inductor imports on master #44294
已合并
黄桂军创建于 8月10日
黄桂军
黄桂军成员
8月10日

同步 v2.9.0_import 的 import 优化到 master

核心改动

将 NPU 的 Dynamo/Inductor 初始化从 import torch_npu 时立即执行改为懒加载

  • import torch_npu 时不导入 torch._dynamotorch._inductortorch_npu._inductor
  • 仅在用户实际调用 torch.compile() 或触发 graph capture 时才初始化 Dynamo 集成
  • 通过 setuptools entry points 和 meta_path finder 实现按需触发
  • 支持并发首次调用、fork 后恢复、失败重试

适配说明(master PyTorch 2.13+)

  • 保留 master 的 stream/event variable patches
  • 保留 make_config_entry 兼容封装(MIN_SUPPORTED >= 2.10)
  • 保留 master 的 _patch_flex_attention_device_dump_snapshot
  • 合并懒加载基础设施与 master 的 new_init(name=None) 签名

详见 master_syn.md 中的逐文件分类和冲突解决记录

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 黄桂军 的贡献)
黄桂军黄桂军成员
8月10日 创建了 pull request,commit 99888baa
atomgit-bot
atomgit-bot
8月10日 评论:

变更摘要

此 PR 将 NPU 的 Dynamo/Inductor 编译器集成从 import torch_npu 时的立即初始化改为懒加载模式。核心思路是:import torch_npu 不再导入 torch._dynamotorch._inductortorch_npu._inductor 等重型模块,仅在用户实际调用 torch.compile() 或触发图捕获时才按需初始化。实现手段包括 setuptools entry points、meta_path finder、run_once 并发安全装饰器,以及多个子模块的 __getattr__ 懒加载。同时将 MarkStepBox 和 RNG prim 补丁等状态/逻辑拆分到独立轻量模块,避免级联导入。

主要改动

  • Dynamo/Inductor 懒加载机制:新增 _DynamoPostImportFindermeta_path finder)在 torch._dynamo 首次被导入时自动触发 _lazy_dynamo_setup();新增 _lazy_inductor_setup() 仅在 Inductor 类后端被选用时才初始化 torch_npu._inductorsetup.py 新增 torch_dynamo_backends entry points(npunpugraph_exnpugraphs),由 Dynamo 框架在需要时回调。

  • 注册时机调整与 run_once 并发安全registry_manager._register_components() 中移除 _register_dynamo(),改为 _register_rng_prims(),Dynamo 后端注册延迟到 _lazy_dynamo_setup 中执行。run_once 装饰器增加 threading.Condition 并发等待、os.register_at_fork fork 后重置、失败时释放标记等机制,确保首次调用在多线程/fork 场景下正确。

  • MarkStepBox 与 RNG prim 补丁拆分为独立模块MarkStepBoxmark_step_begin()torch_npu/npu/_graph_tree.py 移至新文件 torch_npu/npu/_graph_tree_state.py_max_unpoolnd_patchpatch_philox_rand_offset 等 RNG 补丁从 torch_npu/utils/_inductor.py 移至新文件 torch_npu/utils/_rng_prims_patch.py,原 _inductor.py 仅保留重导出。两者均避免导入时拉入重型依赖。

  • 子模块按需导入torch_npu.npu.__init__.py 通过 __getattr__npugraph_ex 实现懒加载;torch_npu.distributed.__init__.py 通过 __getattr__fsdp 子模块实现懒加载;torch_npu/dynamo/__init__.py_install_lazy_torchair() 按需注册 torchair 懒代理模块。

  • transfer_to_npu.py 显式导入与 setattr 替换:将原先依赖 import torch_npu 副作用触发的 Dynamo/Inductor 模块导入改为显式 import 语句;将直接属性赋值(如 torch._inductor.utils.get_gpu_type = ...)改为 setattr 调用,避免触发模块的 __getattr__/描述符等副作用。

likedislike
不准确?
atomgit-bot
atomgit-bot
8月10日 评论:

🤖 AI Code Review

⚠️ 审查未能完成

本次代码审查未能完成,可能是临时性故障。

你可以在评论区输入 /ai review 重新发起审查。若多次失败,请联系管理员并附上下方追踪 ID。

追踪 ID: task-175411-run-168340

likedislike
不准确?
ascend-robotascend-robot成员
8月10日 添加了label:ascend-cla/yes
此处折叠了502条消息 查看更多
ascend-robotascend-robot成员
29 天前 添加了label:lgtm
黄桂军黄桂军成员
29 天前 关联了issue:【性能优化】import torch_npu 懒加载 dynamo/inductor
ascend-robotascend-robot成员
29 天前 删除了label:needs-issue
ascend-robotascend-robot成员
29 天前 合入了pull request
ascend-robot
ascend-robot成员
29 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13996 [ commitID:c6870554 ] 运行失败
likedislike