状态(Status): Reviewing 作者(Authors): @wjlflyer 创建日期(Created): 2026-05-07 更新日期(Updated): 2026-05-07 相关 Issue/PR: https://gitcode.com/Ascend/pytorch/pull/34151
在torch_npu中创建通信域时,如果没有使用rank_table的话,会通过底层hccl的协商模式,也就是HcclCommInitRootInfoConfig接口创建通信域。这里有一个优化点,如果已经创建过全局通信域的话,此时可以基于全局通信域来创建子通信域,有助于提升初始化通信域的效率。
在盘古现场进行模型训练时,通过HCCL协商模式初始化通信域阶段耗时较长,客户的脚本中会提前创建全局通信域。此时如果通过创建子通信域方式,有助于提升性能。
目标: 1、在基于HCCL协商模式初始化通信域时,支持创建子通信域,从而降低初始化阶段耗时,提升性能。
1、用户和torch_npu之间交互的用例 描述:用户通过torch_npu创建通信域
2、torch_npu和hccl通信库交互的用例 描述:torch_npu通过hccl通信库可以基于协商模式初始化通信域,或创建子通信域。
ProcessGroupHCCL中现有创建通信域的流程如下: createHCCLComm是创建通信域方法,内部会有两个分支,分别基于RankTable方式创建(createHCCLCommEx),或基于协商模式创建(createHCCLCommOrigin);
基于RankTable方式创建,createHCCLCommEx的内部流程如下: 基于RankTable方式创建中,会判断当前是否是创建全局通信域,全局通信域走createGlobalHcclComm,子通信域走createSubHcclComm; 其中问题是,只有在RankTable方式中,才会走创建子通信域,现在我们希望基于协商模式也能走创建子通信域。
设计新的流程图如下: 1、定义一个新的方法createHCCLCommSub,封装创建子通信域的逻辑; 2、createHCCLComm方法中,先判断是否创建子通信域,如果是则走createHCCLCommSub,如果不是的话,再走RankTable方式创建(createHCCLCommEx),或协商模式创建(createHCCLCommOrigin)。
不涉及
安全隐私:本提案不涉及安全隐私内容 可测试性:在代码的分支逻辑中添加debug/info日志,可以确认代码的分支是否符合预期。
开发环境:开发者需要基于昇腾硬件环境,安装cann驱动,以及torch_npu+pytorch等套件; 开发约束:开发者需要基于Python语言进行开发;
bool ProcessGroupHCCL::createHCCLCommSub( const std::string& devicesKey, const std::vector<at::Device>& devices, HcclCommType commType, HcclCommConfig* commConfig, std::vector<std::shared_ptr<HCCLComm>> &hcclComms, std::vector<c10_npu::NPUStream> &streamVal, int p2pRank);
输出参数:
该特性不需要额外的配置参数,使用时注意以下几点: 1、用户未配置rank table文件,则torch_npu不会走HcclCommInitClusterInfoConfig方式初始化通信域; 2、先基于全局通信域执行集合通信,此时torch_npu会通过HcclCommInitRootInfoConfig接口,基于协商模式创建全局通信域; 3、再基于子通信域执行集合佟铁鑫,则此时torch_npu会通过HcclCreateSubCommConfig接口创建子通信域;
1、在基于协商模式创建通信域时,执行的是hccl通信库的HcclCommInitRootInfoConfig方法,该方法内部目前有内置逻辑,只有在3w卡以上规模时,才会生效协商模式,这个阈值较高,希望能开放给用户配置,该问题单独给hccl通信库提需求解决。
欢迎加入社区,感谢您对社区的贡献 🎉!
状态(Status): Reviewing
作者(Authors): @wjlflyer
创建日期(Created): 2026-05-07
更新日期(Updated): 2026-05-07
相关 Issue/PR: https://gitcode.com/Ascend/pytorch/pull/34151
1. 概述
1.1 简介
在torch_npu中创建通信域时,如果没有使用rank_table的话,会通过底层hccl的协商模式,也就是HcclCommInitRootInfoConfig接口创建通信域。这里有一个优化点,如果已经创建过全局通信域的话,此时可以基于全局通信域来创建子通信域,有助于提升初始化通信域的效率。
1.2 动机
在盘古现场进行模型训练时,通过HCCL协商模式初始化通信域阶段耗时较长,客户的脚本中会提前创建全局通信域。此时如果通过创建子通信域方式,有助于提升性能。
1.3 目标
目标:
1、在基于HCCL协商模式初始化通信域时,支持创建子通信域,从而降低初始化阶段耗时,提升性能。
2. 用例分析
1、用户和torch_npu之间交互的用例

描述:用户通过torch_npu创建通信域
2、torch_npu和hccl通信库交互的用例

描述:torch_npu通过hccl通信库可以基于协商模式初始化通信域,或创建子通信域。
3. 方案设计
3.1 总体方案
现有流程
ProcessGroupHCCL中现有创建通信域的流程如下:

createHCCLComm是创建通信域方法,内部会有两个分支,分别基于RankTable方式创建(createHCCLCommEx),或基于协商模式创建(createHCCLCommOrigin);
基于RankTable方式创建,createHCCLCommEx的内部流程如下:

基于RankTable方式创建中,会判断当前是否是创建全局通信域,全局通信域走createGlobalHcclComm,子通信域走createSubHcclComm;
其中问题是,只有在RankTable方式中,才会走创建子通信域,现在我们希望基于协商模式也能走创建子通信域。
新的流程
设计新的流程图如下:

1、定义一个新的方法createHCCLCommSub,封装创建子通信域的逻辑;
2、createHCCLComm方法中,先判断是否创建子通信域,如果是则走createHCCLCommSub,如果不是的话,再走RankTable方式创建(createHCCLCommEx),或协商模式创建(createHCCLCommOrigin)。
3.2 技术选型(可选)
不涉及
3.3 安全隐私与DFX设计
安全隐私:本提案不涉及安全隐私内容
可测试性:在代码的分支逻辑中添加debug/info日志,可以确认代码的分支是否符合预期。
3.4 编程与调用设计
3.4.1 编程模型基本设计
开发环境:开发者需要基于昇腾硬件环境,安装cann驱动,以及torch_npu+pytorch等套件;
开发约束:开发者需要基于Python语言进行开发;
3.4.2 接口定义与设计
3.4.2.1 ProcessGroupHCCL::createHCCLCommSub
输入参数:
输出参数:
3.4.3 使用说明
该特性不需要额外的配置参数,使用时注意以下几点:
1、用户未配置rank table文件,则torch_npu不会走HcclCommInitClusterInfoConfig方式初始化通信域;
2、先基于全局通信域执行集合通信,此时torch_npu会通过HcclCommInitRootInfoConfig接口,基于协商模式创建全局通信域;
3、再基于子通信域执行集合佟铁鑫,则此时torch_npu会通过HcclCreateSubCommConfig接口创建子通信域;
4. 测试设计
5. 缺点与风险 (可选)
不涉及
6. 现有技术 (可选)
不涉及
7. 未解决问题 (可选)
1、在基于协商模式创建通信域时,执行的是hccl通信库的HcclCommInitRootInfoConfig方法,该方法内部目前有内置逻辑,只有在3w卡以上规模时,才会生效协商模式,这个阈值较高,希望能开放给用户配置,该问题单独给hccl通信库提需求解决。
欢迎加入社区,感谢您对社区的贡献 🎉!