Inter-GPU Communication Technology

March 2025

目录

优化的GPU间通信

GPU间的通信可以分为节点间通信(Inter Node Communication)和节点内通信(Intra Node Communication)。

Page 2 - 优化的GPU间通信架构图
Page 2 - 优化的GPU间通信架构图

上图展示了系统内部和系统之间的通信方式。在系统内部,GPU间通过共享内存、PCI或NVLink进行通信。系统间的通信则通过套接字(Sockets)、InfiniBand或其他插件进行。底层通信方式包括NVLink、PCI、共享内存、套接字、InfiniBand及其他网络。

NVIDIA GPUDirect

GPUDirect技术旨在为需要GPU与其他设备之间进行快速数据传输的HPC(高性能计算)及其他应用提供支持。

NVIDIA GPUDirect 产品系列

GPUDirect 产品系列是 Magnum IO 的一部分,其产品结构如下:

Page 4 - GPUDirect 产品系列结构图
Page 4 - GPUDirect 产品系列结构图

时间线

GPUDirect技术的发展历程及其在不同CUDA版本中的支持情况:

Page 5 - GPUDirect 技术发展时间线
Page 5 - GPUDirect 技术发展时间线

理解GPUDirect的工作原理

GPU之间的数据传输(无加速通信)

在没有加速通信的情况下,DGX A100系统中的数据传输路径如下:
1. 数据从GPU传输到系统内存中的CUDA驱动程序缓冲区。
2. 数据被复制到网卡缓冲区。
3. 数据被传输出去到另一个节点。

Page 7 - 无加速通信时的数据传输路径
Page 7 - 无加速通信时的数据传输路径

GPUDirect:采用加速通信的数据传输

使用GPUDirect后,数据传输路径得到优化:
* 无需将数据复制到系统内存中。
* 数据直接从GPU内存传输到另一台服务器。网络接口卡需要位于同一个根集线器(root hub)上。

Page 8 - 采用GPUDirect加速通信时的数据传输路径
Page 8 - 采用GPUDirect加速通信时的数据传输路径

GPUDirect Peer to Peer (P2P)

GPUDirect P2P 实现了GPU之间的直接传输。

Page 9 - GPUDirect P2P 数据传输示意图
Page 9 - GPUDirect P2P 数据传输示意图

RDMA提升吞吐量并降低延迟

RDMA(远程直接内存访问)通过直接向应用程序内存或从应用程序内存传输数据来提升性能。下图对比了传统的TCP/IP通信和RDMA over InfiniBand的路径。TCP/IP需要在用户空间、内核空间和硬件之间进行多次数据拷贝,而RDMA绕过了内核,显著减少了开销。

Page 10 - RDMA与TCP/IP数据传输路径对比
Page 10 - RDMA与TCP/IP数据传输路径对比

NVIDIA GPUDirect RDMA

GPUDirect RDMA 可带来高达10倍的性能提升。

下图对比了有无GPUDirect时网络数据处理的差异:
* 无GPUDirect: 网络由CPU和CPU内存处理。这需要 2 次完整的拷贝操作和 2 次PCIe事务。
* 使用GPUDirect: 网络直接与GPU内存交互。这需要 0 次完整的拷贝操作和 1 次PCIe事务。

使用GPUDirect RDMA可以降低GPU利用率、CPU使用率和延迟。

Page 11 - GPUDirect RDMA性能对比
Page 11 - GPUDirect RDMA性能对比

附加资源

NVLINK 和 NVSwitch

NVLINK

NVLink是一种高速互联技术,其大规模性能随架构发布而不断提升。

Page 14 - NVLink 规模化性能演进图
Page 14 - NVLink 规模化性能演进图

上图展示了从2014年到2024年NVLink技术的发展:
* P100: 第1代 NVLink
* V100: 第2代 NVLink
* A100: 第3代 NVLink
* H200: 第4代 NVLink
* GB200: 第5代 NVLink
其带宽(GB/sec)呈阶梯式显著增长。

NVSWITCH

NVSwitch 通过扩展NVLink连接,实现了更大规模的GPU集群。

Page 15 - NVSwitch 规格参数表
Page 15 - NVSwitch 规格参数表

规格参数表摘要:

特性 第一代 第二代 第三代 NVLink Switch
NVLink域内直接连接的GPU数量 最多8个 最多8个 最多8个 最多576个
NVSwitch GPU-to-GPU带宽 300GB/s 600GB/s 900GB/s 1,800GB/s
总聚合带宽 2.4TB/s 4.8TB/s 7.2TB/s IPB/s
支持的NVIDIA架构 Volta™ Ampere Hopper™ Blackwell

NVSwitch对于多GPU推理至关重要

对于大模型、长上下文长度或低延迟的场景,多GPU是必需的。

