1.1 通信拓扑入门

大模型训练离不开多卡协作,而多卡协作的效率很大程度上取决于卡与卡之间”搬数据”的速度。本文是一篇轻量级入门,帮你建立通信拓扑的基本概念和直觉,为后续深入分布式训练打下基础。

📑 目录


1. 为什么 AI Infra 工程师需要懂通信拓扑

一句话说清:当模型大到一张卡装不下时,你必须让多张卡一起干活,而整体效率不仅取决于每张卡算得多快,还取决于卡与卡之间传数据的速度。

打个比方:一组人合作搬砖盖房子,效率不仅看每个人搬砖的速度,还要看人与人之间传递砖块有多快。如果两个人面对面递砖,那很快;如果隔着一条马路还要等红绿灯,那再能干的人也得干等着。GPU 之间的通信就是这个”传砖”的过程——通信拓扑决定了谁和谁之间有”直达通道”,谁和谁之间要”绕路”。


2. GPU 之间怎么连接:三种方式

2.1 PCIe:基础互联

PCIe 是 GPU 与 CPU 之间、以及 GPU 之间最基本的连接通道。可以把它理解为城市里的普通马路——什么车都能跑,但车道有限,还有红绿灯。

目前数据中心常见的是 PCIe 5.0,单向带宽约 64 GB/s(x16 通道)。这个速度用来传模型参数和梯度其实捉襟见肘,尤其是需要频繁通信的张量并行场景。

2.2 NVLink:GPU 专属高速通道

NVLink 是 NVIDIA 专门为 GPU 之间通信设计的高速链路。它不走 PCIe 总线,而是在 GPU 之间搭了一条”专用高速公路”——车道多、限速高、没有红绿灯。

关键数字:

  • H100 (NVLink 4.0):每 GPU 总带宽 900 GB/s,是 PCIe 5.0 的约 14 倍
  • B200 (NVLink 5.0):每 GPU 总带宽 1800 GB/s,是 PCIe 5.0 的约 28 倍

这个数量级的差距,直接决定了一条重要的工程准则:高频通信的并行策略必须限制在 NVLink 互联的范围内。

2.3 NVSwitch:全连接交换

一台 8 卡 GPU 服务器中,如果每两张卡都用 NVLink 直连,布线会非常复杂。NVSwitch 就是一个高速公路立交枢纽——所有 GPU 通过它实现互联,任意两张卡之间都能跑满带宽。

1
2
3
4
5
6
7
8
         ┌──────────────────────────────────┐
│ NVSwitch x4 │
│ (全交叉互联交换网络) │
└──┬───┬───┬───┬───┬───┬───┬───┬──┘
│ │ │ │ │ │ │ │
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7

任意两卡间带宽:900 GB/s (H100 NVLink 4.0)

NVSwitch 的核心价值:无论哪两张卡通信,带宽都是满速的,不存在”有的快有的慢”的拓扑瓶颈。

2.4 带宽对比总结

连接方式 典型带宽 相对 PCIe 5.0 特点
PCIe 5.0 (x16) 64 GB/s 1x 通用接口,什么设备都能连
NVLink 4.0 (H100) 900 GB/s ~14x GPU 专属,高带宽低延迟
NVLink 5.0 (B200) 1800 GB/s ~28x 最新一代,带宽翻倍
NVSwitch (H100) 任意卡对 900 GB/s ~14x 全连接,消除拓扑瓶颈

3. 机器之间怎么连接

单机 8 卡是 AI 训练的基本单元,但大模型训练通常需要几十到上百台机器组成集群。此时,机器之间的网络互联就成了关键瓶颈。

3.1 InfiniBand:AI 集群的主流选择

InfiniBand(简称 IB)是当前大规模 AI 训练集群中最主流的网络方案。用白话说,它就是专门为”机器之间搬大量数据”设计的高性能网络——延迟低到微秒级,带宽远超普通以太网。

IB 的核心技术叫 RDMA(远程直接内存访问),允许一台机器直接读写另一台机器的内存,绕过操作系统内核,省去了大量中间环节。

关键数字:

  • NDR 400Gb/s(约 50 GB/s):当前主流
  • XDR 800Gb/s(约 100 GB/s):最新一代

3.2 RoCE:以太网上的替代方案

RoCE(RDMA over Converged Ethernet)让普通以太网硬件也能支持 RDMA。它的优势是成本较低,可以复用已有的以太网基础设施;劣势是延迟和大规模稳定性不如 InfiniBand。

3.3 对比总结

维度 InfiniBand (NDR) RoCE v2 传统以太网 (TCP)
带宽 400 Gb/s (50 GB/s) 100-400 Gb/s 10-100 Gb/s
延迟 ~1 us ~2-5 us ~50-100 us
CPU 开销 极低 (RDMA) 低 (RDMA) 高 (内核协议栈)
成本 高(专用设备)
典型用户 大型 AI Lab 云厂商、中小集群 通用场景

4. 集合通信:多卡之间怎么交换数据

多张 GPU 之间的数据交换不是随意乱传的,而是遵循一套标准化的操作模式,叫做”集合通信原语”。你可以把它理解成多卡之间约定好的”数据搬运动作”——每个动作有固定的输入输出模式。

这里介绍分布式训练中最常用的三种。

4.1 AllReduce:所有人汇总,所有人拿到结果

用途:数据并行训练中同步梯度。每张卡算出自己的梯度,AllReduce 后每张卡都得到相同的汇总梯度。

1
2
3
4
5
操作前:            AllReduce(sum) 后:
GPU0: [1, 2] GPU0: [10, 20]
GPU1: [2, 4] GPU1: [10, 20]
GPU2: [3, 6] GPU2: [10, 20]
GPU3: [4, 8] GPU3: [10, 20]

