Skip to content

集群网络和通信

1.5.1 为什么网络如此重要?

在分布式训练中,网络是连接各个 GPU 的“高速公路”。如果高速公路太窄,即使 GPU 再快,也会被数据传输拖慢。

网络带宽对训练的影响

训练一个 GPT-3 级别模型的总时间可以拆解为:

latex
总时间 = 计算时间 + 通信时间 + 空闲等待

不同网络条件下,计算和通信的占比可能完全不同:

场景计算时间通信时间说明
理想情况(无限带宽)100%0%GPU 几乎一直在计算
实际情况(有限带宽)60%40%通信已经显著影响训练效率
糟糕情况(带宽瓶颈)25%75%GPU 大量时间都在等待数据

网络越慢,GPU 越容易空转;在大规模训练中,网络往往决定集群上限。


1.5.2 GPU 互联技术对比

单机内部互联

技术带宽延迟用途特点
PCIe 4.0 x1632 GB/s~1 μsCPU-GPU、GPU-存储
PCIe 5.0 x1664 GB/s~1 μs新一代服务器带宽翻倍
NVLink 3.050 GB/s / 链路~0.5 μsGPU-GPU专用高速互联
NVLink 4.050 GB/s / 链路~0.5 μsH100 GPU 互联支持最多 18 条链路
NVSwitch900 GB/s(全互联)~0.5 μs多 GPU 全互联无阻塞交换

NVSwitch 架构

NVSwitch 用于实现多 GPU 之间的高带宽全互联。

latex
              ┌─────────────┐
              │  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 FDR14 Gbps4x56 Gbps2011
IB EDR25 Gbps4x100 Gbps2014
IB HDR50 Gbps4x200 Gbps2018
IB NDR100 Gbps4x400 Gbps2022
IB XDR200 Gbps4x800 Gbps2024

RDMA(Remote Direct Memory Access)

RDMA 是 InfiniBand 的核心技术,允许一台机器直接访问另一台机器的内存,无需 CPU 介入。

传统 TCP/IP 通信路径:

latex
应用层 → 内核层 → 网卡驱动 → 网卡 → 网络链路
        ↑ CPU 拷贝 / CPU 处理 ↑

RDMA 通信路径:

latex
应用层 ───────────────→ 应用层
   │                      ↑
   └────→ 网卡硬件处理 ───┘
        零拷贝,低延迟

RDMA 的优势:

  • 零拷贝:数据直接从应用内存到网卡;
  • 内核旁路:应用可以直接操作网卡,减少系统调用;
  • CPU 卸载:通信由网卡处理,CPU 专注于计算。

RoCE(RDMA over Converged Ethernet)

,成本通常低于 InfiniBand。
特性InfiniBandRoCEv2
网络类型专用网络标准以太网
是否需要特殊交换机否,但需支持 PFC / ECN
性能最优接近 IB
成本中等
兼容性专用生态与以太网兼容

RoCEv2(RDMA over Converged Ethernet version 2) 就是把 InfiniBand 的 RDMA 语义(零拷贝、内核旁路、直接内存访问)打包进 UDP/IP 数据包里,让它能在标准以太网上路由传输,从而以远低于 InfiniBand 的成本获得接近 RDMA 的性能。


为什么需要 RoCEv2?

传统 TCP/IP 收发数据的路径是这样的:

plain
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,让它能跑在普通数据中心以太网上。


协议栈长什么样?

plain
┌─────────────────────────────┐
│   RDMA Transport (IB Verbs) │  ← 读写语义、QP、完成队列……
├─────────────────────────────┤
│         UDP                 │  ← 目的端口 4791(RoCEv2 保留)
├─────────────────────────────┤
│         IP                  │  ← 可路由!跨子网没问题
├─────────────────────────────┤
│   Ethernet (L2)             │  ← 标准帧格式,Ethertype 0x8915
└─────────────────────────────┘

关键区别:

版本层级能否跨路由
RoCE v1L2(以太网帧)❌ 同一广播域内
RoCE v2L3(UDP/IP)✅ 可被标准 IP 路由器转发

