已合并
[test][v2.12.0] add NPU validation cases for torch.Tensor.map_ and torch.Tensor.module_load (issues #2720 #2722) #41656
lele130创建于 7月14日
[test][v2.12.0] add NPU validation cases for torch.Tensor.map_ and torch.Tensor.module_load (issues #2720 #2722) #41656
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 lele130 的贡献)ascend-robot
7月14日 评论:
7月14日 评论:
atomgit-bot
7月14日 评论:
7月14日 评论:
变更摘要
此 PR 为 torch.Tensor.map_ 和 torch.Tensor.module_load 两个 API 新增了 NPU 一致性验证测试用例,以响应 Ascend for PyTorch API 一致性任务(#2720、#2722)。新增两个独立的测试文件,每个文件包含 2 个自包含的验证用例,采用加速器设备模式,可直接扩展。
主要改动
- 新增
test/test_tensor_map_.py:创建TestTensorMap测试类,包含test_map_applies_callable(验证map_对源张量逐元素应用可调用对象)和test_map_uses_destination_values(验证map_在运算中使用目标张量的当前值)两个用例。由于map_在 PyTorch 社区中仅支持 CPU,该文件标记为NPU-EXEMPT。 - 新增
test/test_tensor_module_load.py:创建TestTensorModuleLoad测试类,包含test_module_load_returns_source_values(验证module_load返回源张量的值)和test_module_load_keeps_dest_dtype(验证输出张量保持目标张量的dtype)两个用例,张量通过.to(DEVICE)在 NPU 上运行。 - 统一加速器设备模式:两个测试文件均通过
DEVICE = (acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu")动态获取当前加速器设备,实现 CPU/NPU 自适应。


atomgit-bot
7月14日 评论:
7月14日 评论:
代码审查
经过对两个变更文件的全面审查,我来做总结。
审查总结
已审查文件
| 文件 | 审查结论 |
|---|---|
test/test_tensor_map_.py |
发现 2 个问题(均为 P3) |
test/test_tensor_module_load.py |
无问题 |
问题统计
- P0: 0
- P1: 0
- P2: 0
- P3: 2
总体风险评估
低风险。 两个新增测试文件的测试逻辑本身正确,test_tensor_module_load.py 文件中 DEVICE 变量使用正确、文档字符串准确,无需修改。test_tensor_map_.py 存在两个 P3 级的小问题:一个未使用的 DEVICE 变量(死代码),以及文档字符串与 map_ 仅支持 CPU 的行为不一致。这些问题不影响测试正确性,但建议在合并前清理。
各发现详情
-
P3 - test_tensor_map_.py:13 —
DEVICE变量定义但从未使用(死代码)。由于map_是 CPU-only API,该变量及初始化时的current_accelerator()调用均为多余。 -
P3 - test_tensor_map_.py:5-6 — 文档字符串声称张量在 NPU 上运行,但实际测试均在 CPU 上执行(如第 18 行 NPU-EXEMPT 注释所述),两者矛盾。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


此处折叠了275条消息 查看更多
Jingwei Huang
3 天前 评论:
3 天前 评论:
/lgtm


3 天前 添加了label:lgtm
3 天前 合入了pull request
ascend-robot
3 天前 评论:
3 天前 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


ascend-robot
3 天前 评论:
3 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14160 [ commitID:1ef6c3fd ] 已完成


【合入来源】
关联 issue:
torch.Tensor.map_(API 一致性验证)torch.Tensor.module_load(API 一致性验证)【修改方案】
本 PR 为
torch.Tensor.map_和torch.Tensor.module_load两个 API 在 NPU 场景下补充一致性验证用例。PyTorch 社区缺少针对这两个 API 的直接、集中测试,按规范 1.3(自写用例)新增测试文件到test/目录。修改文件:
test/test_tensor_map_.py(新增):覆盖torch.Tensor.map_(3 个用例)test/test_tensor_module_load.py(新增):覆盖torch.Tensor.module_load(5 个用例)合计 8 个用例。不涉及
torch_npu任何 C++/Python 代码改动。【API 功能介绍】
1. torch.Tensor.map_(tensor, callable) → Tensor
对
self和给定tensor的每个元素应用callable,结果存回selftensor。两个 tensor 必须可广播。def callable(a, b) -> numbertorch/_tensor.py,底层调用at::mapkernelTypeError: map_ is only implemented on CPU tensors),社区 CUDA 同样不支持2. torch.Tensor.module_load(other, assign=False) → Tensor
定义如何将
other转换后加载到self中,用于load_state_dict()的 swap_tensors 路径。当get_swap_module_params_on_conversion()为 True 时使用。self.copy_(other).detach()(assign=False)或other.detach()(assign=True)torch/_tensor.pycopy_和detach实现,NPU 上直接可用,与数据类型无关【上游社区用例情况】
torch.Tensor.map_
PyTorch 社区
test/test_torch.py::test_broadcast包含"map",但显式跳过 CUDA 设备。NPU 行为与 CUDA 一致。torch.Tensor.module_load
社区无直接测试用例,仅通过
load_state_dict间接覆盖。【测试环境】
【测试日志】
【资料补齐检查结论】
torch.Tensor.map_:docs/zh/native_apis中已有该 API 记录。map_在 NPU 上不可用,社区 CUDA 同样不支持,无需补充资料。torch.Tensor.module_load:docs/zh/native_apis中已有该 API 记录。非计算类 API,与数据类型无关,无需补充资料。Fixes #2720, Fixes #2722