已合并
test: add TensorMeta API validation #41434
test: add TensorMeta API validation #41434
已合并
zhaoziyi-2026创建于 7月13日
zhaoziyi-2026
7月13日

【合入来源】

关联 issue:

【修改方案】

本 PR 在已有 Tensor 测试文件 test/npu/test_tensor.py 中补充 torch._C._TensorMeta 的 API 一致性验证用例。

torch._C._TensorMeta 是 PyTorch torch._C 内部元类,负责管理 torch.Tensortorch.nn.Parameter 以及 torch.Tensor 子类等 Tensor 类对象的元类行为。经检查,PyTorch 上游仅在 JIT 报错路径中出现 _TensorMeta 字符串,不是目标 API 的直接专项测试;torch-npu 当前 test 目录中也未发现该 API 的专项测试。因此本 PR 按指导规范在已有 Tensor 测试文件中补充自写测试。

任务 API 功能、上游社区用例情况与本 PR 处理方式如下:

API 功能说明 上游社区用例 / 覆盖情况 本 PR 处理
torch._C._TensorMeta PyTorch C 扩展内部元类,type(torch.Tensor) 对应 _TensorMeta PyTorch 上游 test/test_jit.py 中存在错误信息包含 _TensorMeta 的间接覆盖,但不是目标 API 的直接专项测试。 test/npu/test_tensor.py 中补充专项测试,验证 Tensor 类元信息、NPU Tensor 实例关系、自定义 Tensor 子类和非法直接构造路径。

主要开发思路:

  1. 先确认 torch._C._TensorMeta 在当前 torch-npu 环境中存在。
  2. 复查 PyTorch 官方测试和 torch-npu 当前测试,未发现目标 _TensorMeta 的直接专项测试。
  3. 该 API 属于 Tensor 类元信息相关能力,当前仓库已有 test/npu/test_tensor.py 覆盖 Tensor 基础行为,因此本 PR 将新增用例放入该文件。
  4. 测试覆盖 _TensorMetatorch.Tensortorch.nn.Parameter、NPU Tensor 实例、自定义 Tensor 子类之间的关系,并验证 _TensorBase base 直接构造的异常路径。
  5. 本 PR 仅补充测试,不修改 API 实现,不改变现有接口行为。

修改测试文件:

同步清理该文件中未使用的 import itertools

` ext
test/npu/test_tensor.py


新增测试方法:

```text
test_tensor_meta_matches_tensor_classes
test_tensor_meta_with_npu_tensor_instance
test_tensor_meta_subclass_and_direct_construction

各测试核心验证点如下:

测试方法 核心验证点
test_tensor_meta_matches_tensor_classes 验证 _TensorMetatorch.Tensor 的元类,并验证 torch.Tensortorch.nn.Parameter 的类对象关系。
test_tensor_meta_with_npu_tensor_instance 验证 NPU Tensor 实例仍是 torch.Tensor 实例,但不是 _TensorMeta 实例,同时其类对象由 _TensorMeta 管理。
test_tensor_meta_subclass_and_direct_construction 验证自定义 torch.Tensor 子类使用 _TensorMeta,并验证以 torch._C._TensorBase 作为 base 直接调用 _TensorMeta(...) 会抛出预期异常。

【资料变更】

不涉及资料 PR。

已检查 PyTorch 官方公开文档与 Ascend native API 文档,未发现 torch._C._TensorMeta 独立条目。该 API 属于 torch._C 私有接口,按指导文档不需要补充资料,因此不新增 docs.md,不提交资料 PR。

【接口变更】

不涉及。

本 PR 不修改 API 实现,不改变现有接口行为,不新增 torch-npu 对外接口。

【功能验证】

运行环境:

操作系统:Ubuntu 22.04
昇腾硬件信息:910B
CANN软件版本:9.0.0
安装的软件版本:torch 2.7.1,torch-npu 2.7.1

执行命令:

cd /root
python /root/pytorch/test/npu/test_tensor.py -k tensor_meta -v

执行结果:

test_tensor_meta_matches_tensor_classes (__main__.TestTensor) ... ok
test_tensor_meta_subclass_and_direct_construction (__main__.TestTensor) ... ok
test_tensor_meta_with_npu_tensor_instance (__main__.TestTensor) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.826s

OK