4.2 AllGather:每人拿一片,最后人人拿全部

用途:ZeRO-3 训练中,前向传播前收集分布在各卡上的模型参数。

1
2
3
4
5
操作前:       AllGather 后:
GPU0: [A] GPU0: [A, B, C, D]
GPU1: [B] GPU1: [A, B, C, D]
GPU2: [C] GPU2: [A, B, C, D]
GPU3: [D] GPU3: [A, B, C, D]

4.3 ReduceScatter:先汇总再切片分配

用途:ZeRO 系列中,将归约后的梯度分片存储到各卡,节省显存。

1
2
3
4
5
操作前:              ReduceScatter(sum) 后:
GPU0: [1, 2, 3, 4] GPU0: [10] (第0片的汇总)
GPU1: [2, 3, 4, 5] GPU1: [13] (第1片的汇总)
GPU2: [3, 4, 5, 6] GPU2: [16] (第2片的汇总)
GPU3: [4, 5, 6, 7] GPU3: [22] (第3片的汇总)

4.4 通信量直觉:一个简单估算

假设 4 张卡做一次 AllReduce,数据量为 2GB(比如模型梯度大小)。不同互联方式下的耗时差异:

互联方式 带宽 2GB AllReduce 估算耗时
NVLink 4.0 900 GB/s ~2.2 ms
IB NDR 50 GB/s ~40 ms
传统以太网 (25GbE) ~3 GB/s ~670 ms

NVLink 比 IB 快约 18 倍,比传统以太网快约 300 倍。这就是为什么张量并行(每层都要做 AllReduce)必须限制在 NVLink 互联的机器内部。


5. 建立关键直觉

5.1 速度总览

连接方式 典型带宽 延迟量级 适合的并行策略
NVLink 4.0 900 GB/s ~us 张量并行 (TP):每层都要通信,必须走最快的路
IB NDR 50 GB/s ~1-2 us 流水线并行 (PP)、数据并行 (DP):通信频率低或可重叠
传统以太网 1-12 GB/s ~50-100 us 不适合训练通信,仅用于管理网络

5.2 核心结论

TP 限机内,PP/DP 可跨机。 原因很直接:

  • 张量并行在模型的每一层前向和反向中都要做 AllReduce,通信频率极高。只有 NVLink 的带宽才能撑住,所以 TP 组的 GPU 必须在同一台机器内(NVLink 互联)。
  • 流水线并行和数据并行的通信频率较低、或者可以与计算重叠,IB 的带宽足够承载,因此可以跨机部署。

这条规则是大模型训练集群设计的基石。


6. 动手验证:查看你的 GPU 拓扑

6.1 nvidia-smi topo -m

在 GPU 服务器上执行这条命令,可以直观看到每张卡之间的互联方式:

1
nvidia-smi topo -m

输出示例:

1
2
3
4
5
        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
GPU2 NV18 NV18 X NV18 NV18 NV18 NV18 NV18
...

常见标记含义:

  • NV18:通过 18 条 NVLink 连接(NVLink 4.0 满配)
  • PHB:通过 PCIe Host Bridge 连接(同一 PCIe 交换机下)
  • SYS:跨 NUMA 节点,需经过系统总线(最慢的机内路径)
  • NODE:同一 NUMA 节点内,通过 PCIe 连接

看到 NV 开头的就放心——这对卡之间走的是 NVLink 高速通道。看到 PHB 或 SYS,说明这对卡之间只有 PCIe 带宽,TP 不应该跨这对卡。

6.2 简单代码验证:PyTorch AllReduce

以下是一个最简单的多卡 AllReduce 示例,验证通信是否正常工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import torch
import torch.distributed as dist

# 初始化进程组
dist.init_process_group(backend="nccl")
local_rank = dist.get_rank()
torch.cuda.set_device(local_rank)

# 每张卡创建一个值为 rank+1 的张量
tensor = torch.tensor([local_rank + 1.0], device=f"cuda:{local_rank}")
print(f"[Rank {local_rank}] 通信前: {tensor}")

# AllReduce 求和
dist.all_reduce(tensor, op=dist.ReduceOp.SUM)
print(f"[Rank {local_rank}] 通信后: {tensor}")
# 4 卡时预期输出: tensor([10.]) (1+2+3+4)

dist.destroy_process_group()

启动命令(4 卡):

1
torchrun --nproc_per_node=4 allreduce_test.py

如果每张卡输出的结果一致,说明多卡通信链路正常。


📝 总结

本文介绍了通信拓扑的三个核心层次:

  1. 机内互联:PCIe 是基础,NVLink 是 GPU 间的专属高速通道(比 PCIe 快 14-28 倍),NVSwitch 实现全连接
  2. 跨机互联:InfiniBand 是 AI 集群主流选择(微秒级延迟,50-100 GB/s),RoCE 是低成本替代
  3. 集合通信:AllReduce、AllGather、ReduceScatter 是多卡数据交换的标准动作

一条核心直觉贯穿全文:带宽差异决定并行策略的边界——NVLink 和 IB 之间 18 倍的带宽鸿沟,直接划定了”TP 限机内,PP/DP 可跨机”这条工程铁律。


🎯 自我检验清单

  • 能说出 NVLink 4.0 与 PCIe 5.0 的带宽数量级差异(约 14 倍)
  • 能解释 NVSwitch 的作用:消除机内 GPU 间的拓扑瓶颈
  • 能说出 InfiniBand NDR 的带宽量级(400Gb/s,约 50 GB/s)
  • 能画出 AllReduce 的数据流动示意,说出它在数据并行中的用途
  • 能解释”TP 不跨机”的物理原因:NVLink vs IB 的带宽差距
  • 能用 nvidia-smi topo -m 读懂输出,判断哪些卡走 NVLink

📚 参考资料