下图对比了传统的Mesh拓扑和使用NVSwitch的拓扑结构。在8-GPU配置下,Mesh拓扑通过点对点连接,带宽受限于直连链路(0.2 TB/s)。而NVSwitch提供了一个全连接的网络,使得每个GPU都能以极高的带宽(3.6 TB/s)与其他所有GPU通信。

Page 16: NVSwitch与Mesh拓扑对比
Page 16: NVSwitch与Mesh拓扑对比

每GPU带宽对比:

带宽类型 Mesh NVSWITCH
2-way Bandwidth 0.2 TB/s 3.6 TB/s
4-way Bandwidth 0.6 TB/s 3.6 TB/s
8-way Bandwidth 1.4 TB/s 3.6 TB/s

对LLAMA3推理性能的影响(32k输入,20 tok/sec):

这表明NVSwitch能够显著降低多GPU推理中的通信瓶颈。

NCCL:加速的多GPU集合通信

Page 17: NCCL Logo
Page 17: NCCL Logo

NCCL(NVIDIA Collective Communication Library)是一个在GPU上运行的、针对GPU缓冲区的通信库,旨在优化GPU之间的通信。

它支持多种物理连接方式:
- 节点内通信:NVLink, PCI, 共享内存(Shared memory)。
- 节点间通信:Sockets, InfiniBand, 以及其他网络。

Page 18: GPU间通信方式
Page 18: GPU间通信方式

相关资源链接:
- 二进制文件: https://developer.nvidia.com/nccl and in NGC containers
- 源代码: https://github.com/nvidia/nccl
- 性能测试: https://github.com/nvidia/nccl-tests

NCCL在深度学习栈中的位置

NCCL是深度学习软件栈中的一个关键组件,位于深度学习框架(如TensorFlow, PyTorch)之下,与CUDNN、CUBLAS等库处于同一层级,共同调用CUDA API来驱动NVIDIA GPU。

Page 19: NCCL在DL软件栈中的位置
Page 19: NCCL在DL软件栈中的位置

NCCL 架构

NCCL为所有平台提供优化的CUDA核心(Kernels),其架构主要包含四个步骤:

  1. 拓扑检测 (Topology detection):构建一个包含所有GPU、网卡(NIC)、CPU、PCI交换机、NVLink和NVSwitch的系统拓扑图。支持为虚拟机(VMs)进行拓扑注入。
  2. 图搜索 (Graph search):进行广泛搜索,以找到最优的环形(rings)或树形(trees)通信路径。该过程包含对每种算法的性能预测和自动调优。
  3. 图连接 (Graph connect):连接跨节点的图。通过PCI、NVLink、GPU DirectRDMA等技术,使用中间先进先出队列(FIFOs)来连接GPU。
  4. CUDA核心 (CUDA Kernels):执行优化的归约(reductions)和拷贝(copies)操作,以最小化流式多处理器(SM)的使用。同时利用CPU线程进行网络通信。
Page 20: NCCL架构流程
Page 20: NCCL架构流程

拓扑检测详解

NCCL的拓扑检测功能为所有平台提供广泛支持,它通过多种来源收集信息来构建精确的系统拓扑图:

NCCL能够识别并优化多种硬件配置,例如标准的PCI连接、DGX-1、DGX-2和DGX A100系统。

Page 21: NCCL拓扑检测机制
Page 21: NCCL拓扑检测机制

集合通信 (Collective Communication)

集合通信指的是涉及多个发送者和/或接收者的通信模式。NCCL实现了多种高效的集合通信原语。

Page 22: 集合通信操作概览
Page 22: 集合通信操作概览

以下是几种核心的集合通信操作:

Broadcast (广播)

一个发送者,多个接收者。单个GPU上的数据被复制到所有其他GPU。

Page 23: Broadcast操作示意图
Page 23: Broadcast操作示意图

Scatter (分散)

一个发送者,数据被分发给多个接收者。发送者GPU上的数据被分割成块,每个接收者GPU接收其中一块。

Page 24: Scatter操作示意图
Page 24: Scatter操作示意图

Gather (收集)

多个发送者,一个接收者。多个GPU上的数据块被收集到一个目标GPU上。

Page 25: Gather操作示意图
Page 25: Gather操作示意图

All-Gather (全局收集)

从所有参与者那里收集消息,并将收集到的完整数据分发给所有参与者。每个GPU都将拥有所有其他GPU的数据。

Page 26: All-Gather操作示意图
Page 26: All-Gather操作示意图

Reduce (归约)

合并来自所有发送者的数据,并将结果传递给一个接收者。通常执行的操作是求和、求最大值等。

Page 27: Reduce操作示意图
Page 27: Reduce操作示意图

