Pull Request已成功合入, 合并人@ascend-robot
(感谢 huangyunlong 的贡献)变更摘要
该 PR 将 NPU 侧"填充未初始化内存"(fill uninitialized memory)功能的控制方式从基于字符串选项的 _npu_setOption 机制重构为通过 torch_npu._C 直接调用专用接口。引入 NpuContext 单例类,用明确的布尔 getter/setter 方法替代原有的 CheckFillUninitializedMemory() 全局函数和 TORCH_NPU_FILL_UNINITIALIZED_MEMORY 选项注册,内部调用点和 Python 层同步逻辑随之更新。
主要改动
- 新增
NpuContext单例类:在EnvVariables.h/EnvVariables.cpp中定义NpuContext类,包含_npu_fill_uninitialized_memory布尔成员及npuFillUninitializedMemory()/setNpuFillUninitializedMemory()访问方法,通过globalNpuContext()返回全局唯一实例,替代原有的选项注册宏TORCH_NPU_REGISTER_OPTION和REGISTER_OPTION_BOOL_FUNCTION。 - 内部调用点迁移:
ResizeNpu.cpp和TensorFactories.cpp中的条件判断从at_npu::native::env::CheckFillUninitializedMemory()改为at_npu::native::env::globalNpuContext().npuFillUninitializedMemory(),统一使用新接口。 - Python 层暴露专用 API:在
Module.cpp中新增_npu_set_fill_uninitialized_memory(接受 bool)和_npu_get_fill_uninitialized_memory(返回 bool)两个方法,取代原先通过_npu_setOption传递字符串字典的方式。 - Python 同步逻辑简化:
_deterministic.py中的_add_deterministic_patch()不再构造{"TORCH_NPU_FILL_UNINITIALIZED_MEMORY": "1"/"0"}字典调用_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',),修复参数类型。


