高性能 GPU 服务器硬件拓扑与集群组网详解

详解大模型训练集群的硬件拓扑:8 卡 GPU 主机内 CPU、内存、NVMe 与 GPU 如何通过 PCIe 总线和交换芯片互联,NVLink 各代的演进与监控方式,以及 NVSwitch 与 NVLink Switch 在整机与跨机互联中的作用。

https://arthurchiao.art/blog/gpu-advanced-notes-1-zh/

1 术语与基础

大模型训练一般都是用单机 8 卡 GPU 主机组成集群,机型包括 8*{A100,A800,H100,H800} 。 下面一台典型 8*A100 GPU 的主机内硬件拓扑:

典型 8 卡 A100 主机硬件拓扑

1.1 PCIe 交换芯片

CPU、内存、存储(NVME)、GPU、网卡等支持 PICe 的设备,都可以连接到 PCIe 总线或专门的 PCIe 交换芯片,实现互联互通。

PCIe 目前有 5 代产品,最新的是 Gen5

定义

Wikipedia 上 NVLink 上的定义:

NVLink is a wire-based serial multi-lane near-range communications link developed by Nvidia. Unlike PCI Express, a device can consist of multiple NVLinks, and devices use mesh networking to communicate instead of a central hub. The protocol was first announced in March 2014 and uses a proprietary high-speed signaling interconnect (NVHS).

简单总结:同主机内不同 GPU 之间的一种高速互联方式,

  1. 是一种短距离通信链路,保证包的成功传输,更高性能,替代 PCIe,
  2. 支持多 lane,link 带宽随 lane 数量线性增长,
  3. 同一台 node 内的 GPU 通过 NVLink 以 full-mesh 方式(类似 spine-leaf)互联,
  4. NVIDIA 专利技术。

    演进:1/2/3/4 代

主要区别是单条 NVLink 链路的 lane 数量、每个 lane 的带宽(图中给的都是双向带宽)等:

