已合并
add_npu_backend_init_log #39403
cuiduo创建于 6月26日
add_npu_backend_init_log #39403
已合并
cuiduo创建于 6月26日
2 个文件变更+7-3
@@ -1,7 +1,6 @@
1import torch1import torch
2from torch.testing._internal.common_utils import run_tests, parametrize, instantiate_parametrized_tests2from torch.testing._internal.common_utils import run_tests, parametrize, instantiate_parametrized_tests
3from testutils import TestUtils3from testutils import TestUtils
4-import torch_npu
5 4 
6 5 
7class TestSumAdd(TestUtils):6class TestSumAdd(TestUtils):
@@ -1,6 +1,7 @@
1import inspect1import inspect
2import os2import os
3import sys3import sys
4+import logging
4from typing import Any, Optional, TYPE_CHECKING5from typing import Any, Optional, TYPE_CHECKING
5import importlib6import importlib
6 7 
@@ -28,7 +29,7 @@ if TYPE_CHECKING:
28 from torch._dynamo.symbolic_convert import InstructionTranslator29 from torch._dynamo.symbolic_convert import InstructionTranslator
29 30 
30use_jit_script = False31use_jit_script = False
31- 32+log = logging.getLogger(__name__)
32 33 
33class NPUTorchCtxManagerClassVariable(TorchCtxManagerClassVariable):34class NPUTorchCtxManagerClassVariable(TorchCtxManagerClassVariable):
34 def call_function(self, tx, args, kwargs):35 def call_function(self, tx, args, kwargs):
@@ -227,10 +228,14 @@ def patch_inductor_wrapper():
227 else:228 else:
228 src_init(self, mode, options, dynamic)229 src_init(self, mode, options, dynamic)
229 backend = _resolve_npu_backend_from_wrapper(self)230 backend = _resolve_npu_backend_from_wrapper(self)
230- if backend == "mlir" or backend == "dvm":231+ if backend=="mlir":
231 with _NpuBackendScope(backend):232 with _NpuBackendScope(backend):
233+ log.info("Running MLIR backend")
atomgit-bot
atomgit-botatomgit-bot6月26日

🔴 Critical

文件 torch_npu/utils/_dynamo.py 中未定义 log 变量——没有 import logging,也没有 log = logging.getLogger(...) 或从其他模块导入。第232行和第237行的 log.info(...) 调用将在运行时触发 NameError: name 'log' is not defined,导致整个 new_init 函数崩溃,inductor wrapper 初始化失败。

建议:在文件顶部添加 import logging,并在模块级别创建 logger:log = logging.getLogger(__name__),或者使用 torch._logging.getArtifactLogger(与 _graph_tree.py 中的模式一致)。

  当前建议代码无改动
likedislike
232 device_id = torch_npu.npu.current_device()234 device_id = torch_npu.npu.current_device()
233 torch_npu._C._recovery_all_npu_stream(device_id)235 torch_npu._C._recovery_all_npu_stream(device_id)
236+ if backend=="dvm":
237+ with _NpuBackendScope(backend):
238+ log.info("Running dvm backend")
atomgit-bot
atomgit-botatomgit-bot6月26日

🟠 High Priority

原始代码中 mlirdvm 后端共享同一个代码块,均执行了 device_id = torch_npu.npu.current_device()torch_npu._C._recovery_all_npu_stream(device_id) 进行流恢复。变更将 or 条件拆分为两个独立 if 块后,dvm 分支(第235-237行)仅保留了 _NpuBackendScope 上下文进入和新增的日志输出,丢失了流恢复调用。而 mlir 分支(第230-234行)仍保留了完整的流恢复逻辑。PR 标题为"add_npu_backend_init_log",意图仅为添加日志,表明这是拆分条件时意外遗漏。若 dvm 后端依赖流恢复,将导致运行时行为异常(如流未正确恢复导致的死锁或数据竞争)。

建议:在 dvm 分支中补回 device_id = torch_npu.npu.current_device()torch_npu._C._recovery_all_npu_stream(device_id) 调用,与 mlir 分支保持一致;或者如果确认 dvm 确实不需要流恢复,请在代码注释中说明原因。

likedislike
234 239 
235 _TorchCompileInductorWrapper.__call__ = new_call240 _TorchCompileInductorWrapper.__call__ = new_call
236 _TorchCompileInductorWrapper.__init__ = new_init241 _TorchCompileInductorWrapper.__init__ = new_init