一、学习背景

在前面的 GPU 学习中,我们从三个核心指标认识了一块 GPU:

  1. 显存容量(Memory Capacity):决定模型和数据能否装进 GPU。

  2. 显存带宽(Memory Bandwidth):决定 GPU 从显存中读取和写入数据的速度。

  3. 计算能力(Compute Capability):决定 GPU 执行计算任务的速度。

但在实际的大模型训练和推理场景中,单张 GPU 往往无法满足需求,需要多张 GPU 协同工作。

这就引出了一个新的问题:

当多张 GPU 一起工作时,GPU 与 GPU 之间如何通信?通信速度会不会成为整个计算任务的瓶颈?

例如,8 张 GPU 放在同一台服务器中,与 8 张 GPU 分布在 8 台服务器中,虽然 GPU 数量相同,但实际训练效率可能存在很大差距。

因此,本篇主要学习 GPU 多卡互联、NVLink、NVSwitch、InfiniBand、RoCE、RDMA,以及 TP、PP 等并行技术,理解 AI 集群中计算资源与网络资源之间的关系。

二、GPU 多卡互联的三种层次

在 AI 算力集群中,GPU 之间的数据传输主要分为三个层次:

  • 卡内通信:GPU 内部计算单元与显存之间的数据传输。

  • 机内通信:同一台服务器内部不同 GPU 之间的数据传输。

  • 机间通信:不同服务器之间 GPU 的数据传输。

2.1 三种通信方式对比

通信层次通信路径典型带宽主要应用
卡内GPU 计算单元与自身 HBM3.35 TB/s模型计算、数据读取
机内GPU 与 GPU 之间900 GB/s多卡训练、张量并行
机间不同服务器之间50 GB/s跨节点训练

以上数据是用于理解带宽层级的典型参考值,具体性能取决于 GPU 型号、互联拓扑、链路数量和配置。

可以发现:

GPU 之间的通信距离越远,通常可用带宽越低,通信延迟也越难控制。

这也是为什么大型 AI 服务器会特别重视 GPU 之间的高速互联。

2.2 NVLink:GPU 专用高速互联技术

NVLink 是 NVIDIA 推出的一种 GPU 高速互联技术,主要用于解决 GPU 之间的数据传输问题。

传统 PCIe 总线也可以实现 GPU 之间的数据交换,但在高性能 AI 训练场景中,NVLink 通常能够提供更高的互联带宽。

可以简单理解为:

  • PCIe:通用设备互联总线。

  • NVLink:面向 GPU 高速通信优化的互联技术。

NVLink 的主要作用:

  1. 提高 GPU 与 GPU 之间的数据传输速度。

  2. 降低多 GPU 协同计算时的通信开销。

  3. 支持大模型张量并行等高频通信任务。

例如,H100 SXM 平台的 NVLink 4.0 总带宽可达到约 900 GB/s(双向聚合口径)。

2.3 NVSwitch:GPU 之间的交换芯片

如果只有 NVLink,那么 GPU 之间的连接仍然受到具体链路拓扑的限制。

NVSwitch 的出现进一步解决了多 GPU 之间的互联问题。

NVSwitch 是 NVIDIA 专门设计的高速交换芯片,可以将服务器内部多张 GPU 连接起来,实现高带宽的 GPU 全互联通信。

可以用网络设备进行类比:

AI 计算领域传统网络领域
NVLink高速互联链路
NVSwitch交换机
GPU网络终端设备

通过 NVSwitch,可以让服务器内部的 GPU 之间实现高效的数据交换。

需要注意:并不是所有支持 NVLink 的服务器都具有 NVSwitch,也不是所有 GPU 都能实现相同的全互联带宽,具体取决于服务器设计。

三、GPU 互联带宽:必须理解 bit 和 Byte

学习 AI 数据中心网络时,一个非常容易犯的错误就是混淆 bit 和 Byte。

两者的区别:

  • bit:比特,通常使用小写 b 表示。

  • Byte:字节,通常使用大写 B 表示。

