March 2025
GPU间的通信可以分为节点间通信(Inter Node Communication)和节点内通信(Intra Node Communication)。
节点内通信 (Intra Node Communication):
节点间通信 (Inter Node Communication):
上图展示了系统内部和系统之间的通信方式。在系统内部,GPU间通过共享内存、PCI或NVLink进行通信。系统间的通信则通过套接字(Sockets)、InfiniBand或其他插件进行。底层通信方式包括NVLink、PCI、共享内存、套接字、InfiniBand及其他网络。
GPUDirect技术旨在为需要GPU与其他设备之间进行快速数据传输的HPC(高性能计算)及其他应用提供支持。
GPUDirect 产品系列是 Magnum IO 的一部分,其产品结构如下:
GPUDirect技术的发展历程及其在不同CUDA版本中的支持情况:
在没有加速通信的情况下,DGX A100系统中的数据传输路径如下:
1. 数据从GPU传输到系统内存中的CUDA驱动程序缓冲区。
2. 数据被复制到网卡缓冲区。
3. 数据被传输出去到另一个节点。
使用GPUDirect后,数据传输路径得到优化:
* 无需将数据复制到系统内存中。
* 数据直接从GPU内存传输到另一台服务器。网络接口卡需要位于同一个根集线器(root hub)上。
GPUDirect P2P 实现了GPU之间的直接传输。
RDMA(远程直接内存访问)通过直接向应用程序内存或从应用程序内存传输数据来提升性能。下图对比了传统的TCP/IP通信和RDMA over InfiniBand的路径。TCP/IP需要在用户空间、内核空间和硬件之间进行多次数据拷贝,而RDMA绕过了内核,显著减少了开销。
GPUDirect RDMA 可带来高达10倍的性能提升。
下图对比了有无GPUDirect时网络数据处理的差异:
* 无GPUDirect: 网络由CPU和CPU内存处理。这需要 2 次完整的拷贝操作和 2 次PCIe事务。
* 使用GPUDirect: 网络直接与GPU内存交互。这需要 0 次完整的拷贝操作和 1 次PCIe事务。
使用GPUDirect RDMA可以降低GPU利用率、CPU使用率和延迟。
NVLink是一种高速互联技术,其大规模性能随架构发布而不断提升。
上图展示了从2014年到2024年NVLink技术的发展:
* P100: 第1代 NVLink
* V100: 第2代 NVLink
* A100: 第3代 NVLink
* H200: 第4代 NVLink
* GB200: 第5代 NVLink
其带宽(GB/sec)呈阶梯式显著增长。
NVSwitch 通过扩展NVLink连接,实现了更大规模的GPU集群。
规格参数表摘要:
| 特性 | 第一代 | 第二代 | 第三代 | 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 |
对于大模型、长上下文长度或低延迟的场景,多GPU是必需的。
下图对比了传统的Mesh拓扑和使用NVSwitch的拓扑结构。在8-GPU配置下,Mesh拓扑通过点对点连接,带宽受限于直连链路(0.2 TB/s)。而NVSwitch提供了一个全连接的网络,使得每个GPU都能以极高的带宽(3.6 TB/s)与其他所有GPU通信。
每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(NVIDIA Collective Communication Library)是一个在GPU上运行的、针对GPU缓冲区的通信库,旨在优化GPU之间的通信。
它支持多种物理连接方式:
- 节点内通信:NVLink, PCI, 共享内存(Shared memory)。
- 节点间通信:Sockets, InfiniBand, 以及其他网络。
相关资源链接:
- 二进制文件: https://developer.nvidia.com/nccl and in NGC containers
- 源代码: https://github.com/nvidia/nccl
- 性能测试: https://github.com/nvidia/nccl-tests
NCCL是深度学习软件栈中的一个关键组件,位于深度学习框架(如TensorFlow, PyTorch)之下,与CUDNN、CUBLAS等库处于同一层级,共同调用CUDA API来驱动NVIDIA GPU。
NCCL为所有平台提供优化的CUDA核心(Kernels),其架构主要包含四个步骤:
NCCL的拓扑检测功能为所有平台提供广泛支持,它通过多种来源收集信息来构建精确的系统拓扑图:
cpuid/arch获取。/sys文件系统获取。IB Verbs获取IB速度、多端口、socket-direct等信息。NCCL_TOPO_FILE)中获取。NCCL能够识别并优化多种硬件配置,例如标准的PCI连接、DGX-1、DGX-2和DGX A100系统。
集合通信指的是涉及多个发送者和/或接收者的通信模式。NCCL实现了多种高效的集合通信原语。
以下是几种核心的集合通信操作:
一个发送者,多个接收者。单个GPU上的数据被复制到所有其他GPU。
一个发送者,数据被分发给多个接收者。发送者GPU上的数据被分割成块,每个接收者GPU接收其中一块。
多个发送者,一个接收者。多个GPU上的数据块被收集到一个目标GPU上。
从所有参与者那里收集消息,并将收集到的完整数据分发给所有参与者。每个GPU都将拥有所有其他GPU的数据。
合并来自所有发送者的数据,并将结果传递给一个接收者。通常执行的操作是求和、求最大值等。
合并来自所有发送者的数据,并将结果传递给所有参与者。这是分布式训练中最常见的操作之一,例如用于同步梯度。
合并来自所有发送者的数据,并将结果分布到各个参与者。它先对数据进行归约操作,然后将归约后的结果分散给不同的GPU。
从每个参与者向所有其他参与者分发/收集不同的消息。该操作相当于对分布式数据进行矩阵转置。
DGX 上的多环(Multi-rings)拓扑结构。下图展示了多个 DGX 节点如何通过多个环形网络连接,以实现高效的 All-Reduce 通信。
面向高速链路优化的设计 (Rail-optimized design)
下图对比了传统的网络结构设计与面向高速链路优化的设计。
SMBPBI
- 提供带外(out-of-band)解决方案,用于监控和管理 NVIDIA GPU。
- 无需接触主机 CPU 系统。
- 监控能力:
- NVLINK 信息,状态,错误计数。
- GPU 速度,错误计数。
- 图形和内存时钟。
- 限制,违规时间。
电源:
能量查询。
GPU 利用率:
gouUtil, memUtil, encUtil, decUtil。GPU 和内存时钟:
PCIe:
ECC/页面重映射:
事件警报。
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 额外检查
lsmod | grep nvidialsmod | grep nvidia_peermemnvswitchnvidia-fabricmanager.servicenvidia-smi 中的 'd' 状态。#nvidia-smi -I +sguild, #ps -o pid,state,pcpu,cmd SPIDSystemlogmonitor from Node-Problem-Detector 是一个很好的 dmesg 监控程序,支持 Prometheus。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
NVLink/NVSwitch 问题
已知问题:
建议:
驱动相关问题
已知问题:
建议:
nvidia-bug-report.sh性能问题
已知问题:
建议:
NCCL_DEBUG 为 "WARN" 将使 NCCL 在返回错误前打印明确的警告消息GPU 其他问题
已知问题:
建议:
dcgm diag -r 3dcgm diag --eudGPU 丢失 (GPU LOSS)
已知问题:
建议:
ECC
已知问题:
建议:
注意:
作业挂起 (JOB HANG)
已知问题:
NcclCommGetAsyncError, NcclCommAbort建议:
网络 (NETWORK)
已知问题:
建议: