已合并
[Task-100][v2.7.1] API Consistency: Tensor.ndimension #41290
[Task-100][v2.7.1] API Consistency: Tensor.ndimension #41290
已合并
Yhw050920创建于 7月11日
Yhw050920
Yhw050920
7月11日

【合入来源】

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

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

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

【修改方案】

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

API 功能说明

Tensor.ndimension() -> int 返回张量的维度数量,是 Tensor.dim() 的别名,与 Tensor.ndim 属性等价。

用例完整性说明

PyTorch 官方用例现状

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

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

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

新增用例原因

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

NPU 适配方案

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

具体修改内容

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

test/npu/test_tensor_ndimension.py

测试命令:

python test/npu/test_tensor_ndimension.py

测试用例覆盖:

  1. test_ndimension_0d_tensor — 0D 标量张量维度验证
  2. test_ndimension_1d_tensor — 1D 张量维度验证
  3. test_ndimension_2d_tensor — 2D 张量维度验证
  4. test_ndimension_3d_tensor — 3D 张量维度验证
  5. test_ndimension_4d_tensor — 4D 张量维度验证
  6. test_ndimension_cpu_npu_consistency — CPU/NPU 多形状维度一致性校验
  7. test_ndimension_after_operations — 张量运算后维度校验(加法、sum)
  8. test_ndimension_equals_ndimndimension()ndim 属性等价性校验

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

【资料变更】

不涉及。

经核查,Tensor.ndimension 在 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.ndimension() == 0

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

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

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

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

CPU/NPU 一致性验证

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

UT 验证

python test/npu/test_tensor_ndimension.py -v

结果:

test_ndimension_0d_tensor (test.npu.test_tensor_ndimension.TestTensorNdimension) ... ok
test_ndimension_1d_tensor (test.npu.test_tensor_ndimension.TestTensorNdimension) ... ok
test_ndimension_2d_tensor (test.npu.test_tensor_ndimension.TestTensorNdimension) ... ok
test_ndimension_3d_tensor (test.npu.test_tensor_ndimension.TestTensorNdimension) ... ok
test_ndimension_4d_tensor (test.npu.test_tensor_ndimension.TestTensorNdimension) ... ok
test_ndimension_cpu_npu_consistency ...
test_ndimension_after_operations (test.npu.test_tensor_ndimension.TestTensorNdimension) ... ok
test_ndimension_equals_ndim (test.npu.test_tensor_ndimension.TestTensorNdimension) ... ok

----------------------------------------------------------------------
Ran 8 tests in 1.134s

OK

【CheckList】


结论

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


测试截图

v2.7.1.png

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

变更摘要

本次 PR 旨在验证 Tensor.ndimension API 在 v2.7.1 版本 NPU 环境下的适配性。经确认,Tensor.ndimension()Tensor.dim() 的别名,仅读取张量维度信息,不涉及计算操作,在 NPU 上直接继承自 PyTorch 原生实现,无需任何代码改动。本 PR 仅新增 NPU 适配测试用例,覆盖 0D~4D 张量、CPU/NPU 一致性、张量运算后维度变化以及与 ndim 属性的等价性验证。

主要改动

  • 新增 NPU 测试文件:新增 test/npu/test_tensor_ndimension.py,定义 TestTensorNdimension 测试类,包含 8 个测试用例,覆盖 Tensor.ndimension() 在不同维度张量(0D~4D)上的 NPU 行为验证。
  • CPU/NPU 一致性校验:新增 test_ndimension_cpu_npu_consistency 测试方法,对多种形状的张量在 CPU 和 NPU 上分别调用 ndimension(),确保返回值一致。
  • 运算后维度验证:新增 test_ndimension_after_operations 测试方法,验证张量经过加法、sum 等运算后 ndimension() 返回正确的维度数。
  • ndim 等价性验证:新增 test_ndimension_equals_ndim 测试方法,确认 ndimension()ndim 属性在 NPU 张量上返回相同结果。
likedislike
atomgit-bot
atomgit-bot
7月11日 评论:

代码审查

✅ 未发现问题

likedislike
此处折叠了312条消息 查看更多
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#13677 [ commitID:3628abf4 ] 已完成
likedislike