两者之间的关系:

1 Byte = 8 bit

因此,在查看网卡和 GPU 互联参数时,一定要注意单位。

3.1 InfiniBand NDR 400G 是多少 GB/s?

假设一张 InfiniBand NDR 网卡的端口速率为:

400 Gb/s

换算成 GB/s:
400 \div 8 = 50\ GB/s

因此:

400 Gb/s = 50 GB/s

而 H100 NVLink 4.0 的双向聚合带宽约为 900 GB/s。

两者对比:
900 \div 50 = 18

也就是说,按照上述带宽口径,机内 NVLink 的带宽约为机间单个 400 Gb/s 网络端口的 18 倍。

3.2 GPU 互联带宽阶梯

技术典型带宽主要作用
HBM 显存3350 GB/sGPU 内部数据读写
NVLink900 GB/sGPU 高速互联
PCIe 5.0 x16约 128 GB/sCPU、GPU及设备互联
InfiniBand NDR50 GB/s跨服务器高速通信
25GbE 以太网约 3.125 GB/s普通网络通信

这些数值的统计口径并不完全相同,例如 NVLink 可能采用多链路双向聚合带宽,而 PCIe 和网卡也需要区分单向、双向及有效吞吐量。

因此,实际选型时不能只看数字,还要确认带宽口径。

3.3 SXM 和 PCIe 的区别

在购买 NVIDIA GPU 服务器时,经常会看到两种形态:

  • SXM

  • PCIe

它们有什么区别?

SXM:

SXM 是 NVIDIA 面向高性能 GPU 服务器设计的模块形态,通常配合专用基板和高速互联方案使用。

特点:

  1. 支持更高功耗设计。

  2. 散热和供电能力更强。

  3. 通常能够提供更强的 GPU 互联能力。

  4. 常用于多 GPU 高性能计算服务器。

PCIe:

PCIe 版本通过标准 PCIe 插槽连接服务器。

特点:

  1. 通用性更强。

  2. 部署方式更加灵活。

  3. 可以通过 PCIe 实现 GPU 数据交换。

  4. 多卡互联能力通常不如高端 SXM 平台。

需要注意,具体 NVLink 能力取决于 GPU 型号和服务器设计。例如 A100 PCIe 版本没有 NVLink,而 H100 PCIe 版本支持特定的 NVLink 桥接方案,但不能因此认为它具备 8 卡 NVSwitch 全互联能力。

所以,在选择 AI 服务器时,不能只关注 GPU 型号,还要关注 GPU 的封装形态、互联方式和整机拓扑。

四、通过 AllReduce 理解多 GPU 通信开销

理解 GPU 互联最好的方式,就是通过一个实际训练场景来计算。

假设我们要对 Llama 3 8B 模型进行全参数微调。

模型参数量:
P = 8 \times 10^9

假设使用 BF16,每个参数占用 2 Byte。

模型权重大小:
8B \times 2 = 16GB

如果按照约 16 倍参数量估算训练显存需求:
16GB \times 8 = 128GB

因此,一张 80GB 显存的 GPU 无法独立完成这个训练任务,需要多张 GPU 协同工作。

4.1 什么是 AllReduce?

在分布式训练中,每张 GPU 通常负责一部分训练数据,并独立计算梯度。

计算完成之后,需要将不同 GPU 上的梯度进行汇总、求和或平均,再将结果同步给各个 GPU。

这个过程叫做 AllReduce。

AllReduce 的主要作用:

  1. 汇总不同 GPU 计算出来的梯度。

  2. 对梯度进行规约操作。

  3. 将规约结果同步给所有 GPU。

  4. 保证不同 GPU 的模型参数能够保持一致。

AllReduce 是分布式深度学习训练中的核心通信操作之一。

4.2 环形 AllReduce 的通信量

假设使用 8 张 GPU 进行训练。

梯度数据量为:
8B \times 2Byte = 16GB

