已合并
fix: 修复 inductor 编译子进程重复初始化 NPU 的问题 #44922
fix: 修复 inductor 编译子进程重复初始化 NPU 的问题 #44922
已合并
dingdairong创建于 7 天前
dingdairong成员
7 天前

【合入来源】

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

【修改方案】

问题原因
直接原因:inductor 编译子进程(sidecar)在 fork worker 前,因 import torch 时自动加载了 torch_npu 并初始化了 NPU,导致 fork 出的 worker 触发 "Cannot re-initialize NPU in forked subprocess" 错误。
为什么部分版本有问题:torch_npu 在 v2.7.1 时通过 PR !30476 修复了此问题(在创建 sidecar 前临时禁用 TORCH_DEVICE_BACKEND_AUTOLOAD,防止 sidecar 自动加载 torch_npu)。该修复已同步到 v2.9.0 和 v2.10.0 分支,但遗漏了 v2.11.0 和 v2.12.0 分支,导致这两个版本存在此问题。
解决方案
在 torch_npu/_inductor/init.py 文件开头补充 ORG_AUTOLOAD + AsyncCompile.warm_pool() 逻辑,确保 sidecar 进程继承 TORCH_DEVICE_BACKEND_AUTOLOAD=0,避免 sidecar 中自动加载 torch_npu 触发 NPU 初始化。该修改与 v2.9.0/v2.10.0 保持一致。

【资料变更】

“不涉及”

【接口变更】

“不涉及”

【功能验证】

优化冒烟用例进行看护,冒烟用例运行通过

【CheckList】

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

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

变更摘要

本 PR 针对 torch_npu/_inductor/__init__.py 模块导入流程做出修复:在侧车(sidecar)进程预热 AsyncCompile 线程池之前,临时关闭环境变量 TORCH_DEVICE_BACKEND_AUTOLOAD,从而避免在 fork 出的子进程中触发 NPU 初始化,预热完成后再恢复该环境变量的原始值。改动仅涉及 1 个文件,纯新增逻辑,无删除。

主要改动

  • 临时禁用后端自动加载:新增 os 导入,并通过 os.getenv("TORCH_DEVICE_BACKEND_AUTOLOAD", "1") 保存原始值,随后将 TORCH_DEVICE_BACKEND_AUTOLOAD 设置为 "0",防止后续导入过程中自动初始化设备后端。
  • 预热 AsyncCompile 线程池:在环境变量关闭状态下导入 torch._inductor.async_compile.AsyncCompile 并调用 AsyncCompile.warm_pool(),确保预热过程在 fork 出的子进程中不会触发 NPU 初始化。
  • 恢复环境变量原始值:预热结束后通过 os.environ["TORCH_DEVICE_BACKEND_AUTOLOAD"] = ORG_AUTOLOAD 将环境变量恢复为模块导入前的取值,避免影响后续正常流程。
likedislike
atomgit-bot
atomgit-bot
7 天前 评论:

代码审查

✅ 未发现问题

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

/lgtm

likedislike
薛鹏
薛鹏成员
5 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
5 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
5 天前 合入了pull request
ascend-robot
ascend-robot成员
5 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14393 [ commitID:aae46525 ] 已完成
likedislike