All-Reduce (全局归约)

合并来自所有发送者的数据,并将结果传递给所有参与者。这是分布式训练中最常见的操作之一,例如用于同步梯度。

Page 28: All-Reduce操作示意图
Page 28: All-Reduce操作示意图

Reduce-Scatter (归约-分散)

合并来自所有发送者的数据,并将结果分布到各个参与者。它先对数据进行归约操作,然后将归约后的结果分散给不同的GPU。

Page 29: Reduce-Scatter操作示意图
Page 29: Reduce-Scatter操作示意图

All-to-All (全局交换)

从每个参与者向所有其他参与者分发/收集不同的消息。该操作相当于对分布式数据进行矩阵转置。

Page 30: All-to-All操作示意图
Page 30: All-to-All操作示意图

环形算法 (Ring Algorithm)

DGX 上的多环(Multi-rings)拓扑结构。下图展示了多个 DGX 节点如何通过多个环形网络连接,以实现高效的 All-Reduce 通信。

Page 31: 展示了三个 DGX 节点通过多重环形连接进行通信的架构图。
Page 31: 展示了三个 DGX 节点通过多重环形连接进行通信的架构图。

节点间通信 (Inter-node communication)

面向高速链路优化的设计 (Rail-optimized design)

下图对比了传统的网络结构设计与面向高速链路优化的设计。

Page 32: 对比经典网络结构设计与面向高速链路优化的设计,后者通过流量本地化避免路由冲突。
Page 32: 对比经典网络结构设计与面向高速链路优化的设计,后者通过流量本地化避免路由冲突。

最佳实践 - 监控与故障总结

NVIDIA 监控套件 (NVIDIA Monitoring Suite)

GPU 和 InfiniBand 监控

SMBPBI
- 提供带外(out-of-band)解决方案,用于监控和管理 NVIDIA GPU。
- 无需接触主机 CPU 系统。
- 监控能力:
- NVLINK 信息,状态,错误计数。
- GPU 速度,错误计数。
- 图形和内存时钟。
- 限制,违规时间。

DCGM-exporter
- NVIDIA 数据中心 GPU 监控工具。
- 开销比 NVML 小。
- 利用 NVIDIA DCGM 为 Prometheus 导出 GPU 指标。
- 关键指标:
- 时钟:DCGM_FI_DEV_SM_CLOCK, DCGM_FI_DEV_MEM_CLOCK
- 温度:DCGM_FI_DEV_GPU_TEMP, DCGM_FI_DEV_MEMORY_TEMP
- 功耗:DCGM_FI_DEV_POWER_USAGE, DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION
- PCIe:DCGM_FI_PROF_PCIE_TX_BYTES, DCGM_FI_PROF_PCIE_RX_BYTES
- 内存:DCGM_FI_DEV_MEM_COPY_UTIL, DCGM_FI_DEV_FB_FREE, DCGM_FI_DEV_FB_USED
- XID 错误和违规:DCGM_FI_DEV_XID_ERRORS, DCGM_FI_DEV_POWER_VIOLATION
- 可靠性:DCGM_FI_DEV_RETIRED_DBE, DCGM_FI_DEV_ECC_SBE_VOL_TOTAL, DCGM_FI_DEV_ECC_DBE_VOL_TOTAL, DCGM_FI_DEV_RETIRED_SBE, DCGM_FI_DEV_RETIRED_DBE
- NVLINK:DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL, DCGM_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_TOTAL
- 引擎:DCGM_FI_PROF_GR_ENGINE_ACTIVE, DCGM_FI_PROF_SM_ACTIVE

GPU 额外检查

UFM Grafana InfiniBand Telemetry
- 提供一个新的 UFM telemetry Prometheus 端点,带有易于阅读的标签。
- 实时网络监控。
- 支持的指标:
- 端口流量计数器:PortXmitDataExtended, PortRcvDataExtended, PortXmitPktsExtended, PortRcvPktsExtended
- 错误计数器:SymbolErrorCounter, LinkErrorRecoveryExtended, LinkDownedExtended, PortRcvErrorsExtended, PortRcvRemotePhysicalErrorsExtended, PortRcvSwitchRelayErrorsExtended, PortXmitDiscardsExtended, PortXmitConstraintErrorsExtended, PortRcvConstraintErrorsExtended, LocalLinkIntegrityErrorsExtended, ExcessiveBufferOverrunErrorsExtended, VL15DroppedExtended, PortXmitWaitExtended
- 计数器描述:13-Infiniband Counters.pdf

典型问题-1

NVLink/NVSwitch 问题

驱动相关问题

性能问题

GPU 其他问题

典型问题-2

GPU 丢失 (GPU LOSS)

ECC

作业挂起 (JOB HANG)

网络 (NETWORK)