在 Ring AllReduce 中,每张 GPU 需要经过 Reduce-Scatter 和 AllGather 两个阶段。

每张 GPU 的发送数据量近似为:
2 \times \frac{N-1}{N} \times S

其中:

  • N:GPU 数量。

  • S:需要规约的数据量。

代入 N=8、S=16GB:
2 \times \frac{7}{8} \times 16 = 28GB

因此,每张 GPU 的发送数据量约为 28GB,接收量也约为 28GB。

这里需要区分:28GB 是发送量,发送和接收合计约为 56GB。

4.3 不同网络条件下的通信时间

为了方便理解,我们按照不同链路的带宽估算通信耗时。

部署方式典型带宽按 28GB 发送量估算
单机 NVLink900 GB/s约 31 ms
跨机 InfiniBand50 GB/s约 560 ms
25GbE 以太网3.125 GB/s约 8.96 s

以上是简化的理想带宽估算,并不代表真实 AllReduce 测试结果。实际性能还受到链路拓扑、通信协议、延迟、NCCL 算法和并发流量等因素影响。

可以看出:

GPU 数量相同,并不意味着计算效率相同。GPU 之间的通信带宽会直接影响整体训练效率。

如果训练任务本身只需要几秒钟,而通信却需要数百毫秒,那么网络就可能成为训练瓶颈。

五、训练并行策略:TP、PP 和 DP

当模型规模越来越大,单张 GPU 无法完成训练时,就需要对模型和数据进行拆分。

常见的并行策略包括:

  • TP:Tensor Parallelism,张量并行。

  • PP:Pipeline Parallelism,流水线并行。

  • DP:Data Parallelism,数据并行。

它们属于分布式训练中的并行策略,通常由训练框架和用户配置。

5.1 张量并行 TP

张量并行的核心思想是:

将一个模型层内部的张量计算拆分到多张 GPU 上执行。

例如,一个 Transformer 层的矩阵计算,可以按照不同维度拆分给多张 GPU。

每张 GPU 只负责一部分计算,随后需要通过 GPU 间通信完成结果同步或聚合。

特点:

  1. 模型内部计算被拆分。

  2. GPU 之间通信频率较高。

  3. 每层计算都可能涉及通信。

  4. 对 GPU 互联带宽和延迟要求较高。

因此,TP 通常优先部署在同一台具备高速 NVLink/NVSwitch 互联的服务器内部。

5.2 流水线并行 PP

流水线并行的核心思想是:

将模型不同层拆分到不同 GPU 组中,让不同 GPU 组负责不同阶段的计算。

例如,一个模型有 40 层:

  • GPU 组 A 负责前 20 层。

  • GPU 组 B 负责后 20 层。

第一组完成前半部分计算后,将中间激活数据传递给第二组,第二组继续完成后半部分计算。

特点:

  1. 按模型层进行拆分。

  2. 不同 GPU 组负责不同模型阶段。

  3. 阶段之间通过激活数据进行通信。

  4. 可以通过 Micro-batch 提高流水线利用率。

相比 TP,PP 通常具有较低频率的阶段间通信,因此更加适合跨服务器部署。

5.3 数据并行 DP

数据并行的核心思想是:

每张 GPU 或每个 GPU 组都拥有模型副本,但处理不同的数据。

训练过程中,各个 GPU 分别计算梯度,再通过 AllReduce 等方式同步梯度。

特点:

  1. 模型副本分布在不同 GPU 上。

  2. 不同 GPU 处理不同训练数据。

  3. 通过梯度同步保持模型参数一致。

  4. 可以通过增加 GPU 数量提高训练吞吐量。

5.4 TP、PP、DP 的关系

在常见的规则化并行配置中:
TP×PP×DP=GPU总数

例如:

一共有 16 张 GPU:

  • TP = 8

  • PP = 2

  • DP = 1

那么:
8 \times 2 \times 1 = 16

这表示:

  • 每个 TP 组有 8 张 GPU。

  • 模型被划分为 2 个流水线阶段。

  • 数据并行副本数量为 1。

