已合并
[Task-100][v2.7.1] API Consistency: Tensor.ndimension #41290
Yhw050920创建于 7月11日
[Task-100][v2.7.1] API Consistency: Tensor.ndimension #41290
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Yhw050920 的贡献)7月11日 关联了issue:【社区任务】7月社区任务第一期-Ascend for PyTorch API 一致性开发(100)
atomgit-bot
7月11日 评论:
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 张量上返回相同结果。


ascend-robot
7月11日 评论:
7月11日 评论:
atomgit-bot
7月11日 评论:
7月11日 评论:
此处折叠了312条消息 查看更多
chenrayray
15 天前 评论:
15 天前 评论:
/lgtm


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


ascend-robot
15 天前 评论:
15 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13677 [ commitID:3628abf4 ] 已完成


【合入来源】
关联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 个测试文件:
测试命令:
python test/npu/test_tensor_ndimension.py测试用例覆盖:
test_ndimension_0d_tensor— 0D 标量张量维度验证test_ndimension_1d_tensor— 1D 张量维度验证test_ndimension_2d_tensor— 2D 张量维度验证test_ndimension_3d_tensor— 3D 张量维度验证test_ndimension_4d_tensor— 4D 张量维度验证test_ndimension_cpu_npu_consistency— CPU/NPU 多形状维度一致性校验test_ndimension_after_operations— 张量运算后维度校验(加法、sum)test_ndimension_equals_ndim—ndimension()与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 仅新增测试文件,不修改产品源码中的函数签名、参数列表、返回值或跨仓调用关系,不产生客户面可见接口变化。
【功能验证】
验证环境
测试覆盖场景
# 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() == 4CPU/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结果:
【CheckList】
结论
Tensor.ndimensionAPI 在 v2.7.1 版本 NPU 环境下无需代码改动,功能与 PyTorch 官方 CPU 行为完全一致。测试截图