已合并
feat: add _group_start and _group_end bindings for ProcessGroupHCCL from v2.12.0 #43026
feat: add _group_start and _group_end bindings for ProcessGroupHCCL from v2.12.0 #43026
已合并
chansinging创建于 7月28日
chansinging
chansinging成员
7月28日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

【功能验证】

说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图

【CheckList】

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

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 chansinging 的贡献)
chansingingchansinging成员
7月28日 创建了 pull request,commit d6f41e8d
atomgit-bot
atomgit-bot
7月28日 评论:

变更摘要

此 PR 为 ProcessGroupHCCL 新增了 _group_start_group_end 两个 Python 绑定方法,使 HCCL 通信后端支持将多个集合通信操作合并为一个 group 执行。同时新增了对应的单元测试类 TestHcclGroupStartEnd,覆盖基本功能、边界异常以及 P2P send/recv 性能对比场景。

主要改动

  • 新增 _group_start / _group_end Python 绑定: 在 torch_npu/csrc/distributed/Init.cpp 中,通过 pybind11 将 ProcessGroupHCCL::groupStartProcessGroupHCCL::groupEnd 分别暴露为 _group_start_group_end,并均使用 py::call_guard<py::gil_scoped_release>() 释放 GIL。
  • 新增 TestHcclGroupStartEnd 测试类: 在 test/distributed/test_register_sharding.py 中新增测试类,包含 test_group_start_end_basic(验证 all_reduce 在 group 包裹下的正确性)、test_group_empty(空 group 操作)、test_group_end_without_start(未调用 _group_start 直接调用 _group_end 时预期抛出 RuntimeError)。
  • 新增 P2P 性能基准测试: 新增 test_group_send_recv_performance 测试,通过 _benchmark 辅助方法对比多组 send/recv 操作在是否使用 group start/end 包裹下的耗时,输出加速比数据。
likedislike
atomgit-bot
atomgit-bot
7月28日 评论:

代码审查

审查总结

我已完成对本次 diff 中全部 2 个变更文件 的审查:

文件 审查结论
torch_npu/csrc/distributed/Init.cpp ✅ 无问题 — _group_start / _group_end 的 pybind 绑定正确,签名匹配 void groupStart() / void groupEnd()py::call_guard<py::gil_scoped_release>() 与周围绑定风格一致
test/distributed/test_register_sharding.py ⚠️ 1 个 P3 建议 — _benchmark 方法使用 time.time() 进行性能测量

各优先级问题数量:

  • P0: 0
  • P1: 0
  • P2: 0
  • P3: 1(可选改进:将 time.time() 替换为 time.perf_counter()

整体风险判断:低。C++ 绑定实现正确,Python 测试覆盖了基本功能(group start/end 配合 all_reduce)、空 group、异常路径(end without start)以及 P2P 性能基准场景。测试逻辑合理,pairing 模式避免了死锁。唯一建议是将性能测量用的 time.time() 替换为单调高精度的 time.perf_counter(),属于可选改进,不影响正确性。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
ascend-robotascend-robot成员
7月28日 添加了label:ascend-cla/yes
此处折叠了180条消息 查看更多
ascend-robotascend-robot成员
25 天前 添加了label:approved
chansingingchansinging成员
25 天前 关联了issue:[RFC]: ProcessGroupHCCL _group_start / _group_end PyBind11 绑定设计
ascend-robotascend-robot成员
25 天前 删除了label:needs-issue
ascend-robotascend-robot成员
25 天前 合入了pull request
ascend-robot
ascend-robot成员
25 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13911 [ commitID:74e47d03 ] 运行失败
likedislike