已合并
[Task-99][v2.7.1] API Consistency: Tensor.ndim #41340
[Task-99][v2.7.1] API Consistency: Tensor.ndim #41340
已合并
Yhw050920创建于 7月11日
Yhw050920
Yhw050920
7月11日

【合入来源】

请勿携带内部流程信息(需求链接、问题单、内部issue等)

关联Issue:https://gitcode.com/Ascend/pytorch/issues/2724

资料核查结论参见:https://gitcode.com/Ascend/pytorch/issues/2834

【修改方案】

本 PR 属于 Torch-NPU API 一致性对齐任务,面向 Tensor.ndim 完成 v2.7.1 版本的 API 行为验证与测试用例补齐。

API 功能说明

Tensor.ndim 是只读属性,返回张量的维度数量,与 Tensor.dim()Tensor.ndimension() 等价。

用例完整性说明

PyTorch 官方用例现状

经检索 PyTorch 官方仓库(v2.7.1–v2.12.0),对 torch/test/ 目录执行了以下检索:

  • grep -rn "\.ndim" test/ --include="*.py" — 未命中对该接口的独立直接测试
  • grep -rn "ndim" torch/ --include="*.py" — 仅在 Tensor 类中存在属性/方法定义

检索结论Tensor.ndim 在 PyTorch 核心测试中被 dim() 等关联 API 间接覆盖,但未发现针对该接口的独立聚焦测试用例,所有目标版本行为一致。

新增用例原因

由于上游无独立聚焦用例,无法对 Tensor.ndim 的跨版本行为进行定向回归看护。按照任务文档场景三规范,自主编写完整测试用例,提交至 test/npu/ 目录。

NPU 适配方案

Tensor.ndim 仅读取张量元数据的维度信息,不涉及任何设备端计算或算子调度。在 NPU 环境下直接继承自 PyTorch 原生实现,无需代码适配。

具体修改内容

本 PR 仅新增 1 个测试文件:

test/npu/test_tensor_ndim.py

测试命令:

python test/npu/test_tensor_ndim.py

测试用例覆盖:

  1. test_ndim_0d_tensor — 0D 标量张量维度验证
  2. test_ndim_1d_tensor — 1D 张量维度验证
  3. test_ndim_2d_tensor — 2D 张量维度验证
  4. test_ndim_3d_tensor — 3D 张量维度验证
  5. test_ndim_4d_tensor — 4D 张量维度验证
  6. test_ndim_cpu_npu_consistency — CPU/NPU 多形状维度一致性校验
  7. test_ndim_after_operations — 张量运算后维度校验(加法、sum)

所有测试方法均使用 @SupportedDevices(['Ascend910A', 'Ascend910B', 'Ascend910_93', 'Ascend950']) 装饰器进行 NPU 可用性检查,未检测到 NPU 设备时自动跳过。使用 self.assert* 系列方法完成结果比对,张量通过 .npu() 迁移至 NPU 设备。

【资料变更】

不涉及。

经核查,Tensor.ndim 在 v2.7.1–v2.12.0、master 全版本 docs/zh/native_apis/pytorch_2-X-Y/torch-Tensor.md 表格中均已收录,无需补充文档。

【接口变更】

不涉及。

本 PR 仅新增测试文件,不修改产品源码中的函数签名、参数列表、返回值或跨仓调用关系,不产生客户面可见接口变化。

【功能验证】

验证环境

组件 版本
torch 2.7.1+cpu
torch_npu 2.7.1.post6
CANN 9.0.0

测试覆盖场景

# 0D张量
x = torch.tensor(5).npu()
assert x.ndim == 0

# 1D张量
x = torch.randn(5).npu()
assert x.ndim == 1

# 2D张量
x = torch.randn(3, 4).npu()
assert x.ndim == 2

# 3D张量
x = torch.randn(2, 3, 4).npu()
assert x.ndim == 3

# 4D张量
x = torch.randn(2, 3, 4, 5).npu()
assert x.ndim == 4

CPU/NPU 一致性验证

cpu_tensor = torch.randn(3, 4, 5)
npu_tensor = cpu_tensor.npu()
assert cpu_tensor.ndim == npu_tensor.ndim  # \u2705 一致

UT 验证

python test/npu/test_tensor_ndim.py -v

结果:

test_ndim_0d_tensor (test.npu.test_tensor_ndim.TestTensorNdim) ... ok
test_ndim_1d_tensor (test.npu.test_tensor_ndim.TestTensorNdim) ... ok
test_ndim_2d_tensor (test.npu.test_tensor_ndim.TestTensorNdim) ... ok
test_ndim_3d_tensor (test.npu.test_tensor_ndim.TestTensorNdim) ... ok
test_ndim_4d_tensor (test.npu.test_tensor_ndim.TestTensorNdim) ... ok
test_ndim_cpu_npu_consistency (test.npu.test_tensor_ndim.TestTensorNdim) ... ok
test_ndim_after_operations (test.npu.test_tensor_ndim.TestTensorNdim) ... ok

----------------------------------------------------------------------
Ran 7 tests in 1.210s

OK

【CheckList】


结论

Tensor.ndim API 在 v2.7.1 版本 NPU 环境下无需代码改动,功能与 PyTorch 官方 CPU 行为完全一致。


测试截图

v2.7.1.png

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

变更摘要

此PR为 Tensor.ndim API 在 NPU 环境下的适配性验证变更,确认该属性无需代码改动即可在 NPU 上正常工作。核心改动是新增测试文件 test/npu/test_tensor_ndim.py,覆盖 0D~4D 张量的维度读取、CPU/NPU 结果一致性以及运算后张量的 ndim 属性正确性,作为 NPU 环境下的回归验证用例。

主要改动

  • 新增测试类 TestTensorNdim:在 test/npu/test_tensor_ndim.py 中新增继承自 TestCase 的测试类,包含 7 个测试方法,全部使用 self.assertEqual 进行断言验证。
  • 覆盖多维度张量场景test_ndim_0d_tensortest_ndim_4d_tensor 五个方法分别验证 0D 到 4D 张量在 NPU 上 ndim 返回正确的维度数。
  • 新增 CPU/NPU 一致性测试test_ndim_cpu_npu_consistency 方法遍历多种形状的随机张量,对比 CPU 和 NPU 张量的 ndim 返回值是否一致。
  • 新增运算后 ndim 属性测试test_ndim_after_operations 方法验证张量经过加法运算和 sum 降维后,ndim 属性值是否正确更新。
likedislike
atomgit-bot
atomgit-bot
7月11日 评论:

代码审查

✅ 未发现问题

likedislike
此处折叠了302条消息 查看更多
chenrayray
chenrayray成员
15 天前 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
15 天前 添加了label:lgtm
ascend-robotascend-robot成员
15 天前 合入了pull request
ascend-robot
ascend-robot成员
15 天前 评论:

Pull Request 已合并或已关闭。

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

likedislike
ascend-robot
ascend-robot成员
15 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13674 [ commitID:e2292219 ] 已完成
likedislike