NVLink 演进。Image from: [HotChips 2022 NVLink-Network Switch](https://hc34.hotchips.org/)

例如,

  • A100 是 2 lanes/NVSwitch * 6 NVSwitch * 50GB/s/lane= 600GB/s 双向带宽(单向 300GB/s)。注意:这是一个 GPU 到所有 NVSwitch 的总带宽
  • A800 被阉割了 4 条 lane,所以是 8 lane * 50GB/s/lane = 400GB/s 双向带宽(单向 200GB/s)。

    监控

基于 DCGM(Data Center GPU Manager,数据中心GPU 管理器)可以采集到实时 NVLink 带宽:

Metrics from dcgm-exporter

1.3 NVSwitch

还是参考下图,

典型 8 卡 A100 主机硬件拓扑

NVSwitch 是 NVIDIA 的一款交换芯片,封装在 GPU module 上,并不是主机外的独立交换机
下面是真机图,浪潮的机器,图中 8 个盒子就是 8 片 A100,右边的 6 块超厚散热片下面就是 NVSwitch 芯片:

Inspur NF5488A5 NVIDIA HGX A100 8 GPU [Assembly Side View](https://www.servethehome.com/chatgpt-hardware-a-look-at-8x-nvidia-a100-systems-powering-the-tool-openai-microsoft-azure-supermicro-inspur-asus-dell-gigabyte/)

NVSwitch 听名字像是交换机,但实际上是 GPU module 上的交换芯片,用来连接同一台主机内的 GPU

2022 年,NVIDIA 把这块芯片拿出来真的做成了交换机,叫 NVLink Switch, 用来跨主机连接 GPU 设备

1.5 HBM (High Bandwidth Memory)

由来

传统上,GPU 显存和普通内存(DDR)一样插在主板上,通过 PCIe 连接到处理器(CPU、GPU), 因此速度瓶颈在 PCIe,Gen4 是 64GB/s,Gen5 是 128GB/s。

因此,一些 GPU 厂商(不是只有 NVIDIA 一家这么做)将将多个 DDR 芯片堆叠之后与 GPU 芯片封装到一起 (后文讲到 H100 时有图),这样每片 GPU 和它自己的显存交互时,就不用再去 PCIe 交换芯片绕一圈,速度最高可以提升一个量级。 这种“高带宽内存”(High Bandwidth Memory)缩写就是 HBM。

现在 CPU 也有用 HBM 的了,比如 Intel Xeon CPU Max Series 就自带了 64GB HBM2e。

HBM 的市场目前被 SK 海力士和三星等韩国公司垄断。

演进:HBM 1/2/2e/3/3e

From wikipedia HBM

****BandwidthYearGPU
HBM128GB/s/package
HBM2256GB/s/package2016V100
HBM2e~450GB/s2018A100, ~2TB/s; 华为 Ascend 910B
HBM3600GB/s/site2020H100, 3.35TB/s
HBM3e~1TB/s2023H200, 4.8TB/s

![使用了 HBM 的近几代高端 NVIDIA GPU 显存带宽(双向),纵坐标是 TB/s

](../images/notion_aabb1a7214.png)

  • AMD MI300X 采用 192GB HBM3 方案,带宽 5.2TB/s
  • HBM3e 是 HBM3 的增强版,速度从 6.4GT/s 到 8GT/s。

    1.6 带宽单位

大规模 GPU 训练的性能与数据传输速度有直接关系。这里面涉及到很多链路,比如 PCIe 带宽、内存带宽、NVLink 带宽、HBM 带宽、网络带宽等等。

  • 网络习惯用 bits/second (b/s) 表示之外,并且一般说的都是单向(TX/RX);
  • 其他模块带宽基本用 byte/sedond (B/s)transactions/second (T/s) 表示,并且一般都是双向总带宽
    比较带宽时注意区分和转换。

2 典型 8A100/8A800 主机

2.1 主机内拓扑:**2-2-4-6-8-8**

  • 2 片 CPU(及两边的内存,NUMA(Non-Uniform Memory Access,非一致内存访问架构))
  • 2 张存储网卡访问分布式存储,带内管理等)
  • 4 个 PCIe Gen4 Switch 芯片
  • 6 个 NVSwitch 芯片
  • 8 个 GPU
  • 8 个 GPU 专属网卡
    典型 8 卡 A100 主机硬件拓扑

下面这个图画的更专业,需要更多细节的可参考:

NVIDIA DGX A100 主机(官方 8 卡机器)硬件拓扑

存储网卡

通过 PCIe 直连 CPU。用途:

  1. 从分布式存储读写数据,例如读训练数据写 checkpoint 等;
  2. 正常的 node 管理,ssh,监控采集等等。
    官方推荐用 BF3 DPU。但其实只要带宽达标,用什么都行。组网经济点的话用 RoCE,追求最好的性能用 IB。

NVSwitch fabric:intra-node full-mesh

8 个 GPU 通过 6 个 NVSwitch 芯片 full-mesh 连接,这个 full-mesh 也叫 NVSwitch fabric; full-mesh 里面的每根线的带宽是 n * bw-per-nvlink-lane

  • A100 用的 NVLink3,50GB/s/lane,所以 full-mesh 里的每条线就是 12*50GB/s=600GB/s,注意这个是双向带宽,单向只有 300GB/s。
  • A800 是阉割版,12 lane 变成 8 lane,所以每条线 8*50GB/s=400GB/s,单向 200GB/s。

    用 nvidia-smi topo 查看拓扑

下面是一台 8A800 机器上 *nvidia-smi** 显示的实际拓扑(网卡两两做了 bond,NIC 0~3 都是 bond):

  • GPU 之间(左上角区域):都是 NV8,表示 8 条 NVLink 连接;
  • NIC(Network Interface Controller,网络接口控制器) 之间:
  • GPU 和 NIC 之间:

    1.2 GPU 训练集群组网:IDC GPU fabirc

GPU node 互联架构:

计算网络

GPU 网卡直连到置顶交换机(leaf),leaf 通过 full-mesh 连接到 spine,形成跨主机 GPU 计算网络。

  • 这个网络的目的是 GPU 与其他 node 的 GPU 交换数据
  • 每个 GPU 和自己的网卡之间通过 PCIe 交换芯片连接GPU <--> PCIe Switch <--> NIC

    存储网络

直连 CPU 的两张网卡,连接到另一张网络里,主要作用是读写数据,以及 SSH 管理等等。

RoCE vs. InfiniBand

不管是计算网络还是存储网络,都需要 RDMA 才能实现 AI 所需的高性能。RDMA 目前有两种选择:

  • RoCEv2:公有云卖的 8 卡 GPU 主机基本都是这种网络,比如 CX6 8*100Gbps 配置;在性能达标的前提下,(相对)便宜;
  • InfiniBand (IB):同等网卡带宽下,性能比 RoCEv2 好 20% 以上,但是价格贵一倍。

    1.3 数据链路带宽瓶颈分析

单机 8 卡 A100 GPU 主机带宽瓶颈分析

几个关键链路带宽都标在图上了,

  1. 同主机 GPU 之间:走 NVLink,双向 600GB/s,单向 300GB/s
  2. 同主机 GPU 和自己的网卡之间:走 PICe Gen4 Switch 芯片,双向 64GB/s,单向 32GB/s
  3. 跨主机 GPU 之间:需要通过网卡收发数据,这个就看网卡带宽了,目前国内 A100/A800 机型配套的主流带宽是(单向) 100Gbps=12.5GB/s。 所以跨机通信相比主机内通信性能要下降很多。

    3 典型 8H100/8H800 主机

GPU Board Form Factor 分为两种类型:

  • PCIe Gen5
  • SXM5:性能更高一些

    3.1 H100 芯片 layout

下面是一片 H100 GPU 芯片的内部结构:

[单片 H100 GPU 内部逻辑布局](https://developer.nvidia.com/blog/nvidia-hopper-architecture-in-depth/)。

  • 4nm 工艺;
  • 最下面一排是 18 根 Gen4 NVLink;双向总带宽 18 lanes * 50GB/s/lane = 900GB/s
  • 中间蓝色的是 L2 cache;
  • 左右两侧是 HBM 芯片,即显存;

    3.2 主机内硬件拓扑

跟 A100 8 卡机结构大致类似,区别:

  1. NVSwitch 芯片从 6 个减少到了 4 个;真机图如下,
  2. 与 CPU 的互联从 PCIe Gen4 x16 升级到 PCIe Gen5 x16,双向带宽 128GB/s

    3.3 组网

与 A100 也类似,只是标配改成了 400Gbps 的 CX7 网卡, 否则网络带宽与 PCIe Switch 和 NVLink/NVSwitch 之间的差距更大了。

本文结束 感谢您的阅读