多卡互联与集群网络
01-GPU 硬件架构与存储层次 列的四个指标里,最后一个「互联带宽」决定了多卡能扩展到什么程度。它不像算力那样容易被宣传数字误导,但对分布式训练效率的影响往往更大 —— 算力提升是线性的,互联带宽不够会让并行扩展效率断崖式下跌。
互联分两层:机内卡间(NVLink / NVSwitch)与跨机(InfiniBand / RoCE)。
机内卡间:PCIe 与 NVLink
PCIe:通用但不够用
PCIe 是 GPU 与 CPU、以及 GPU 之间最基本的通道。
| PCIe 版本 | 单向带宽(x16) | 双向带宽(x16) |
|---|---|---|
| PCIe 4.0 | 32 GB/s | 64 GB/s |
| PCIe 5.0 | 64 GB/s | 128 GB/s |
对大模型张量并行来说这远远不够 —— 每一层前向和反向都要做 AllReduce。即便是 PCIe 5.0 的 128 GB/s 双向带宽也不够用,这是后面所有并行策略设计的硬约束。
NVLink 代际
NVLink 绕开 PCIe,在 GPU 之间搭直通链路。
| NVLink 版本 | 架构 | 单链路 | 每 GPU 链路数 | 每 GPU 总带宽(双向) |
|---|---|---|---|---|
| NVLink 3.0 | Ampere (A100) | 50 GB/s | 12 | 600 GB/s |
| NVLink 4.0 | Hopper (H100) | 50 GB/s | 18 | 900 GB/s |
| NVLink 5.0 | Blackwell (B200) | 100 GB/s | 18 | 1,800 GB/s |
与 PCIe 5.0(双向 128 GB/s)对比的量级:
- NVLink 4.0 约是 PCIe 5.0 的 7 倍(900 / 128)
- NVLink 5.0 约是 PCIe 5.0 的 14 倍
这条比例直接决定工程准则:需要高频通信的并行策略必须限制在 NVLink 范围内。下面会把这句话量化。
NVSwitch:消除拓扑不对称
8 卡机器里如果每两张卡都直连,布线复杂度爆炸。NVSwitch 是交换芯片,所有 GPU 通过它互联,任意两卡之间都能跑满带宽。
它的价值可以精确表述为:消除拓扑不对称。张量并行每层都要 AllReduce,只要存在某些卡对之间带宽更低,整体性能就被最慢的那条链路拖累 —— 一个「平均值很好」的拓扑在这里没用。
查看实际拓扑
nvidia-smi topo -m # 卡间互联矩阵
nvidia-smi nvlink -s # NVLink 状态与带宽输出示例:
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7
GPU0 X NV18 NV18 NV18 NV18 NV18 NV18 NV18
GPU1 NV18 X NV18 NV18 NV18 NV18 NV18 NV18
...NV18 表示走 18 条 NVLink。如果矩阵里出现 PIX / PHB / SYS 这类标记,说明该卡对走的是 PCIe 或跨 NUMA,带宽低一个到两个量级 —— 这是「8 卡机器跑出 4 卡效果」的最常见技术原因。
典型的 8 卡节点
以 DGX H100 为例:
- 8 块 H100 通过 NVSwitch 全互联,任意两卡 900 GB/s
- 每台机器配 8 张 ConnectX-7 InfiniBand 网卡接入集群
机内通信远快于机间,这个带宽落差是并行策略分层的物理依据。
跨机:InfiniBand 与 RoCE
传统以太网的三条硬伤
普通 TCP/IP 以太网用在大模型训练上有三个问题:
| 问题 | 量级 |
|---|---|
| 延迟高 | 数据要过内核协议栈,端到端 50–100 微秒 |
| CPU 开销大 | 拷贝与协议处理占大量 CPU,挤占数据预处理 |
| 有效带宽受限 | 协议开销导致硬件是 100GbE 也打不满 |
梯度同步是每个 training step 都要做的高频操作,这三个问题会被直接放大成训练速度的拖累。
RDMA:绕过内核与 CPU
RDMA(Remote Direct Memory Access) 允许一台机器直接读写另一台机器的内存,完全绕过操作系统内核和 CPU。
它的三个特性:零拷贝(数据不在用户态与内核态间往返)、内核旁路(消除上下文切换)、微秒级延迟(端到端 1–2 微秒,比 TCP/IP 快 50–100 倍)。
InfiniBand
IB 原生支持 RDMA,是当前大规模 AI 训练集群最主流的方案。
| 标准 | 单链路速率 | 4x 带宽(常用配置) | 等效字节带宽 |
|---|---|---|---|
| HDR | 50 Gb/s | 200 Gb/s | 25 GB/s |
| NDR | 100 Gb/s | 400 Gb/s | 50 GB/s |
| XDR | 200 Gb/s | 800 Gb/s | 100 GB/s |
特点:协议栈效率极高;拥塞控制由硬件完成,大规模集合通信下表现稳定;需要专用交换机与网卡(HCA),成本高;NVIDIA(收购 Mellanox 后)是主要供应商,与 GPU 生态深度绑定。
RoCE:以太网上的 RDMA
让标准以太网硬件也支持 RDMA。
| 版本 | 协议层 | 路由能力 |
|---|---|---|
| RoCE v1 | 以太网二层 | 不可跨子网路由 |
| RoCE v2 | UDP/IP 三层 | 可路由,更通用 |
| 维度 | InfiniBand | RoCE v2 |
|---|---|---|
| 延迟 | 约 1 μs | 约 2–5 μs |
| 带宽 | 400–800 Gb/s | 100–400 Gb/s |
| 拥塞控制 | 硬件原生实现 | 依赖 ECN / PFC 配置 |
| 成本 | 高(专用设备) | 中(复用以太网基础设施) |
| 大规模稳定性 | 成熟 | 需要仔细调优 |
| 适用 | 大型 AI Lab、万卡集群 | 云厂商、中小规模集群 |
对上层训练代码完全透明 —— PyTorch / DeepSpeed 不需要区分,NCCL 会自动选择可用的传输方式。所以「换网络」这件事的成本主要在部署与运维,不在改代码。
一台 8 卡节点的两层互联:
┌──────────────── 机内:NVLink 域 ────────────────┐ ┌── 跨机 ──┐
│ [GPU0] ──┐ ┌── [GPU1] ┌── [GPU2] ┌─ [GPU3]│ │ │
│ │ │ │ │ │ │ 交换机 │
│ NVSwitch(交换芯片,任意两卡等带宽) │──▶│ IB / RoCE│
│ │ │ │ │ │ │ │
│ [GPU4] ──┘ └── [GPU5] └── [GPU6] └─ [GPU7]│ │ │
└──────────────────────────────────────────────────┘ └──────────┘
任意两卡 900 GB/s(H100) 50 GB/s(NDR)
└──────────── 差 18 倍 ────────────┘
这台带宽落差是并行策略分层的物理依据:需要高频通信的维度必须留在机内。
(图中未画:每卡对应一张 ConnectX 网卡接入集群。)为什么并行策略的形状由互联决定
这是本篇最实用的一条判据:通信频率越高的并行维度,必须放在带宽越高的互联层上。
张量并行为什么必须待在机内
张量并行在每一个 Transformer 层的每个子模块都要 AllReduce:
一层前向:输入 → Linear1 → AllReduce → 激活 → Linear2 → AllReduce → 输出
一层反向:梯度 → AllReduce → ... → AllReduce → ...一个 Transformer 层有 Attention 与 MLP 两个子模块,各自前向、反向各 1 次,合计 4 次 AllReduce。80 层的模型意味着 320 次 AllReduce。
按「每次搬 1 GB」估算:
| 走哪条路 | 单次耗时 | 320 次总计 |
|---|---|---|
| NVLink 4.0(900 GB/s) | 约 1.1 ms | 约 0.35 s |
| IB NDR(50 GB/s) | 约 20 ms | 约 6.4 s |
差距 18 倍。 这就是「TP 不跨机」的物理原因 —— 不是约定,是带宽算出来的。
数据并行的通信量
数据并行的 AllReduce 数据量等于模型梯度大小:
| 模型 | FP16 梯度 | 8 卡 Ring AllReduce 每卡通信量 | NVLink 4.0 耗时 |
|---|---|---|---|
| 7B | 14 GB | 约 28 GB | 约 31 ms |
| 70B | 140 GB | 约 280 GB | 约 311 ms |
70B 模型跨机走 IB(50 GB/s)时 AllReduce 约 5.6 秒 —— 这就是 ZeRO 系列要把梯度与参数切碎分片存储的动机:用更多次小通信替换一次大通信,让通信能与计算重叠(见 03-集合通信与 NCCL 的重叠一节)。
流水线并行的气泡
流水线并行按层切分到不同机器,机器间用点对点 Send/Recv 传激活值。通信量远小于 TP 和 DP,IB 完全够用。它跨机不是问题,代价在别处:
(
小结
| 并行维度 | 通信频率 | 通信量 | 该放在 |
|---|---|---|---|
| 张量并行 TP | 每层多次 | 激活大小 | NVLink(机内) |
| 数据并行 DP | 每步一次 | 梯度大小 | 机内优先,可跨机 |
| 流水线并行 PP | 每 micro-batch | 激活大小 | 可跨机(IB 够用) |
| 专家并行 EP | 每层 All-to-All | Token 路由量 | 视规模,通常需高带宽 |
这张表决定了任何大规模训练的并行度分配。它也是 NVLink 5.0「单域 72 卡」的意义所在(见 02-NVIDIA GPU 架构演进:Volta 到 Blackwell):把 TP 可用的范围从 8 卡扩到 72 卡,等于允许更大的模型不上跨机网络也能跑起张量并行。
通信频率越高,就必须待在带宽越高的一层:
并行维度 │ 通信频率 │ 通信量 │ 该放哪层
──────────────┼──────────────────────┼──────────────┼──────────────────────
TP 张量并行 │ 每层多次(一层 4 次) │ 激活大小 │ 必须机内 —— 跨机差 18 倍
DP 数据并行 │ 每步一次 │ 梯度大小 │ 机内优先,可跨机
PP 流水线 │ 每 micro-batch │ 激活大小 │ IB 够用,代价是气泡
EP 专家并行 │ 每层 All-to-All │ 路由 token 量 │ 视规模,通常需高带宽
──────────────┴──────────────────────┴──────────────┴──────────────────────
TP 那一行的「必须」不是约定,是按带宽算出来的:
80 层 × 4 次 = 320 次 AllReduce,每次 1 GB ⇒ NVLink 上 0.35 s、IB 上 6.4 s。网络侧排错清单
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| step 时间远超预期 | 通信带宽不足 | nccl-tests 测实际带宽 |
| GPU 利用率长期偏低 | 数据加载或 CPU 预处理拖后腿 | Nsight Systems 看 CPU-GPU 交互 |
| 不同卡速度不一致 | NVLink 拓扑不对称 | nvidia-smi topo -m 查是否出现 PIX/PHB/SYS |
| 多机扩展效率差 | IB 配置问题 | NCCL_DEBUG=INFO 看实际传输路径 |
| 带宽远低于理论值 | 算法选择不优或缓冲区过小 | NCCL_ALGO 强制切换算法对比 |
相关
- 01-GPU 硬件架构与存储层次 —— 互联带宽是评估一块卡的四个指标之一
- 02-NVIDIA GPU 架构演进:Volta 到 Blackwell —— NVLink 逐代带宽与单域规模的演进
- 03-集合通信与 NCCL —— 在这套硬件之上跑的通信库与原语
- 01-推理性能指标与瓶颈定位 —— 通信带宽如何影响 TTFT 与分布式推理
参考
- https://www.nvidia.com/en-us/data-center/nvlink/
- https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/
- https://www.infinibandta.org/
- https://resources.nvidia.com/en-us-tensor-core/gtc22-whitepaper-hopper
- https://caomaolufei.github.io/AIInfraGuide/guides/模块一-前置知识/communication/collective-communication-primer
YJ