最终验证结论:

  1. 本 PR 补充 3 个 API 一致性测试,覆盖 torch._C._TensorMeta 的 Tensor 类元信息、NPU Tensor 实例关系、自定义 Tensor 子类和异常路径。
  2. 补充测试不仅验证 API 可导入和可访问,也验证 _TensorMetatorch.Tensortorch.nn.Parameter、NPU Tensor 实例之间的类型关系。
  3. 补充测试涉及 Tensor 的部分已在当前 accelerator 上执行。
  4. 补充测试已在 2.7.1 环境验证通过。
  5. 目标 API 当前行为符合预期,未发现需要 API 功能补齐的问题。
  6. 本 PR 不修改 API 实现,不涉及接口变更。

【CheckList】

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 zhaoziyi-2026 的贡献)
Zzhaoziyi-2026
7月13日 创建了 pull request,commit 272e3d38
Zzhaoziyi-2026
7月13日 关联了issue:【社区任务】7月社区任务第一期-Ascend for PyTorch API 一致性开发(50)
atomgit-bot
atomgit-bot
7月13日 评论:

变更摘要

本 PR 在 test/npu/test_tensor.py 中为 torch._C._TensorMeta 补充了专项 API 一致性验证用例。_TensorMeta 是 PyTorch C 扩展内部的元类,负责管理 torch.Tensortorch.nn.Parameter 及 Tensor 子类的元类行为,上游社区缺乏对该 API 的直接专项测试。本次新增三个测试方法,覆盖 Tensor 类元信息校验、NPU Tensor 实例与元类的关系验证,以及自定义 Tensor 子类和非法直接构造路径的断言。

主要改动

  • 新增 test_tensor_meta_matches_tensor_classes 测试:验证 torch._C._TensorMetatorch.Tensor 的元类(type(torch.Tensor) 即为 _TensorMeta),并校验其模块名 torch._C、类名 _TensorMeta,同时确认 torch.Tensortorch.nn.Parameter 均为其实例,且 torch.nn.Parametertorch.Tensor 的子类。

  • 新增 test_tensor_meta_with_npu_tensor_instance 测试:验证 NPU 设备上的 Tensor 实例属于 torch.Tensor 但不属于 _TensorMeta(实例本身不是元类的实例),而其类型 type(npu_tensor) 才是 _TensorMeta 的实例,同时确认设备类型为 "npu"

  • 新增 test_tensor_meta_subclass_and_direct_construction 测试:验证自定义 Tensor 子类(CustomTensor)的元类为 _TensorMeta,且 CustomTensortorch.Tensor 的子类;同时断言直接调用 tensor_meta("DirectTensor", (), {}) 构造会抛出 RuntimeError: "Cannot subclass _TensorBase directly"

  • 补充模块级文档字符串:在 test/npu/test_tensor.py 文件头部添加了模块说明,标明该测试文件涵盖 NPU Tensor 行为及 torch._C._TensorMeta 元类一致性检查。

likedislike
atomgit-bot
atomgit-bot
7月13日 评论:

代码审查

审查总结

test/npu/test_tensor.py 的变更进行了全面审查,共审查了 3 个新增测试方法。

发现的问题

优先级 数量
P0 0
P1 0
P2 1
P3 0

P2 问题: test_tensor_meta_subclass_and_direct_construction 第 48 行 — assertRaisesRegex 期望 RuntimeError("Cannot subclass _TensorBase directly"),但调用 tensor_meta("DirectTensor", (), {}) 时传入的是空 bases 元组 ()。在 PyTorch C++ 源码中,空 bases 会先命中 PyTuple_GET_SIZE(bases) != 1 检查,抛出 "multiple base classes not supported" 而非 "Cannot subclass …" 错误。此外,错误信息中 _TensorBase 的下划线也与上游 PyTorch 的 TensorBase(无下划线)不一致。这可能导致测试因异常信息不匹配而失败。

整体风险评估

该变更为纯测试补充,不涉及生产代码路径,风险较低。三个测试方法中两个(test_tensor_meta_matches_tensor_classestest_tensor_meta_with_npu_tensor_instance)逻辑正确、无问题。第三个测试方法存在一处断言可能与实际异常信息不匹配的风险,建议修正后合入。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
此处折叠了140条消息 查看更多
ascend-robotascend-robot成员
17 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
17 天前 合入了pull request
ascend-robot
ascend-robot成员
17 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
17 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
17 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13528 [ commitID:72518735 ] 已完成
likedislike