Pull Request已成功合入, 合并人@ascend-robot
(感谢 limuan 的贡献)变更摘要
本 PR 主要针对 Ascend950(Atlas A5)扩展了 HCCL 通信对 uint64/fp64 数据类型的支持:在 ProcessGroupHCCL.cpp 的 checkSupportedDataType 中增加对 HCCL_DATA_TYPE_UINT64 和 HCCL_DATA_TYPE_FP64 的放行逻辑,并新增/适配分布式集合通信的测试用例。同时由于 PyTorch 缺少 UInt64 的加减/乘法算子,测试侧为 assertEqual 引入 use_equal 分支,改用 torch.equal 进行比较,并使用 numpy 计算 uint64 的期望结果。
主要改动
- 扩展
checkSupportedDataType的 dtype 校验逻辑:ProcessGroupHCCL.cpp中新增a5ExtraDataTypes集合,包含HCCL_DATA_TYPE_UINT64和HCCL_DATA_TYPE_FP64,并通过c10_npu::GetSocVersion() >= c10_npu::SocVersion::Ascend950判断仅在 Ascend950 及以上设备放行这两种类型。 - 测试比较方式适配
uint64:test_allreduce.py、test_reduce.py、test_reduce_scatter.py的_test_multiprocess新增use_equal参数,当为真时使用torch.equal而非assertEqual比较结果,规避UInt64缺少add/mulstub 导致的减法失败。 - 新增 uint64/fp64 分布式测试用例:在 allreduce、reduce、reduce_scatter、reduce_scatter_base、reduce_scatter_tensor 五类测试中新增
uint64与fp64的分布式用例,均使用@SupportedDevices(["Ascend950"])限制设备范围。 uint64期望结果改用 numpy 计算:由于 PyTorch 无法对UInt64执行集合通信所需的加法运算,测试中先将输入转为 numpy 计算期望值,再通过torch.from_numpy转回张量用于比较。


代码审查
审查结论
已逐一审查全部 6 个变更文件:
| 文件 | 结论 |
|---|---|
test/distributed/test_allreduce.py |
无问题(uint64 用例走 _construct_excepted_result 的 expected += inputs 分支,numpy 加法可用) |
test/distributed/test_reduce.py |
无问题(同上) |
test/distributed/test_reduce_scatter.py |
1 个 P1 问题 |
test/distributed/test_reduce_scatter_base.py |
1 个 P1 问题 |
test/distributed/test_reduce_scatter_tensor.py |
1 个 P1 问题 |
torch_npu/csrc/distributed/ProcessGroupHCCL.cpp |
无问题 |
核心结论:C++ 侧的改动正确且与代码库中已有的 c10_npu::GetSocVersion() >= c10_npu::SocVersion::Ascend950 用法、HCCL_DATA_TYPE_UINT64/FP64 枚举定义及 getHcclDataType 映射保持一致,未发现逻辑或安全缺陷。
但三个 reduce_scatter* 文件的 uint64 用例存在同一类确定性缺陷:把 numpy 数组列表传给了内部调用 .cpu() 的 _construct_excepted_result,在 Ascend950(唯一启用这些用例的设备)上必然抛出 AttributeError,导致新增的 uint64 reduce_scatter 功能实际未得到有效验证。
发现统计
- P0:0
- P1:3
- P2:0
- P3:0
整体风险判断:中。C++ 放行逻辑正确,但 uint64 reduce_scatter 的测试全部必然崩溃,属于该 PR 验证链路的关键缺口,需修复后才能验证新功能。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 6 |
| 🟡 建议 | 0 |
⛔ 需要修改


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.




【合入来源】
【修改方案】
PTA reduce相关算子在processgrouphccl.cpp中有数据类型的校验,暂时未包含hccl A5新支持的数据类型uint64和fp64:
修改processgrouphccl.cpp中的数据校验函数,针对A5添加支持的数据类型uint64和fp64:
【资料变更】
不涉及
【接口变更】
不涉及
【功能验证】
【CheckList】