已合并
fix: gate createSubHcclComm behind ROOTINFO_SUBCOMM_ENABLE env var #40486
fix: gate createSubHcclComm behind ROOTINFO_SUBCOMM_ENABLE env var #40486
已合并
limuan创建于 7月8日
limuan
limuan成员
7月8日

【合入来源】

【修改方案】

子通信域特性与故障快恢场景下的resume通信域特性冲突,暂时不支持resume子通信域,所以子通信域特性增加一个环境变量开关

【资料变更】

不涉及

【接口变更】

不涉及

【功能验证】

正常拉起训练
image.png

【CheckList】

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

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

变更摘要

此 PR 在 ProcessGroupHCCL::createHCCLCommOrigin 中引入环境变量 ROOTINFO_SUBCOMM_ENABLE 作为子通信器创建逻辑的守卫开关:仅当该环境变量显式设置为 "1" 时,才尝试通过 createHCCLCommSub 创建子 HCCL 通信域;否则直接跳过子通信器路径,进入基于 HcclRootInfo 的标准通信器创建流程。同时补充了相应的日志输出,便于定位子通信器创建成功与回退的情况。

主要改动

  • 引入环境变量守卫 ROOTINFO_SUBCOMM_ENABLE:在 createHCCLCommOrigin 函数中新增 getenv("ROOTINFO_SUBCOMM_ENABLE") 检查,将原有的 isSub 判断与 createHCCLCommSub 调用包裹在 env != nullptr && strcmp(env, "1") == 0 条件内,未设置该环境变量时不再执行子通信器创建逻辑。
  • 子通信器创建成功时新增警告日志:当 createHCCLCommSub 返回 true 时,通过 TORCH_NPU_HCCL_LOGW 输出提示,明确告知子通信器已创建但不支持 resume 功能。
  • 子通信器创建失败时回退日志保留:原有 TORCH_NPU_HCCL_LOGI 回退提示日志被移入环境变量守卫内部,仅在启用子通信器路径且创建失败时输出,语义更加准确。
likedislike
atomgit-bot
atomgit-bot
7月8日 评论:

代码审查

我已经彻底审查了这个 diff。让我总结一下分析结果。

审查分析

这个 diff 修改了 ProcessGroupHCCL::createHCCLCommOrigin 函数,将 createHCCLCommSub(isOrigin=true) 的调用路径用环境变量 ROOTINFO_SUBCOMM_ENABLE 保护起来。

变更逻辑分析:

  1. 旧行为:对于子进程组(global_ranks_in_group 非空),总是先尝试通过 createHCCLCommSub(isOrigin=true) 从缓存中获取 global comm 来创建子通信器;失败则回退到 rootinfo 路径。

  2. 新行为:只有当环境变量 ROOTINFO_SUBCOMM_ENABLE=1 时,才尝试 createHCCLCommSub(isOrigin=true) 路径;否则直接走 rootinfo 路径。

  3. 调用链createHCCLCommEx(第一层尝试 createHCCLCommSub(isOrigin=false))→ 失败后调用 createHCCLCommOrigin(第二层尝试,现在被 env var 控制)。

逐项排查:

  • getenv 的线程安全性:已有大量相同用法(如第 289、347、356 行等),且此处立即消费返回值,无实际风险。
  • strcmp 可用性:<cstdlib> 已包含,strcmp 通过传递包含在目标平台可用。
  • 边界条件:envnullptr 已正确检查;env 为空字符串 ""strcmp("", "1") != 0,正确走 rootinfo 回退。
  • rootinfo 回退路径对子组的正确性:使用 getSize()/getRank()(子组的 size/rank),通过 broadcastMasterID 广播 rootinfo,可正确创建子组通信器。
  • 无资源泄漏、无 use-after-free、无未初始化变量使用。

结论:此 diff 是一个干净的特性开关(feature gate)变更,未引入逻辑错误、安全漏洞、崩溃或回归风险。


审查总结

  • P0: 0
  • P1: 0
  • P2: 0
  • P3: 0

已审查文件:

  • torch_npu/csrc/distributed/ProcessGroupHCCL.cpp — 无问题

整体风险评估:低风险。 该变更是将子通信器的 createSubHcclComm 路径置于 ROOTINFO_SUBCOMM_ENABLE 环境变量开关之后,未启用时走成熟的 rootinfo 回退路径,不改变现有默认行为。

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

likedislike
ascend-robotascend-robot成员
7月8日 添加了label:ascend-cla/yes
此处折叠了279条消息 查看更多
ascend-robotascend-robot成员
7月9日 添加了label:approved
htchu成员
7月9日 评论:

/approve

likedislike
ascend-robotascend-robot成员
7月9日 添加了label:lgtm
ascend-robotascend-robot成员
7月9日 合入了pull request
ascend-robot
ascend-robot成员
7月9日 评论:
流水线 pytorch_gitcode_PR_multiVersion#12325 [ commitID:4c689663 ] 已完成
likedislike