昇腾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 等高通信并行组尽量落在同机内。
- 排查思路:先单机后多机、先小后大、逐级验证,并用官方版本匹配表兜底。