Pull Request已成功合入, 合并人@ascend-robot
(感谢 huangyunlong 的贡献)变更摘要
此 PR 将 NPU 填充未初始化内存开关的实现方式从基于环境变量选项(TORCH_NPU_FILL_UNINITIALIZED_MEMORY)的机制,改为通过 torch_npu._C 模块直接调用的 C++ API 方式。引入 NpuContext 类作为单例来管理该状态,移除原有的选项注册宏,新增 Python 绑定方法 _npu_set_fill_uninitialized_memory 和 _npu_get_fill_uninitialized_memory,并在调用点统一替换为新的访问路径。
主要改动
-
引入
NpuContext类替代选项宏机制: 在EnvVariables.h中新增NpuContext类,包含npuFillUninitializedMemory()getter 和setNpuFillUninitializedMemory(bool)setter,以及全局单例访问函数globalNpuContext();同时移除CheckFillUninitializedMemory()函数声明和EnvVariables.cpp中原有的TORCH_NPU_REGISTER_OPTION/REGISTER_OPTION_BOOL_FUNCTION宏注册。 -
新增 Python 绑定方法: 在
Module.cpp中添加THNPModule_setNpuFillUninitializedMemory和THNPModule_npuFillUninitializedMemory两个 C 函数,并注册为_npu_set_fill_uninitialized_memory和_npu_get_fill_uninitialized_memory方法,使 Python 层可直接设置/获取填充状态。 -
更新确定性填充调用点: 在
ResizeNpu.cpp和TensorFactories.cpp中,将at_npu::native::env::CheckFillUninitializedMemory()调用替换为at_npu::native::env::globalNpuContext().npuFillUninitializedMemory()。 -
简化 Python 层同步逻辑: 在
_deterministic.py中,将原先通过torch_npu._C._npu_setOption传递选项字典的方式,改为直接调用torch_npu._C._npu_set_fill_uninitialized_memory(mode),省去选项字符串构造与解析环节。 -
修复测试参数格式: 在
test_torch_fill_uninitialized_memory.py中将instantiate_device_type_tests的only_for参数从字符串'privateuse1'修正为单元素元组('privateuse1',)。


代码审查
所有文件均已审查完毕。以下为审查总结。
审查总结
各文件审查结果
| 文件 | 结果 |
|---|---|
test/npu/test_torch_fill_uninitialized_memory.py |
✅ 无问题(only_for 从字符串改为元组,适配新版 PyTorch API) |
torch_npu/csrc/aten/common/ResizeNpu.cpp |
✅ 无问题(新增 include + 替换函数调用,逻辑正确) |
torch_npu/csrc/aten/common/TensorFactories.cpp |
✅ 无问题(替换函数调用,逻辑正确) |
torch_npu/csrc/framework/interface/EnvVariables.cpp |
✅ 无问题(新增 globalNpuContext() 和 NpuContext 方法实现,逻辑正确) |
torch_npu/csrc/framework/interface/EnvVariables.h |
❌ P0:类定义缺少分号 |
torch_npu/csrc/npu/Module.cpp |
⚠️ P3:getter 函数缺少异常处理宏 |
torch_npu/utils/_deterministic.py |
⚠️ P3:docstring 过时 |
按优先级统计
- P0: 1 个(编译阻断)
- P1: 0 个
- P2: 0 个
- P3: 2 个(可选改进)
整体风险评估
高风险 — 存在一个 P0 编译阻断问题:EnvVariables.h 第 47 行类定义 NpuContext 末尾缺少分号,将导致 C++ 编译失败。该问题必须在合入前修复。其余两处 P3 为可选改进,不影响功能正确性。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 2 |
| 🟡 建议 | 0 |
⛔ 需要修改


/sync v2.7.1 v2.9.0 v2.10.0 v2.11.0 v2.12.0


In response to this:
/sync v2.7.1 v2.9.0 v2.10.0 v2.11.0 v2.12.0
同步操作执行结果:
| Branch | Status | Pull Request |
|---|---|---|
| v2.7.1 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| v2.9.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| v2.10.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| v2.11.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| v2.12.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 |




【合入来源】
【修改方案】
使用torch_npu._C接口替换option接口
【资料变更】
【接口变更】
【功能验证】
【CheckList】