集群网络和通信
1.5.1 为什么网络如此重要?
在分布式训练中,网络是连接各个 GPU 的“高速公路”。如果高速公路太窄,即使 GPU 再快,也会被数据传输拖慢。
网络带宽对训练的影响
训练一个 GPT-3 级别模型的总时间可以拆解为:
总时间 = 计算时间 + 通信时间 + 空闲等待不同网络条件下,计算和通信的占比可能完全不同:
| 场景 | 计算时间 | 通信时间 | 说明 |
|---|---|---|---|
| 理想情况(无限带宽) | 100% | 0% | GPU 几乎一直在计算 |
| 实际情况(有限带宽) | 60% | 40% | 通信已经显著影响训练效率 |
| 糟糕情况(带宽瓶颈) | 25% | 75% | GPU 大量时间都在等待数据 |
网络越慢,GPU 越容易空转;在大规模训练中,网络往往决定集群上限。
1.5.2 GPU 互联技术对比
单机内部互联
| 技术 | 带宽 | 延迟 | 用途 | 特点 |
|---|---|---|---|---|
| PCIe 4.0 x16 | 32 GB/s | ~1 μs | CPU-GPU、GPU-存储 | |
| PCIe 5.0 x16 | 64 GB/s | ~1 μs | 新一代服务器 | 带宽翻倍 |
| NVLink 3.0 | 50 GB/s / 链路 | ~0.5 μs | GPU-GPU | 专用高速互联 |
| NVLink 4.0 | 50 GB/s / 链路 | ~0.5 μs | H100 GPU 互联 | 支持最多 18 条链路 |
| NVSwitch | 900 GB/s(全互联) | ~0.5 μs | 多 GPU 全互联 | 无阻塞交换 |
NVSwitch 架构
NVSwitch 用于实现多 GPU 之间的高带宽全互联。
┌─────────────┐
│ NVSwitch │
│ 交换芯片 │
└──────┬──────┘
┌─────────────┼─────────────┐
▼ ▼ ▼
GPU 0 ←────→ GPU 1 ←────→ GPU 2
▲ ▲ ▲
│ │ │
GPU 3 ←────→ GPU 4 ←────→ GPU 5
▲ ▲ ▲
│ │ │
GPU 6 ←────→ GPU 7 ←────→ GPU 8特点:
- 任意两个 GPU 之间都可以高速互联;
- 带宽更均衡,减少通信竞争(无竞争);
- DGX A100:6 个NVSwitch 连接 8 个 GPU,总带宽可达 600 GB/s;
- DGX H100:4 个NVSwitch 连接 8 个 GPU, 总带宽可达 900 GB/s。
1.5.3 跨节点网络技术
InfiniBand(IB)
InfiniBand 是高性能计算(HPC)领域常用的高速网络,也是 AI 训练集群的首选网络之一。
典型配置包括:
- 每个节点配备 1–2 张 ConnectX-7 IB 网卡;
- 单卡带宽可达 400 Gbps;
- 网络拓扑通常采用 或 ;
- 端到端延迟通常在 1–2 μs 级别。
InfiniBand 演进
| 版本 | 单链路带宽 | 常见配置 | 总带宽 | 发布时间 |
|---|---|---|---|---|
| IB FDR | 14 Gbps | 4x | 56 Gbps | 2011 |
| IB EDR | 25 Gbps | 4x | 100 Gbps | 2014 |
| IB HDR | 50 Gbps | 4x | 200 Gbps | 2018 |
| IB NDR | 100 Gbps | 4x | 400 Gbps | 2022 |
| IB XDR | 200 Gbps | 4x | 800 Gbps | 2024 |
RDMA(Remote Direct Memory Access)
RDMA 是 InfiniBand 的核心技术,允许一台机器直接访问另一台机器的内存,无需 CPU 介入。
传统 TCP/IP 通信路径:
应用层 → 内核层 → 网卡驱动 → 网卡 → 网络链路
↑ CPU 拷贝 / CPU 处理 ↑RDMA 通信路径:
应用层 ───────────────→ 应用层
│ ↑
└────→ 网卡硬件处理 ───┘
零拷贝,低延迟RDMA 的优势:
- 零拷贝:数据直接从应用内存到网卡;
- 内核旁路:应用可以直接操作网卡,减少系统调用;
- CPU 卸载:通信由网卡处理,CPU 专注于计算。
RoCE(RDMA over Converged Ethernet)
,成本通常低于 InfiniBand。| 特性 | InfiniBand | RoCEv2 |
|---|---|---|
| 网络类型 | 专用网络 | 标准以太网 |
| 是否需要特殊交换机 | 是 | 否,但需支持 PFC / ECN |
| 性能 | 最优 | 接近 IB |
| 成本 | 高 | 中等 |
| 兼容性 | 专用生态 | 与以太网兼容 |
RoCEv2(RDMA over Converged Ethernet version 2) 就是把 InfiniBand 的 RDMA 语义(零拷贝、内核旁路、直接内存访问)打包进 UDP/IP 数据包里,让它能在标准以太网上路由传输,从而以远低于 InfiniBand 的成本获得接近 RDMA 的性能。
为什么需要 RoCEv2?
传统 TCP/IP 收发数据的路径是这样的:
App → Socket Buffer → Kernel TCP Stack → NIC → 线路 → NIC → Kernel TCP Stack → Socket Buffer → App每一步都有 CPU 参与 + 多次内存拷贝,延迟在几十微秒级,CPU 占用也不低。
RDMA 的做法是:数据从发送方内存 直接 DMA 搬运 到接收方内存,绕过内核、绕过 CPU 数据路径,延迟压到微秒级。
但 RDMA 最初是为 InfiniBand 设计的——需要专用网卡、专用交换机,成本高、生态封闭。
RoCEv2 的答案:保留 RDMA 的传输语义,但把载体从 IB 链路层换成大家熟悉的 UDP/IP over Ethernet,让它能跑在普通数据中心以太网上。
协议栈长什么样?
┌─────────────────────────────┐
│ RDMA Transport (IB Verbs) │ ← 读写语义、QP、完成队列……
├─────────────────────────────┤
│ UDP │ ← 目的端口 4791(RoCEv2 保留)
├─────────────────────────────┤
│ IP │ ← 可路由!跨子网没问题
├─────────────────────────────┤
│ Ethernet (L2) │ ← 标准帧格式,Ethertype 0x8915
└─────────────────────────────┘关键区别:
| 版本 | 层级 | 能否跨路由 |
|---|---|---|
| RoCE v1 | L2(以太网帧) | ❌ 同一广播域内 |
| RoCE v2 | L3(UDP/IP) | ✅ 可被标准 IP 路由器转发 |
所以现代部署里 几乎只用 v2。
核心挑战:以太网是"有损"的,RDMA 怕丢包
这是 RoCEv2 最微妙也最关键的一点。
InfiniBand 天生是基于信用(credit-based)的无损链路——缓冲区满了就直接反压源头,永远不会丢包。
以太网默认是尽力而为(best-effort)——缓冲区满了就 drop,而 RDMA 遇到丢包的恢复代价极其惨烈(超时重传 → 延迟飙升)。
所以要让 RoCEv2 跑得好,必须在以太网上人为构建一个无损环境,靠两大机制配合:
① PFC(Priority Flow Control,IEEE 802.1Qbb)——链路层防丢包
发送方 → [交换机 buffer 快满] → 交换机发 PAUSE 帧 → 发送方停发(仅该优先级队列)- 按优先级(8个优先级队列)分别暂停,不影响其他流量
- 但 PFC 有个隐患:反压会向上游传播,配置不当可能引发 PFC storm / 队头阻塞
② ECN(Explicit Congestion Notification)+ DCQCN —— 网络层提前减速
交换机发现队列超过阈值 → 打上 ECN 标记 → 接收方 NIC 发 CNP → 发送方 NIC 降速- DCQCN(Data Center Quantized Congestion Notification)是 RoCEv2 事实上的拥塞控制算法:乘性降速 + 加性回升,在缓冲区满到丢包之前就把发送速率压下来
实践中:ECN/DCQCN 做主力调速,PFC 做兜底防丢包。AI 集群通常把 RDMA 流量映射到独立优先级(如 Prio 5),与其他 TCP 流量隔离。
性能到底怎样?
| 指标 | InfiniBand | RoCEv2(调优良好) | 备注 |
|---|---|---|---|
| 端到端延迟 | ~1-2 μs | ~2-5 μs(典型)/ ~7-10 μs(未精细调优) | IB 天然更低更稳 |
| 带宽 | 800 Gbps/port | 800 Gbps/port | 硬件代际同步 |
| 尾延迟确定性 | 极好(集成流控) | 依赖调优质量 | 调不好会有 spikes |
| 硬件成本 | 高(~1x 基准) | 低(约 1/3) | 以太网生态的规模经济 |
| 生态 | NVIDIA 主导(封闭) | 多厂商开放 | Broadcom / Intel / NVIDIA RNIC 都支持 |
实际大厂案例:Meta 的 AI Research Supercluster、Microsoft Azure NDv4/NDv5 都跑 RoCEv2,规模上千张 GPU。
1.5.4 NCCL 集合通信库
(NVIDIA Collective Communications Library)是 NVIDIA 提供的多 GPU 通信库,是分布式训练的基石。NCCL 核心操作
| 操作 | 作用 | 常见场景 |
|---|---|---|
| AllReduce | 多个 GPU 的数据求和 / 平均,并所有 GPU | 数据并行梯度同步 |
| AllGather | 收集所有 GPU 的数据,并让 | 张量并行、参数聚合 |
| ReduceScatter | 先 Reduce,再将结果切分给不同 GPU | ZeRO、张量并行 |
| Broadcast | 从一个 GPU 向所有 GPU 广播数据 | 参数初始化 |
| Reduce | 多个 GPU 汇总到一个 root GPU | 指标统计、聚合计算 |
NCCL AllReduce 算法:
Ring AllReduce
Ring AllReduce(环形算法) 分为两个阶段:
- Scatter-Reduce:每个 GPU 获得部分规约结果;
GPU 0 → GPU 1 → GPU 2 → GPU 3 → GPU 0- AllGather:将完整结果广播给所有 GPU。
时间复杂度:
2 × (N - 1) / N × 数据量 / 带宽其中 N 是 GPU 数量。
Tree AllReduce
Tree AllReduce 先从叶子节点向根节点聚合,再从根节点向叶子节点广播。
| 算法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Ring AllReduce | 带宽利用率高 | 延迟相对高 | 大数据量通信 |
| Tree AllReduce | 延迟低 | 带宽利用率不如 Ring | 小规模数据、低延迟场景 |
NCCL 性能调优示例
import os
# 1. 选择 AllReduce 算法
# TREE: 树形算法,延迟低
# RING: 环形算法,带宽利用率高
# COLLNET: 使用 SHARP 交换机卸载
os.environ['NCCL_ALGO'] = 'RING'
# 2. 设置缓冲区大小
os.environ['NCCL_BUFFSIZE'] = '2097152' # 2MB
# 3. 启用网络插件配置
os.environ['NCCL_NET_PLUGIN'] = 'none'
# 4. 调试模式
os.environ['NCCL_DEBUG'] = 'INFO'
os.environ['NCCL_DEBUG_SUBSYS'] = 'ALL'
# 5. 指定 IB 网卡
os.environ['NCCL_IB_HCA'] = 'mlx5_0,mlx5_1'
# 6. 启用 P2P 和 IB
os.environ['NCCL_P2P_DISABLE'] = '0'
os.environ['NCCL_IB_DISABLE'] = '0'1.5.5 网络拓扑设计
Fat-Tree(胖树)拓扑
Fat-Tree 是常见的数据中心和 AI 集群网络拓扑。
特点:
- 上下行带宽可以做到 1:1;
- 可实现无阻塞网络;
- 缺点是核心层交换机数量多,成本较高。
3D Torus(3D 环面)拓扑
3D Torus 中,每个节点在 x、y、z 三个方向都与邻居相连,形成环形结构。
| 维度 | 说明 |
|---|---|
| 连接方式 | 每个节点连接 6 个邻居:+x、-x、+y、-y、+z、-z |
| 优点 | 交换机数量少、成本低、可扩展性好、适合 AllReduce 等集合通信 |
| 缺点 | 非最短路径可能拥塞,需要精心设计通信模式 |
| 代表系统 | Google TPU Pod、NVIDIA DGX SuperPOD |
小结
本节介绍了 AI 集群中的网络和通信技术:
- 单机内部依赖 PCIe、NVLink、NVSwitch;
- 跨节点通信常用 InfiniBand、RoCE 和 RDMA;
- NCCL 是多 GPU 集合通信的核心库;
- 网络拓扑会显著影响训练效率和可扩展性。
在大规模 AI 训练中,网络不是配角,而是决定 GPU 集群是否能真正跑满的关键基础设施。