需要注意,这个公式描述的是常见的三维并行组网配置,实际训练框架还可能引入专家并行、上下文并行等其他维度。

六、16 张 H100 如何进行合理分组?

假设现在有:

  • 16 张 H100 GPU。

  • 2 台 GPU 服务器。

  • 每台服务器 8 张 GPU。

  • 训练模型:70B。

  • 并行配置:TP=8、PP=2。

应该如何分配?

建议采用以下方式:

服务器GPU 数量TP 组模型负责部分
机器 A8 张TP 组 1模型前半部分
机器 B8 张TP 组 2模型后半部分

整体结构:

                70B 大模型训练
                       |
             Pipeline Parallelism
                       |
          +------------+------------+
          |                         |
       机器 A                     机器 B
       8 张 H100                  8 张 H100
          |                         |
       TP = 8                    TP = 8
          |                         |
     模型前半部分              模型后半部分
          |                         |
          +------ 激活数据传输 ------+
                  InfiniBand

为什么这样设计?

核心原则:

通信频率越高的 GPU,越应该放在互联带宽更高的网络范围内。

原因如下:

第一,TP 组内通信频率非常高。

张量并行需要在模型计算过程中频繁交换中间结果,通信次数可能达到每个训练步骤数百次。

如果 TP 组被拆分到不同服务器,通信就需要经过机间网络,容易产生较大的通信开销。

第二,PP 阶段间通信相对较少。

流水线并行主要在不同阶段之间传递激活数据,适合利用 InfiniBand 等高速网络进行跨服务器通信。

因此,比较合理的方式是:

  • TP 尽量放在机内。

  • PP 可以跨机器。

  • DP 可以根据集群网络能力进行跨机器扩展。

这也是 AI 数据中心网络拓扑设计中非常重要的思路。

七、机间通信技术:RDMA、InfiniBand 和 RoCE

当 GPU 分布在不同服务器时,就需要依赖高速网络实现通信。

传统网络通信通常需要经过 CPU、操作系统内核和主机内存等环节,容易产生额外的数据复制和 CPU 开销。

为了解决这些问题,RDMA 技术被广泛应用于高性能计算和 AI 数据中心。

7.1 RDMA 是什么?

RDMA 全称 Remote Direct Memory Access,即远程直接内存访问。

它允许一台计算机通过网络直接访问另一台计算机的内存,减少传统网络通信中的 CPU 参与和数据复制开销。

主要优势:

  1. 降低 CPU 使用率。

  2. 减少数据复制。

  3. 降低通信延迟。

  4. 提高网络吞吐量。

可以简单理解为:

传统网络通信需要 CPU 参与较多的数据处理,而 RDMA 能够让网卡承担更多数据传输工作。

7.2 GPUDirect RDMA

普通 RDMA 主要解决主机内存之间的数据传输问题。

而 GPUDirect RDMA 进一步优化了 GPU 与网卡之间的数据交换。

它允许支持该技术的网卡直接访问 GPU 显存,减少 GPU 数据经过主机内存中转的开销。

基本数据路径:

传统数据传输:

GPU A
  |
主机内存 A
  |
网卡 A
  |
网络交换机
  |
网卡 B
  |
主机内存 B
  |
GPU B


GPUDirect RDMA:

GPU A
  |
网卡 A
  |
网络交换机
  |
网卡 B
  |
GPU B

实际部署还需要满足 GPU、网卡、驱动、PCIe 拓扑和软件栈等条件。

7.3 InfiniBand 和 RoCE 的区别

AI 数据中心常见的两种高速网络技术是 InfiniBand 和 RoCE。

InfiniBand:

InfiniBand 是一种面向高性能计算的网络互联技术。

特点:

  1. 专用网络体系。

  2. 低延迟、高吞吐量。

  3. 广泛用于 HPC 和 AI 集群。

  4. 通常需要专用网卡和交换机。

RoCE:

