已合并
A5 dtype: make checkSupportedDataType accept uint64/fp64 on Ascend950+ #44705
limuan创建于 3 天前
A5 dtype: make checkSupportedDataType accept uint64/fp64 on Ascend950+ #44705
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 limuan 的贡献)atomgit-bot
3 天前 评论:
3 天前 评论:
变更摘要
本 PR 主要扩展了分布式集合通信对数据类型的支持:在 ProcessGroupHCCL.cpp 的 checkSupportedDataType 中,当设备为 Ascend950(Atlas A5)及以上时,额外放行 uint64(HCCL_DATA_TYPE_UINT64)与 fp64(HCCL_DATA_TYPE_FP64)两种数据类型;同时在多个分布式测试文件中新增对应测试用例,并调整断言逻辑以兼容 uint64。
主要改动
- 扩展
checkSupportedDataType的类型检查逻辑: 在torch_npu/csrc/distributed/ProcessGroupHCCL.cpp中新增a5ExtraDataTypes集合,并通过c10_npu::GetSocVersion() >= c10_npu::SocVersion::Ascend950判断设备版本,使 Ascend950 及以上设备支持HCCL_DATA_TYPE_UINT64和HCCL_DATA_TYPE_FP64。 - 调整测试断言方式以兼容
uint64: 在test_allreduce.py、test_reduce.py、test_reduce_scatter.py的_test_multiprocess中新增use_equal参数,对uint64使用torch.equal替代assertEqual,避免因 torch 缺少UInt64加减法算子导致的校验失败。 - 新增
uint64/fp64集合通信测试用例: 在test_allreduce.py、test_reduce.py、test_reduce_scatter.py、test_reduce_scatter_base.py、test_reduce_scatter_tensor.py中新增由@SupportedDevices(["Ascend950"])限定的测试,覆盖all_reduce、reduce、reduce_scatter、reduce_scatter_base、reduce_scatter_tensor。 uint64期望结果改用numpy计算: 各测试对uint64使用非负输入区间,并通过numpy计算归约期望值后再torch.from_numpy转回张量,规避 torch 对UInt64算术支持不足的问题。


ascend-robot
3 天前 评论:
3 天前 评论:
atomgit-bot
3 天前 评论:
3 天前 评论:
代码审查
已完成对全部 6 个变更文件的逐一审查。
审查结论汇总
各变更文件审查结果:
test/distributed/test_allreduce.py— 无问题(uint64 用例通过exp_input.numpy()走expected += inputs路径,正确)。test/distributed/test_reduce.py— 无问题(同上,uint64 用例正确)。test/distributed/test_reduce_scatter.py— 发现 1 处问题(P2)。test/distributed/test_reduce_scatter_base.py— 发现 1 处问题(P2)。test/distributed/test_reduce_scatter_tensor.py— 发现 1 处问题(P2)。torch_npu/csrc/distributed/ProcessGroupHCCL.cpp— 无问题(>= SocVersion::Ascend950与仓库既有模式一致,getHcclDataType已映射UInt64→HCCL_DATA_TYPE_UINT64、kDouble→HCCL_DATA_TYPE_FP64,逻辑正确)。
问题数量按优先级:
- P0:0
- P1:0
- P2:3
- P3:0
整体风险判断: 变更的 C++ 核心逻辑正确、与既有 SocVersion 判定模式一致;但三个 reduce_scatter 系列新增的 uint64 用例存在相同的确定性缺陷——把 numpy 数组传给了面向 torch 张量的 _construct_excepted_result(内部调用 .cpu()),在 Ascend950 上执行时会抛 AttributeError 而必然失败。该问题只影响测试代码、会在目标硬件上「响亮地失败」而非静默误判,因此定为 P2;修复方式统一为直接用 numpy 计算 inp * world_size 的期望值。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 6 |
💬 仅评论


3 天前 添加了label:ascend-cla/yes
此处折叠了50条消息 查看更多
2 天前 添加了label:approvedlgtm
2 天前 合入了pull request
ascend-robot
2 天前 评论:
2 天前 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


ascend-robot
2 天前 评论:
2 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14179 [ commitID:886fd97b ] 已完成


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