已合并
test:This PR adds missing test cases for torch._utils._unflatten_dense_tensors, as there are currently no community-provided tests for this function. #42051
创建于 7月18日
test:This PR adds missing test cases for torch._utils._unflatten_dense_tensors, as there are currently no community-provided tests for this function. #42051
已合并
从已删除 :test_unflatten_dense_tensors_v2.12.0合入到Ascend/pytorchv2.12.0
Pull Request已成功合入, 合并人@ascend-robot
(感谢 的贡献)ascend-robot
7月18日 评论:
7月18日 评论:
atomgit-bot
7月18日 评论:
7月18日 评论:
变更摘要
该 PR 为 PyTorch 内部工具函数 torch._utils._unflatten_dense_tensors 新增了 NPU 设备上的 Python 单元测试。PyTorch 社区此前仅在 C++ 层(test/cpp/api/tensor_flatten.cpp)有相关测试,Python 层面无任何验证用例。本次变更新增文件 test/test_unflatten_dense_tensors.py,包含 8 个测试用例,通过 torch.accelerator.current_accelerator() 自动适配设备,覆盖展平-还原往返操作、多形状/多 dtype/空张量边界、tuple 输入及大数量压力场景。
主要改动
- 新增测试文件
test/test_unflatten_dense_tensors.py:创建了包含TestUnflattenDenseTensors类的独立测试模块,继承自 PyTorch 标准TestCase,共 128 行代码。 - 设备自动适配机制:通过
setUp中调用torch.accelerator.current_accelerator()获取当前加速器类型,_to_device辅助方法将张量迁移至对应设备,无需硬编码 NPU 设备名。 - 8 个覆盖多场景的测试用例:包括
test_round_trip_basic往返验证、test_single_tensor单张量、test_multiple_tensors_different_sizes多维不同形状、test_empty_tensor_in_list与test_all_empty_tensors空张量边界、test_different_dtypes多 dtype(float32/float16/int32)、test_large_num_tensors50 张量压力及test_tuple_input元组输入兼容性测试。 - 与
_flatten_dense_tensors配对验证:每个测试用例均通过torch._utils._flatten_dense_tensors展平后,再用torch._utils._unflatten_dense_tensors还原,通过self.assertEqual校验形状、元素数量和数值一致性。


atomgit-bot
7月18日 评论:
7月18日 评论:
代码审查
经过全面审查,该测试文件 test/test_unflatten_dense_tensors.py 没有发现任何实际问题。
审查结论
文件:test/test_unflatten_dense_tensors.py — 无问题。
该文件是一个新增的 NPU 设备回归测试文件,包含 8 个测试用例,覆盖了 torch._utils._unflatten_dense_tensors / torch._utils._flatten_dense_tensors 的往返正确性、多张量、空张量边界、多种 dtype、大批量张量压力、以及 tuple 输入兼容性等场景。逐项核查如下:
- 设备选择逻辑(第 16–17 行):
torch.accelerator.current_accelerator()返回None时回退到"cpu",有加速器时使用acc.type,逻辑正确且健壮。 _to_device方法(第 19–20 行):正确地将张量迁移到目标设备,CPU 回退场景下t.to("cpu")为无操作拷贝。_flatten_dense_tensors/_unflatten_dense_tensors调用签名:所有测试均使用一致的往返模式flat = _flatten_dense_tensors(tensors)→result = _unflatten_dense_tensors(flat, tensors),签名正确。- dtype 一致性:每个测试内的张量均使用相同 dtype(float32 或显式指定),满足
_flatten_dense_tensors要求所有张量 dtype 一致的合约。 - 空张量处理:
torch.tensor([])创建 shape(0,)的 float32 张量,与其他同测试内的 float32 张量 dtype 一致;NPU 自定义 kernel (FlattenDenseTensorsKernelNpu.cpp) 对空张量的.view({-1})和at::cat均能正确处理。 - NPU 规范遵循:导入顺序正确(
torch→torch.testing._internal.common_utils),不依赖torch_npu,使用self.assert*断言,无print/try-except,注释精简英文。
本次变更风险判断:低风险。 这是一个纯粹的测试文件新增,不涉及任何生产代码变更。测试逻辑正确,覆盖全面,无安全性、可靠性或回归风险。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


此处折叠了103条消息 查看更多
梁松伟
7月23日 评论:
7月23日 评论:
/approve


7月23日 添加了label:approvedlgtm
7月23日 合入了pull request
ascend-robot
7月23日 评论:
7月23日 评论:
流水线 pytorch_gitcode_PR_multiVersion#13031 [ commitID:1ff5eb34 ] 已完成



【合入来源】
issue任务地址:https://gitcode.com/Ascend/pytorch/issues/2932
【修改方案】
为
torch._utils._unflatten_dense_tensors新增 NPU 设备回归测试用例,放置在test/test_unflatten_dense_tensors.py。test/cpp/api/tensor_flatten.cpp),Python 层面无任何测试用例,且缺少 NPU 设备上的运行验证。TestCase框架,通过torch.accelerator.current_accelerator()自动获取 NPU 设备并完成张量迁移,覆盖以下维度:torch→torch.testing._internal.common_utils,不依赖torch_npu,使用self.assert*断言,无print/try-except,注释精简英文。【资料变更】
不涉及。
torch._utils._unflatten_dense_tensors为 PyTorch 内部工具函数(_前缀),不属于公开文档覆盖范围。【接口变更】
不涉及。仅新增测试文件,无对外接口变更。
【功能验证】
测试场景:在 NPU 设备上验证
torch._utils._unflatten_dense_tensors将展平 1D 张量按目标形状还原为多个张量的功能正确性。2.7.1
执行命令
结果
2.9.0
执行命令
结果
2.11.0
执行命令
结果
2.12.0
执行命令
结果
master
执行命令
结果
【CheckList】