跳到主要内容
昇腾AI芯片与算子开发

4.1 HCCL 通信原语与通信算法

系统讲解 HCCL 的通信原语(AllReduce/AllGather/ReduceScatter/AlltoAll)、Ring 等通信算法,以及 HCCL 与 NCCL 的对照关系,建立昇腾集合通信的基础认知

HCCL AllReduce Ring 集合通信 分布式训练

分布式训练的本质,是「让 N 张卡像一张卡一样协同工作」——而协同的关键就是集合通信。昇腾生态里负责这件事的库叫 HCCL。这一章先讲清楚它最核心的部分:通信原语和通信算法。

📑 目录


1. HCCL 是什么

HCCL(Huawei Collective Communication Library,华为集合通信库) 是昇腾生态的集合通信库:

  • 提供多卡、多机之间的集合通信原语(AllReduce、AllGather 等);
  • 屏蔽底层差异:机内走 HCCS,跨机走 RoCE,开发者无需关心具体路径;
  • 是昇腾上一切分布式训练(数据并行、张量并行、流水线并行)的通信底座。

它在昇腾软件栈中的位置:

训练框架(MindSpore / torch_npu)
        │ 调用
        ▼
      HCCL ──► HCCS(机内)/ RoCE(跨机)──► 昇腾芯片

2. 通信原语全景

HCCL 的核心原语(与 NCCL 几乎完全对应):

原语语义典型用途
AllReduce所有卡把各自数据归约后,每张卡都拿到完整结果数据并行梯度同步(DDP)
AllGather每张卡把自己的分片广播出去,所有卡拼出完整数据张量并行前向(TP)
ReduceScatter归约后按卡分发分片,每张卡只拿到自己那份ZeRO / 梯度分片同步
AlltoAll每张卡给其他每张卡发一份数据(全交换)MoE 的 token 路由分发
Reduce归约到指定单卡少数同步场景
Broadcast把一张卡的数据广播到所有卡模型参数广播、加载权重

记忆方式:名字里带「All」的是全体都拿到;不带「All」的(Reduce/Broadcast)是单卡方向。

3. AllReduce 与 Ring 算法

AllReduce 是数据并行里出现频率最高的原语(每步梯度同步一次),值得单独讲透。

朴素做法:把 N 张卡的梯度归约到一张卡,再广播出去——通信量随卡数线性增长,且单卡成为瓶颈。

Ring AllReduce:把 N 张卡排成一个环,分两步完成:

第一步:ReduceScatter(环上逐卡传递并累加)
  step1: 卡0→卡1: chunk0(卡1累加)
  step2: 卡1→卡2: chunk0(卡2累加)...
  经过 N-1 步,每张卡都持有某一个 chunk 的完整归约结果

第二步:AllGather(把归约好的 chunk 沿环扩散)
  反向再转 N-1 步,最终每张卡都持有完整归约结果

Ring 的妙处:每张卡只需与相邻卡通信,总通信量不随卡数爆炸式增长,因此在多卡/多机场景下是默认选择。

代价:需要 2×(N-1) 步,链路越长延迟越高——所以通信量小时(小模型)反而可能不如 Tree。

4. 其他算法的取舍

算法思路适合场景
Ring环状流水归约+广播大通信量、卡数多(默认)
Tree(二叉树)树状归约,并行度高通信量小、卡数少
分级/分层机内机外分层次归约多机混合拓扑(机内 HCCS 快)

关键认知:算法选型本质是「通信量 vs 并行度」的权衡,还要结合硬件拓扑(机内 HCCS 带宽远高于跨机 RoCE)。现代框架通常按数据量自动选择。

5. HCCL 与 NCCL 的对照

维度NCCL(NVIDIA)HCCL(昇腾)
角色GPU 集合通信库NPU 集合通信库
机内路径NVLinkHCCS
跨机路径InfiniBand / RoCERoCE
原语集合AllReduce/AllGather/…同名原语,语义一致
默认算法Ring/Tree 自动选择Ring/Tree 等
与框架集成torch.distributed(‘nccl’)torch.distributed(‘hccl’)

结论:NCCL 的知识体系几乎可以平移到 HCCL——原语、算法、分布式范式全部通用,差异主要在硬件路径与配置上。

6. HCCL 常见环境变量

实际运维中,HCCL 的调试往往从环境变量入手(版本不同略有差异,以官方文档为准):

  • HCCL_CONNECT_TIMEOUT:建连超时时间(多机训练最常踩的坑——网卡没就绪导致超时)。
  • HCCL_ALGO / 算法选择相关变量:强制使用 Ring 或 Tree。
  • HCCL_INTRA_* / 机内机外通道相关:控制机内(HCCS)与跨机(RoCE)通道的分配。
  • 日志相关:ASCEND_GLOBAL_LOG_LEVEL 等控制昇腾日志级别,排查通信问题时调高。

提示:HCCL 环境变量在不同 CANN 版本中命名与行为有差异,使用前务必核对当前版本的官方文档。

总结

  • HCCL 是昇腾的集合通信库,原语与 NCCL 完全对应:AllReduce / AllGather / ReduceScatter / AlltoAll 是四大主力。
  • Ring AllReduce 通过「ReduceScatter + AllGather」两阶段实现高效归约,是大通信量场景的默认算法。
  • HCCL 屏蔽了 HCCS(机内)与 RoCE(跨机)的差异,开发者关注算法与配置即可。
  • 排查通信问题先从环境变量入手(建连超时、算法选择、日志级别)。

延伸阅读