已合并
use torch_npu._C instead of option #43232
huangyunlong创建于 7月29日
use torch_npu._C instead of option #43232
已合并
huangyunlong创建于 7月29日
huangyunlong成员
7月29日

【合入来源】

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

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

使用torch_npu._C接口替换option接口

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

【功能验证】

说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图

【CheckList】

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

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 huangyunlong 的贡献)
Hhuangyunlong成员
7月29日 创建了 pull request,commit cf0d18a2
atomgit-bot
atomgit-bot
7月29日 评论:

变更摘要

此 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',)。

likedislike
不准确?
atomgit-bot
atomgit-bot
7月29日 评论:

代码审查

所有文件均已审查完毕。以下为审查总结。


审查总结

各文件审查结果

文件 结果
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

⛔ 需要修改

likedislike
不准确?
ascend-robotascend-robot成员
7月29日 添加了label:ascend-cla/yes
此处折叠了71条消息 查看更多
ascend-robotascend-robot成员
8月4日 删除了label:ci-pipeline-passed
ascend-robotascend-robot成员
8月4日 合入了pull request
huangyunlong成员
8月4日 评论:

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

likedislike
ascend-robot
ascend-robot成员
8月4日 评论:

In response to this:

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

@huangyunlong2022

同步操作执行结果:

Branch Status Pull Request
v2.7.1 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况
v2.9.0 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况
v2.10.0 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况
v2.11.0 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况
v2.12.0 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况
likedislike
ascend-robot
ascend-robot成员
8月4日 评论:
流水线 pytorch_gitcode_PR_multiVersion#13598 [ commitID:51aaf7a5 ] 已完成
likedislike