已合并
[Task-99][v2.7.1] API Consistency: Tensor.ndim #41340
Yhw050920创建于 7月11日
[Task-99][v2.7.1] API Consistency: Tensor.ndim #41340
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Yhw050920 的贡献)7月11日 关联了issue:【社区任务】7月社区任务第一期-Ascend for PyTorch API 一致性开发(99)
ascend-robot
7月11日 评论:
7月11日 评论:
atomgit-bot
7月11日 评论:
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_tensor至test_ndim_4d_tensor五个方法分别验证 0D 到 4D 张量在 NPU 上ndim返回正确的维度数。 - 新增 CPU/NPU 一致性测试:
test_ndim_cpu_npu_consistency方法遍历多种形状的随机张量,对比 CPU 和 NPU 张量的ndim返回值是否一致。 - 新增运算后
ndim属性测试:test_ndim_after_operations方法验证张量经过加法运算和sum降维后,ndim属性值是否正确更新。


atomgit-bot
7月11日 评论:
7月11日 评论:
此处折叠了302条消息 查看更多
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#13674 [ commitID:e2292219 ] 已完成


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