代码审查
Closing Summary
已审查全部 7 个变更文件,结果如下:
| 优先级 | 数量 | 说明 |
|---|---|---|
| P2 | 1 | THNPModule_npuFillUninitializedMemory 缺少 HANDLE_TH_ERRORS/END_HANDLE_TH_ERRORS 宏 |
| P0/P1 | 0 | — |
| P3 | 0 | — |
逐文件审查结果:
test/npu/test_torch_fill_uninitialized_memory.py—only_for参数从字符串改为元组,功能等价,无问题。torch_npu/csrc/aten/common/ResizeNpu.cpp— 新增#include,调用方式从CheckFillUninitializedMemory()迁移至globalNpuContext().npuFillUninitializedMemory(),逻辑正确。torch_npu/csrc/aten/common/TensorFactories.cpp— 同上迁移,逻辑正确。torch_npu/csrc/framework/interface/EnvVariables.cpp— 移除旧的 option 注册和CheckFillUninitializedMemory定义,新增NpuContext类实现和globalNpuContext()工厂函数,旧符号已完全清理,无遗留引用。torch_npu/csrc/framework/interface/EnvVariables.h— 移除旧函数声明,新增NpuContext类和globalNpuContext()声明,接口设计合理。torch_npu/csrc/npu/Module.cpp— 新增 Python 绑定(setter/getter),其中 getter 缺少异常处理宏(已上报 P2)。torch_npu/utils/_deterministic.py— 从_npu_setOption迁移至新 API_npu_set_fill_uninitialized_memory,代码简化且正确。
整体风险判断:低风险。 唯一的问题是新增 getter 函数缺少异常处理宏,属于防御性编程的疏漏,当前简单实现下不会触发实际故障,但应修复以保持代码库一致性和未来健壮性。核心逻辑迁移完整、旧符号清理干净、无遗留引用。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-Ascend/pytorch | ✅ liangsongwei, li_jing_hw (2/2) | ✅ liangsongwei, li_jing_hw (2/1) |
| test | ✅ liangsongwei, li_jing_hw (2/2) | ✅ liangsongwei, li_jing_hw (2/1) |
| torch_npu/utils | ✅ li_jing_hw, liangsongwei (2/2) | ✅ li_jing_hw, liangsongwei (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
huangyunlong2022, thanks for your pull request. All authors of the commits have signed the CLA. 👍


Linking Issue Notice
@huangyunlong2022 , the pull request must be linked to at least one issue.
If an issue has already been linked, but the needs-issue label remains, you can remove the label by commenting /check-issue .


当前仓库存在以下 保护分支 :
| Protected Branch | Version | Release |
|---|---|---|
| master | ||
| v2.7.1 | ||
| v2.12.0 | ||
| v2.9.0 | ||
| v2.11.0 | ||
| v2.10.0 | ||
| v2.7.1-26.1.0 | ||
| v2.9.0-26.1.0 | ||
| v2.11.0-26.1.0 | ||
| v2.10.0-26.1.0 | ||
| v2.12.0-26.1.0 | ||
| ci-test |
评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作
注意:
- /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
- 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭


ascend docs pipeline is running...


✅ 跳过 docs ci 检查,没有需要检查的文档文件


🟡 Medium Priority
THNPModule_npuFillUninitializedMemory(第 2549-2556 行)是一个 Python C API 函数,注册为 METH_NOARGS,但其函数体缺少 HANDLE_TH_ERRORS / END_HANDLE_TH_ERRORS 宏包裹。
证据链:
- 变更行:第 2549-2556 行新增的函数体未包含
HANDLE_TH_ERRORS/END_HANDLE_TH_ERRORS。 - 对比证据:同一文件中所有其他
METH_NOARGS函数都正确使用了这对宏。特别地,紧邻的THNPModule_get_deterministic_level(第 2530-2535 行)和同批新增的THNPModule_setNpuFillUninitializedMemory(第 2537-2547 行)都正确使用了HANDLE_TH_ERRORS/END_HANDLE_TH_ERRORS。这是整个Module.cpp中唯一缺少这对宏的METH_NOARGS函数。
建议:在函数体首尾添加 HANDLE_TH_ERRORS / END_HANDLE_TH_ERRORS 宏,与项目中所有其他 METH_NOARGS 函数保持一致。
|
2556 | + static PyObject* THNPModule_npuFillUninitializedMemory( |
|
2557 | + PyObject* _unused, |
|
2558 | + PyObject* noargs) { |
|
2559 | + HANDLE_TH_ERRORS |
|
2560 | + if (at_npu::native::env::globalNpuContext().npuFillUninitializedMemory()) |
|
2561 | + Py_RETURN_TRUE; |
|
2562 | + else |
|
2563 | + Py_RETURN_FALSE; |
|
2564 | + END_HANDLE_TH_ERRORS |
| 2556
2565 | } |


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | ✅ | >>> |
| Build_ARM | ✅ | >>> | |
| Build_LibTorch_x86 | ✅ | >>> | |
| Build_LibTorch_ARM | ✅ | >>> | |
| Build_X86_torchair | 🛑 | >>> | |
| Build_ARM_torchair | 🛑 | >>> | |
| patch_test | 🛑 | >>> | |
| 恶意代码检查 | Antipoison | ✅ | >>> |
| 编码安全与规范检查 | codecheck_pre-commit | ✅ | >>> |
| check_error | ✅ | >>> | |
| lintrunner | ✅ | >>> | |
| 开源片段检查 | SCA | ✅ | >>> |
| 开发者测试 | UT_ARM_A3_Part_01 | 🛑 | >>> |
| UT_ARM_A3_Part_02 | 🛑 | >>> | |
| UT_ARM_A2_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Part_02 | ✅ | >>> | |
| UT_ARM_A2_Part_03 | ✅ | >>> | |
| UT_inductor_Part_01 | ✅ | >>> | |
| UT_inductor_Part_02 | ✅ | >>> | |
| UT_inductor_Part_03 | ✅ | >>> | |
| UT_inductor_Part_04 | ✅ | >>> | |
| UT_DIST_ARM_Part_01 | 🛑 | >>> | |
| UT_DIST_ARM_Part_02 | 🛑 | >>> | |
| UT_DIST_ARM_Part_03 | 🛑 | >>> | |
| UT_DIST_ARM_Part_04 | 🛑 | >>> | |
| UT_ARM_A2_Select_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Select_Part_02 | ✅ | >>> | |
| 流水线 | PR-pipeline_pytorch | ✅ | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


/approve


/approve


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.




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