RoCE 全称 RDMA over Converged Ethernet,即基于融合以太网的 RDMA 技术。

它允许 RDMA 在以太网基础设施上运行。

特点:

  1. 可以利用以太网基础设施。

  2. 支持 RDMA 通信。

  3. 设备选型和网络部署更加灵活。

  4. 对交换机配置和拥塞控制有较高要求。

RoCE 网络通常需要合理配置 PFC、ECN 等机制,以控制拥塞和丢包带来的影响。

两者对比:

对比项目InfiniBandRoCE
网络类型专用高速网络以太网承载 RDMA
典型应用HPC、AI 集群AI 数据中心
延迟低取决于网络配置
部署成本通常较高可复用以太网基础设施
运维方式专用网络体系以太网网络体系
主要优势高性能、低延迟灵活、易于融合

如何选择?

如果是大型 AI 训练集群,追求极致性能,可以考虑 InfiniBand。

如果已有成熟的高速以太网基础设施,希望降低部署成本,可以考虑 RoCE。

实际选择还需要综合考虑集群规模、交换机能力、网络运维经验和业务负载。

八、AI 数据中心常见网络拓扑

除了网络协议之外,网络拓扑同样会影响 GPU 集群的通信性能。

常见的两种拓扑是 Fat-tree 和 Rail-optimized。

8.1 Fat-tree(胖树拓扑)

Fat-tree 是一种常见的数据中心网络拓扑。

它通过多层交换机进行连接,通常可以提供较好的网络带宽和路径冗余。

特点:

  1. 网络结构具有层次性。

  2. 可以提供较好的跨节点带宽。

  3. 能够支持大规模服务器通信。

  4. 网络设备和布线成本相对较高。

8.2 Rail-optimized(导轨优化拓扑)

Rail-optimized 是 AI 集群中常见的一种网络设计思路。

它通过将服务器中不同 GPU 对应的网络接口连接到不同的网络 Rail,减少不必要的跨交换机通信。

例如:

机器 A                         机器 B

GPU 0                          GPU 0
  |                              |
网卡 0                          网卡 0
  |                              |
交换机 Rail 0 ---------------- 交换机 Rail 0


GPU 1                          GPU 1
  |                              |
网卡 1                          网卡 1
  |                              |
交换机 Rail 1 ---------------- 交换机 Rail 1

这种设计可以让不同 GPU 的网络流量更加均衡,并减少部分通信路径上的交换跳数。

对于 TP 主要在机内完成、DP 跨机器扩展的训练架构,Rail-optimized 拓扑具有较好的适用性。

九、GPU 通信性能如何监控和排查?

在实际 AI 集群运维中,如果训练速度突然下降,不能只关注 GPU 利用率,还需要检查 GPU 之间的通信链路。

9.1 查看 NVLink 状态

可以使用:

nvidia-smi nvlink --status

主要检查:

  • NVLink 链路是否正常。

  • 链路是否建立。

  • 是否存在链路异常。

  • 实际连接情况是否符合服务器拓扑。

9.2 使用 NCCL Tests 测试通信性能

NCCL 是 NVIDIA 提供的 GPU 集合通信库,广泛用于多 GPU 分布式训练。

NCCL Tests 是用于测试 GPU 集合通信性能的工具。

例如:

./build/all_reduce_perf -b 1G -e 1G -f 2 -g 8

参数含义:

参数含义
-b 1G测试起始数据量
-e 1G测试结束数据量
-f 2数据量增长倍数
-g 8使用 8 张 GPU

通过测试可以观察:

  • AllReduce 带宽。

  • 通信延迟。

  • 不同数据规模下的通信性能。

  • GPU 集合通信是否达到预期。

注意:测试 8 张 GPU 的命令需要在具备 8 张可用 GPU 的环境中执行。

9.3 GPU 通信监控

在 NVIDIA DCGM 监控体系中,可以关注 NVLink 相关指标。

例如:

DCGM_FI_PROF_NVLINK_TX_BYTES

