已合并
A5 dtype: make checkSupportedDataType accept uint64/fp64 on Ascend950+ #44706
A5 dtype: make checkSupportedDataType accept uint64/fp64 on Ascend950+ #44706
已合并
limuan创建于 7 天前
limuan
limuan成员
7 天前

【合入来源】

【修改方案】

PTA reduce相关算子在processgrouphccl.cpp中有数据类型的校验,暂时未包含hccl A5新支持的数据类型uint64和fp64:
修改processgrouphccl.cpp中的数据校验函数,针对A5添加支持的数据类型uint64和fp64:

【资料变更】

不涉及

【接口变更】

不涉及

【功能验证】

image.png
image.png
image.png
image.png
image.png

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 limuan 的贡献)
limuanlimuan成员
7 天前 创建了 pull request,commit 9ae94e93
atomgit-bot
atomgit-bot
7 天前 评论:

变更摘要

本 PR 主要针对 Ascend950(Atlas A5)扩展了 HCCL 通信对 uint64/fp64 数据类型的支持:在 ProcessGroupHCCL.cppcheckSupportedDataType 中增加对 HCCL_DATA_TYPE_UINT64HCCL_DATA_TYPE_FP64 的放行逻辑,并新增/适配分布式集合通信的测试用例。同时由于 PyTorch 缺少 UInt64 的加减/乘法算子,测试侧为 assertEqual 引入 use_equal 分支,改用 torch.equal 进行比较,并使用 numpy 计算 uint64 的期望结果。

主要改动

  • 扩展 checkSupportedDataType 的 dtype 校验逻辑ProcessGroupHCCL.cpp 中新增 a5ExtraDataTypes 集合,包含 HCCL_DATA_TYPE_UINT64HCCL_DATA_TYPE_FP64,并通过 c10_npu::GetSocVersion() >= c10_npu::SocVersion::Ascend950 判断仅在 Ascend950 及以上设备放行这两种类型。
  • 测试比较方式适配 uint64test_allreduce.pytest_reduce.pytest_reduce_scatter.py_test_multiprocess 新增 use_equal 参数,当为真时使用 torch.equal 而非 assertEqual 比较结果,规避 UInt64 缺少 add/mul stub 导致的减法失败。
  • 新增 uint64/fp64 分布式测试用例:在 allreduce、reduce、reduce_scatter、reduce_scatter_base、reduce_scatter_tensor 五类测试中新增 uint64fp64 的分布式用例,均使用 @SupportedDevices(["Ascend950"]) 限制设备范围。
  • uint64 期望结果改用 numpy 计算:由于 PyTorch 无法对 UInt64 执行集合通信所需的加法运算,测试中先将输入转为 numpy 计算期望值,再通过 torch.from_numpy 转回张量用于比较。
likedislike
atomgit-bot
atomgit-bot
7 天前 评论:

代码审查

审查结论

已逐一审查全部 6 个变更文件:

文件 结论
test/distributed/test_allreduce.py 无问题(uint64 用例走 _construct_excepted_resultexpected += 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

⛔ 需要修改

likedislike
ascend-robotascend-robot成员
7 天前 添加了label:ascend-cla/yes
此处折叠了46条消息 查看更多
renyujin成员
6 天前 评论:

/lgtm
/approve

likedislike
ascend-robotascend-robot成员
6 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
6 天前 合入了pull request
ascend-robot
ascend-robot成员
6 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
6 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14180 [ commitID:978af4fa ] 已完成
likedislike