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

4.2 多卡多机拓扑与 HCCL 配置

深入昇腾多卡多机的物理拓扑(HCCS/RoCE)、HCCL 的建连流程与拓扑感知机制,掌握 HCCL 配置与常见问题排查方法

HCCL 拓扑 RoCE 多机训练 昇腾

有了原语(4.1),下一个问题是:HCCL 到底怎么把我这几张卡组织成一个通信域? 这涉及物理拓扑、建连流程、拓扑感知三个层次。这一章把它们讲透,并给出实战排查清单。

📑 目录


1. 物理拓扑回顾:机内与跨机

回顾第 1 章的知识,昇腾多卡的物理拓扑是「两级」的:

单机(8 卡):
   NPU0 ──HCCS── NPU1 ──HCCS── ... ──NPU7     ← 机内高速互连

跨机:
   机A(8卡) ──RoCE── 机B(8卡) ──RoCE── ...    ← 跨机高速网络
  • 机内:HCCS,带宽高(显著高于 PCIe),延迟低。
  • 跨机:RoCE(RDMA over Converged Ethernet),无损网络,带宽通常低于机内。
  • CPU 通路:PCIe,用于控制指令与小数据。

这个「机内快、跨机慢」的差异,直接决定了分布式并行策略怎么设计。

2. HCCL 的建连流程

多卡要通信,必须先「建连」。HCCL 的建连流程大致如下:

1. 每个进程初始化自己的 HCCL 环境
2. 通过 rank 与 world size 确定通信域(Communicator)
3. 各卡之间互相探测并建立物理连接(HCCS / RoCE 通道)
4. 完成握手,HCCL 内部建立通信算法所需的数据结构
5. 开始执行通信原语

多机建连的难点:进程之间需要先「互相发现」。昇腾生态常用 rank 表(hostfile) 方式:把所有节点的 IP 与端口写进文件,每个进程读表后按 rank 建连。

# 一个 rank 表示例(示意格式,以官方文档为准)
device_ip 192.168.1.10:50210 192.168.1.10:50211 ...
device_ip 192.168.1.11:50210 ...

最常见的失败点:

  • 端口被防火墙挡住;
  • IP 写错(多机 IP 与配置不一致);
  • 建连超时(HCCL_CONNECT_TIMEOUT 太短)。

3. 拓扑感知:让通信走最优路径

拓扑感知(Topology Awareness) 是指 HCCL 尽量让通信走「最快的路」:

  • 同机内的 rank 之间 → 走 HCCS;
  • 不同机器的 rank 之间 → 走 RoCE;
  • 通信量大的 rank 尽量安排在同机内。

框架侧的配合:MindSpore 与 torch_npu 在生成通信 rank 序时,会尽量把高频协作的并行组(如 TP 组)放在同一台机器内,把跨机通信量压到最小。

为什么重要:如果张量并行(TP)的 8 个 rank 被分到 4 台机器上,那每一次 AllGather 都要跨机,通信开销会吃掉大部分算力收益。这也是「拓扑感知调度」在训练框架里越来越重要的原因。

4. HCCL 配置实战

以多机数据并行(DDP)为例,配置要素通常有:

# 1. 指定参与训练的所有节点 IP(rank 表)
# 2. 设置建连超时(多机环境建议调大)
export HCCL_CONNECT_TIMEOUT=1200

# 3. 需要时指定算法(Ring 默认)
# export HCCL_ALGO=ring

# 4. 打开日志便于排查(版本不同变量名不同,以官方文档为准)
export ASCEND_GLOBAL_LOG_LEVEL=1

配合框架启动(torch_npu 示例,详见 4.3):

torchrun --nproc_per_node=8 --nnodes=2 --node_rank=$RANK \
  --master_addr=$MASTER_ADDR --master_port=$MASTER_PORT train.py

要点:生产环境建议固定并验证:IP 可达性、端口连通、RDMA(RoCE)网卡就绪、HCCL 版本与 CANN 匹配。

5. 多机训练常见问题排查

按出现频率排一个「排查清单」:

现象可能原因排查方向
建连超时网络不通 / 端口被墙 / 超时太短检查 IP、端口、HCCL_CONNECT_TIMEOUT
卡在初始化rank 表 IP 与机器实际 IP 不符核对 ifconfig 与实际配置
性能异常低走了跨机路径 / RoCE 网卡未就绪检查拓扑分配与 RDMA 状态
偶发超时网络拥塞 / 交换机关联丢包检查无损网络配置(PFC/ECN)
版本类报错CANN/HCCL 与框架版本不匹配核对昇腾官方版本匹配表

通用建议:先单机 8 卡跑通,再加第二台机器;先小模型小通信量验证,再放大规模。逐级排查比「一次上大集群」高效得多。

6. 检查拓扑的实用命令

  • npu-smi info:查看 NPU 列表、温度、利用率(类似 nvidia-smi)。
  • npu-smi info -t topology(以驱动版本支持为准):查看板卡互联拓扑。
  • ibstatus / roce 相关命令:检查 RoCE 网卡状态与速率。
  • ip addr / ping:验证节点间网络连通性。

总结

  • 昇腾多卡拓扑 = 机内 HCCS(快)+ 跨机 RoCE(慢),并行策略要尽量把高频通信留在机内。
  • HCCL 建连靠 rank 表 + 网络探测,端口、IP、超时是最常见的坑。
  • 拓扑感知是分布式训练调优的关键:让 TP/PP 等高通信并行组尽量落在同机内。
  • 排查思路:先单机后多机、先小后大、逐级验证,并用官方版本匹配表兜底。

延伸阅读