该指标用于观察 NVLink 发送的数据量。

需要注意,它是字节计数类指标,不是直接表示 GB/s 的瞬时带宽。计算带宽时需要结合采样时间间隔进行换算。

9.4 常见故障分析

假设某个 AI 训练任务突然变慢:

  • GPU 利用率只有 30%。

  • GPU 计算能力没有明显异常。

  • 训练任务耗时明显增加。

这时就需要考虑通信是否出现瓶颈。

常见原因:

  1. GPU 之间没有正常建立 NVLink 链路。

  2. 原本应该走 NVLink 的通信绕到了 PCIe。

  3. 跨服务器通信没有正常使用 InfiniBand。

  4. NCCL 通信配置不合理。

  5. 网络出现拥塞或丢包。

  6. GPU 之间的通信拓扑不合理。

排查思路:

训练速度下降
      |
检查 GPU 利用率
      |
GPU 利用率偏低
      |
检查 GPU 通信情况
      |
检查 NVLink 状态
      |
检查 PCIe 拓扑
      |
检查 NCCL 通信性能
      |
检查 InfiniBand / RoCE
      |
定位通信瓶颈

一个重要的经验:

GPU 利用率低,不一定意味着 GPU 算力不足,也可能是 GPU 一直在等待其他 GPU 或网络返回数据。

十、SXM、NVLink、NVSwitch 常见问题

1. SXM 就是带 NVLink 的版本吗?

不完全准确。

SXM 是 GPU 的模块封装和连接形态,而 NVLink 是 GPU 高速互联技术。

两者经常同时出现在高性能 GPU 服务器中,但不能直接画等号。

2. NVLink 是一种协议吗?

可以理解为一种完整的 GPU 高速互联技术规范,包含物理链路和通信协议等内容。

它的目标是实现 GPU 之间的高速数据传输。

3. NVSwitch 是交换机吗?

NVSwitch 是专门为 GPU 互联设计的交换芯片。

它负责连接多张 GPU,让 GPU 之间可以进行高效通信。

可以记忆为:

  • NVLink:GPU 之间的高速互联链路。

  • NVSwitch:负责交换 GPU 数据的专用芯片。

4. TP 和 PP 是硬件属性吗?

不是。

TP 和 PP 属于训练框架中的并行策略,是可以通过训练配置进行调整的。

它们决定模型如何拆分,以及不同 GPU 之间如何协同计算。

硬件拓扑则决定这些通信任务能以多快的速度完成。

十一、本次学习总结

通过本次学习,我对 AI 集群中 GPU 之间的通信有了更加清晰的认识。

重点掌握以下内容:

  1. GPU 通信分为三个层次:卡内、机内和机间。不同层次的带宽差异很大。

  2. NVLink 是 GPU 高速互联技术,NVSwitch 是 GPU 互联交换芯片,两者共同构成高性能多 GPU 服务器的重要基础。

  3. 带宽单位必须区分 bit 和 Byte,400 Gb/s 换算后是 50 GB/s。

  4. AllReduce 是分布式训练中的重要通信操作,多 GPU 训练不仅需要计算能力,也需要足够的通信能力。

  5. TP、PP、DP 是常见的并行策略,分别对应张量、流水线和数据并行。

  6. RDMA 和 GPUDirect RDMA 可以减少数据传输过程中的额外开销,提高跨服务器 GPU 通信效率。

  7. InfiniBand 和 RoCE 是 AI 数据中心常见的高速网络方案,需要结合成本、性能和运维能力进行选择。

  8. GPU 服务器的网络拓扑非常重要,通信频率高的 GPU 应尽可能部署在高速互联范围内。

我认为本次学习最重要的一个知识点是:

AI 集群的性能不仅取决于 GPU 本身的计算能力,还取决于 GPU 之间的通信能力。

当模型规模越来越大,GPU 数量越来越多时,网络不再只是连接服务器的基础设施,而是直接影响 AI 算力利用率的重要组成部分。

Logo

更多推荐