高性能GPU服务器硬件拓扑和集群组网
转载自:http://arthurchiao.art/blog/gpu-advanced-notes-1-zh/#11-pcie-%E4%BA%A4%E6%8D%A2%E8%8A%AF%E7%89%87
感谢原作者的分享!在此基础上改动为个人版本。
1 术语与基础
大模型训练一般都是用单机 8 卡 GPU 主机组成集群,机型包括 8*{A100,A800,H100,H800}
。 下面一台典型 8*A100 GPU 的主机内硬件拓扑:
需要重点理解的组成部件包括:
- PCIE交换芯片
- NVSwitch
- NVLink Switch
- HBM
本节将基于这张图来介绍一些概念和术语,有基础的可直接跳过。
1.1 PCIe 交换芯片
用于连接CPU、内存、存储(NVME)、GPU、网卡等支持 PICe 的设备,实现互联互通。
PCIe 目前有 5 代产品,最新的是 **Gen5
**。
1.2 NVLink技术
1)定义
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之间的一种高速互联方式,由NVSwitch连接同一主机内的多个GPU而构成。
- 是一种短距离通信链路,能保证包的成功传输,提高性能,用于替代 PCIe;
- 支持多 lane,链路带宽随 lane 数量线性增长;
- 同一台 node 内的 GPU 通过 NVLink 以 full-mesh 方式(类似 spine-leaf)互联;
- 是NVIDIA的专利技术。
2)NVLink技术演进
从2016年的第1代开始,到2022年已升级到第4 代。
图示为版本差异:主要区别是单条 NVLink 链路的 lane 数量以及每个 lane 的带宽(图中给的都是双向带宽)等:
3)NVLink总带宽的计算方式
- A100的双向带宽是600GB/s,单向带宽是300GB/s
- A800 被阉割了 4 条 lane,所以是双向带宽是400GB/s,单向带宽是200GB/s
4)监控NVLink带宽的方法
基于 DCGM 可以采集到实时 NVLink 带宽
1.3 NVSwitch芯片
NVSwitch 是 NVIDIA 的一款交换芯片,封装在 GPU模组(module)上,用于连接同一主机内GPU。
如下图所示,为浪潮机器的真机图,左侧的8 个nvdia盒子就是 8 片 A100 GPU,而右侧的 6 块超厚散热片下面就是 NVSwitch 芯片。
1.4 NVLink Switch
请注意,别和NVSwitch弄混淆了!
2022 年,NVIDIA 把NVSwitch芯片拿出来,做成了交换机,叫 NVLink Switch, 用来跨主机连接 GPU 设备。
1.5 HBM
1)什么是HBM?
美光副总裁暨计算与网络事业部计算产品事 业群总经理Praveen Vaidyanathan指出,芯片性能表现与存储器的频宽和容量成正相关,随着大语言模型(LLM)参数量增加,也需要更高频宽存储器,AI处理器才能顺利运行。
GDDR类型(传统):(Graphics Double Data Rate)
- 在传统显卡中,GPU的显存采用GDDR类型,以平铺的方式封装在 GPU 周围,通过较长的总线与GPU相连。(单层设计,绕远路)
- GDDR6 的单芯片带宽通常在 14-18 Gbps 左右
- 功耗高,单芯片容量小,需要更高的频率来提高带宽,而且总线也长,需要更多能耗来驱动
HBM类型(新技术):(High Bandwidth Memory)
- 可简单理解为多个DRAM透过先进封装堆叠起来,并且通过硅中介层(interposer)与 GPU 直接连接,减少了总线的长度和复杂性传输速度快,储存空间也更大。(多层设计,直连)
- HBM2 的带宽可以达到 256-512 GB/s 或更高。
- HBM 的能效更高,它的总线更宽,但工作频率较低,且通过堆叠设计缩短了显存和 GPU 之间的距离。这种设计显著降低了功耗。
HBM 的市场目前被 SK 海力士和三星等韩国公司垄断。
现在 CPU 也有用 HBM 的了,比如 Intel Xeon CPU Max Series 就自带了 64GB HBM2e。
2)HDM技术演进:
From wikipedia HBM
HBM已有5代:
版本 | Bandwidth | Year | GPU |
---|---|---|---|
HBM | 128GB/s/package | ||
HBM2 | 256GB/s/package | 2016 | V100 |
HBM2e | ~450GB/s | 2018 | A100, ~2TB/s ; 华为 Ascend 910B |
HBM3 | 600GB/s/site | 2020 | H100, 3.35TB/s |
HBM3e | ~1TB/s | 2023 | H200 , 4.8TB/s |
- 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 典型8卡A100/A800主机构成
2.1 主要部件
- 2 片 CPU(以及两边的内存[DRAM],NUMA)
- 2 张网卡(用于连接存储、带内管理等)
- 4 个 PCIe Gen4 Switch 芯片(用于CPU与显卡连接)
- 6 个 NVSwitch 芯片(用于连接主机内的8块GPU)
- 8 个 GPU
- 8 个 GPU 专属网卡(GPU卡 - PCIE总线 - Infiniband网卡)
可参考下图构成:
1)存储网卡
通过 PCIe 直连 CPU,用途:
- 从分布式存储读写数据,例如读训练数据,写checkpoint等。
- 正常的 node 管理,ssh,监控采集等等。
官方推荐用 BF3 DPU。但其实只要带宽达标,用什么都行。组网经济点的话用 RoCE,追求最好的性能用 IB。
2)NVSwitch(删除)
8 个 GPU 通过 6 个 NVSwitch 芯片 full-mesh 连接,这个 full-mesh 也叫 **NVSwitch fabric
**;
full-mesh 里面的每根线的带宽是 n * bw-per-nvlink-lane,比如:
A100 用的 NVLink3,每条lane的带宽是50GB/s
A800 是阉割版,12 lane 变成 8 lane
3)查看拓扑
使用nvidia-smi topo
命令可以查看部件连接拓扑:
下面是一台 8*A800 机器上 nvidia-smi
显示的实际拓扑(网卡两两做了 bond,NIC 0~3 都是 bond):
GPU 之间(左上角区域):都是 **
NV8
**,表示 8 条 NVLink 连接;NIC 之间:
- 在同一片 CPU 上:**
NODE
,表示不需要跨 NUMA,但需要跨 PCIe 交换芯片**; - 不在同一片 CPU 上:**
SYS
,表示需要跨 NUMA**;
- 在同一片 CPU 上:**
GPU 和 NIC 之间:
- 在同一片 CPU 上,且在同一个 PCIe Switch 芯片下面:**
PXB
,表示只需要跨 PCIe 交换芯片**; - 在同一片 CPU 上,且不在同一个 PCIe Switch 芯片下面:**
NODE
,表示需要跨 PCIe 交换芯片和 PCIe Host Bridge**; - 不在同一片 CPU 上:**
SYS
,表示需要跨 NUMA、PCIe 交换芯片,距离最远**;
- 在同一片 CPU 上,且在同一个 PCIe Switch 芯片下面:**
2.2 GPU 训练集群组网
计算节点互联的网络架构:主要连接计算网络和存储网络
1)计算网络
GPU 网卡直连到叶层交换机(leaf),leaf 通过 full-mesh(点对点直连)的方式连接到脊层交换机(spine),形成跨主机 GPU 计算网络。
这个网络的目的是 GPU 与其他计算节点的 GPU交换数据;
服务器内部的GPU和存储网卡通过PCIe 交换芯片连接
$ nvidia-smi
+—————————————————————————————+
| NVIDIA-SMI 535.161.03 Driver Version: 535.161.03 CUDA Version: 12.2 |
|—————————————–+———————-+———————-+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA H20 On | 00000000:04:00.0 Off | 0 |
| N/A 24C P0 72W / 500W | 0MiB / 97871MiB | 0% Default |
| | | Disabled |
+—————————————–+———————-+———————-+
| 1 NVIDIA H20 On | 00000000:23:00.0 Off | 0 |
| N/A 24C P0 71W / 500W | 0MiB / 97871MiB | 0% Default |
| | | Disabled |
+—————————————–+———————-+———————-+
…
+—————————————–+———————-+———————-+
| 7 NVIDIA H20 On | 00000000:E4:00.0 Off | 0 |
| N/A 24C P0 72W / 500W | 0MiB / 97871MiB | 0% Default |
| | | Disabled |
+—————————————–+———————-+———————-+
$ nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 NIC0 NIC1 CPU Affinity NUMA Affinity GPU NUMA ID
GPU0 X NV18 NV18 NV18 NV18 NV18 NV18 NV18 SYS SYS 0-95,192-287 0 N/A
GPU1 NV18 X NV18 NV18 NV18 NV18 NV18 NV18 SYS SYS 0-95,192-287 0 N/A
GPU2 NV18 NV18 X NV18 NV18 NV18 NV18 NV18 SYS SYS 0-95,192-287 0 N/A
GPU3 NV18 NV18 NV18 X NV18 NV18 NV18 NV18 SYS SYS 0-95,192-287 0 N/A
GPU4 NV18 NV18 NV18 NV18 X NV18 NV18 NV18 NODE NODE 96-191,288-383 1 N/A
GPU5 NV18 NV18 NV18 NV18 NV18 X NV18 NV18 NODE NODE 96-191,288-383 1 N/A
GPU6 NV18 NV18 NV18 NV18 NV18 NV18 X NV18 PHB PHB 96-191,288-383 1 N/A
GPU7 NV18 NV18 NV18 NV18 NV18 NV18 NV18 X NODE NODE 96-191,288-383 1 N/A
NIC0 SYS SYS SYS SYS NODE NODE PHB NODE X PIX
NIC1 SYS SYS SYS SYS NODE NODE PHB NODE PIX X
$ lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Device 14a4 (rev 01)
c0:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Device 149e (rev 01)
c0:01.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 14ab (rev 01)
c1:00.0 PCI bridge: Broadcom / LSI PEX890xx PCIe Gen 5 Switch (rev b0) # <– PCIe Gen5
c2:00.0 PCI bridge: Broadcom / LSI PEX890xx PCIe Gen 5 Switch (rev b0)
c3:00.0 3D controller: NVIDIA Corporation Device 2329 (rev a1)
c6:00.0 Ethernet controller: Mellanox Technologies MT2894 Family [ConnectX-6 Lx] # <– Mellanox CX6
c6:00.1 Ethernet controller: Mellanox Technologies MT2894 Family [ConnectX-6 Lx]
…
$ ibstat
CA ‘mlx5_0’
CA type: MT4127
Number of ports: 1
Port 1:
State: Down
Physical state: Disabled
Rate: 40
Base lid: 0
LMC: 0
SM lid: 0
Capability mask: 0x00010000
Link layer: Ethernet
CA ‘mlx5_1’
CA type: MT4127
Number of ports: 1
Port 1:
State: Down
Physical state: Disabled
Rate: 40
Base lid: 0
LMC: 0
SM lid: 0
Capability mask: 0x00010000
Link layer: Ethernet