所以现代部署里 几乎只用 v2


核心挑战:以太网是"有损"的,RDMA 怕丢包

这是 RoCEv2 最微妙也最关键的一点。

InfiniBand 天生是基于信用(credit-based)的无损链路——缓冲区满了就直接反压源头,永远不会丢包。

以太网默认是尽力而为(best-effort)——缓冲区满了就 drop,而 RDMA 遇到丢包的恢复代价极其惨烈(超时重传 → 延迟飙升)。

所以要让 RoCEv2 跑得好,必须在以太网上人为构建一个无损环境,靠两大机制配合:

① PFC(Priority Flow Control,IEEE 802.1Qbb)——链路层防丢包

plain
发送方 → [交换机 buffer 快满] → 交换机发 PAUSE 帧 → 发送方停发(仅该优先级队列)
  • 优先级(8个优先级队列)分别暂停,不影响其他流量
  • 但 PFC 有个隐患:反压会向上游传播,配置不当可能引发 PFC storm / 队头阻塞

② ECN(Explicit Congestion Notification)+ DCQCN —— 网络层提前减速

plain
交换机发现队列超过阈值 → 打上 ECN 标记 → 接收方 NIC 发 CNP → 发送方 NIC 降速
  • DCQCN(Data Center Quantized Congestion Notification)是 RoCEv2 事实上的拥塞控制算法:乘性降速 + 加性回升,在缓冲区满到丢包之前就把发送速率压下来

实践中:ECN/DCQCN 做主力调速,PFC 做兜底防丢包。AI 集群通常把 RDMA 流量映射到独立优先级(如 Prio 5),与其他 TCP 流量隔离。


性能到底怎样?

指标InfiniBandRoCEv2(调优良好)备注
端到端延迟~1-2 μs~2-5 μs(典型)/ ~7-10 μs(未精细调优)IB 天然更低更稳
带宽800 Gbps/port800 Gbps/port硬件代际同步
尾延迟确定性极好(集成流控)依赖调优质量调不好会有 spikes
硬件成本高(~1x 基准)低(约 1/3)以太网生态的规模经济
生态NVIDIA 主导(封闭)多厂商开放Broadcom / Intel / NVIDIA RNIC 都支持

实际大厂案例:Meta 的 AI Research SuperclusterMicrosoft Azure NDv4/NDv5 都跑 RoCEv2,规模上千张 GPU。


1.5.4 NCCL 集合通信库

(NVIDIA Collective Communications Library)是 NVIDIA 提供的多 GPU 通信库,是分布式训练的基石。

NCCL 核心操作

操作作用常见场景
AllReduce多个 GPU 的数据求和 / 平均,并所有 GPU数据并行梯度同步
AllGather收集所有 GPU 的数据,并让张量并行、参数聚合
ReduceScatter先 Reduce,再将结果切分给不同 GPUZeRO、张量并行
Broadcast从一个 GPU 向所有 GPU 广播数据参数初始化
Reduce多个 GPU 汇总到一个 root GPU指标统计、聚合计算

NCCL AllReduce 算法:

Ring AllReduce

Ring AllReduce(环形算法) 分为两个阶段:

  1. Scatter-Reduce:每个 GPU 获得部分规约结果;
latex
GPU 0 → GPU 1 → GPU 2 → GPU 3 → GPU 0
  1. AllGather:将完整结果广播给所有 GPU。

时间复杂度:

latex
2 × (N - 1) / N × 数据量 / 带宽

其中 N 是 GPU 数量。

Tree AllReduce

Tree AllReduce 先从叶子节点向根节点聚合,再从根节点向叶子节点广播。

算法优点缺点适用场景
Ring AllReduce带宽利用率高延迟相对高大数据量通信
Tree AllReduce延迟低带宽利用率不如 Ring小规模数据、低延迟场景

NCCL 性能调优示例

python
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 集群是否能真正跑满的关键基础设施。

用心记录,持续成长