【AI的基建】 8卡 GPU 服务器与 NVLink/NVSwitch 互联技术

346 阅读13分钟

🟡🔘🔴

🟡 PCIe的意义

PCIe是GPU与CPU通信的必备通道,负责系统管理、任务调度和数据传输基础功能;而NVLink是专为GPU间高速通信设计的专用通道,能大幅提升大模型训练效率,但技术上可以省略,即没有NVLink的8卡服务器仍能工作,只是梯度同步等操作会受限于PCIe带宽,导致训练速度下降30%-70%。当前所有GPU服务器都必须保留PCIe连接,而NVLink属于性能加速的可选配置,其价值在大模型训练场景尤为突出。

假设你经营一家全国性快递公司:

  • CPU = 总部调度中心
  • GPU = 各地分拣中心
  • NVLink = 分拣中心之间的直达高速公路
  • PCIe = 分拣中心与总部的普通公路

🔘 1. CPU负责系统启动:

计算机启动时,BIOS 固件由CPU加载执行,如果GPU不连接CPU,系统根本无法启动

🔘 2. CPU负责任务调度

(1)CUDA内核程序由CPU发起,(2)内存分配的指令由CPU下达,(3)异常处理依赖CPU

即使使用NVLink,GPU仍有20%的指令来自CPU,就像总部决定北京分拣中心处理华北包裹,上海分拣中心突发火灾,需要总部协调

🔘 3. CPU负责内存管理

(1)CPU管理统一内存地址空间,(2)GPU显存映射需要CPU参与,(3)数据分页错误由CPU处理

只有总部知道哪些仓库有空余仓位,包裹地址错误时需要总部修正,NVIDIA的UM(Unified Memory)技术依赖CPU内存控制器

🔘 4. CPU负责I/O交互

(1)网络数据通过CPU的PCIe通道进入,(2)存储设备由CPU控制,(3)USB等外设只能连接CPU

就像国际包裹必须通过总部海关,客户电话只能打到总部呼叫中心,因为实际的训练数据路径:SSD → CPU内存 → GPU显存。所以靠CPU连接外部世界。

🔘 5. 具备容错机制

(1)ECC内存纠错需要CPU参与,(2)GPU运算错误需要CPU上报,(3)系统看门狗定时器由CPU管理

分拣机卡死时需要总部远程重启,暴雨灾害时总部启动应急预案,NVIDIA的SBE(Single Bit Error)纠错需CPU配合


当您看到某些技术宣称"绕过CPU"时,真相是:

  1. GPUDirect RDMA:允许GPU直接访问网卡,但仍需CPU初始化DMA引擎,内存地址映射由CPU建立
  2. NVIDIA Magnum IO:看似GPU直连存储,实则CPU仍要加载NVMe驱动,文件系统元数据依赖CPU

CPU是数字世界的"意识",GPU是"肌肉",没有意识的肌肉只是行尸走肉(无法自主行动),肌肉越发达(GPU算力越强),越需要智能调度(CPU协调),未来趋势:CPU正在演变成"系统服务处理器"(SSP),专注管理职能,试着用这个框架理解8卡服务器:就像8个超级分拣中心,虽然它们之间有直达高速公路(NVLink),但公司运营仍然需要总部(CPU)来制定规则、处理异常、连接外部世界。


🟡 NVLink的意义

🔘 PCIe直连——普通公路

每个工人(GPU)只能通过一条小路(PCIe通道)向总部(CPU)汇报,但道路数量有限(每个CPU只有128条"车道") ,总部处理能力有限(CPU要同时管理GPU、网卡等设备),而且工人之间沟通必须经过总部中转

在这里插入图片描述

🔘 PCIe Switch——立交桥系统

在总部附近建设立交桥(PCIe Switch芯片):每个立交桥可扩展出更多出口,工人可以直接通过立交桥沟通,减少总部压力,但绕行立交桥会增加沟通时间(延迟)。

在这里插入图片描述

一个Switch芯片用16条车道就能扩展出5个x16接口 形成三种拓扑结构:

  • 平衡模式:工人分组管理(适合小规模任务)
  • 通用模式:所有工人共享资源(适合多数AI训练)
  • 级联模式:多层立交桥(适合超大模型)

在这里插入图片描述

🔘 NVLink——专用高铁

在工人之间修建直达高铁:每两个工人之间都有专用轨道(NVLink通道)不经过总部直接沟通,传输速度提升7倍(对比PCIe 5.0)

  • 第四代NVLink带宽达900GB/s(相当于每小时运送900吨货物)
  • 每个H100 GPU有18个NVLink接口(可连接18个邻居)
  • 支持全双工通信(双向轨道同时运行)

在这里插入图片描述

以第四代 NVLink 和 Hopper GPU 芯片架构为例,已经支持高达双向 900GB/s 的带宽,比 PCIe 5.x x16 的 126GB/s 提升了 7 倍的速率。并且每个 GPU 提供了 18 个 NVLink 接口。

在这里插入图片描述

🔘 NVSwitch——高铁总站

建设中央车站(NVSwitch芯片):所有工人的高铁都直达总站,任意两人沟通只需经过总站一次,彻底消除通信瓶颈

DGX-2 解决方案加倍了 v100 的数量到 16 张,同时 HBM2 升级到 32GB/块,共计 512GB,CPU 也升级为双路 2.7G 24 核 Xeon 白金 8168 CPU。其中最值得关注的就是 NVSwitch 技术。

在这里插入图片描述

NVSwitch,即:NVLink Switch,作为单机内多个 GPU NVLink 的 Hub,本质是一块 ASIC 高速交换芯片,集成在 DGX/HGX 等 NVIDIA 独家整机方案中(区别于网络交换机)。下为集成了 4 张 NVSwitch 芯片的实物图。在这里插入图片描述

NVSwitch 具有 18 个 NVLink Port,支持 NVLink 2.0,所以每个 Port 的带宽为双向 50GB/s,整体带宽为 900GB/s。其中,2 个 Port 预留用于连接 2 颗 CPU,剩余的 16 个 Port 用于连接 GPU。对于 V100(6 Link 口)而言,只需要 6 个 NVSwitch 即可实现 8 张 GPU 之间的 Full-Mesh 拓扑。如下图所示。

在这里插入图片描述

更进一步的,对于 DGX-2 而言,其具有 2 个 GPU Board(基板),共计 16 张 GPU,依旧可以通过 NVSwitch 1.0 来实现 16 张 GPU 和 2 颗 CPU 之间的 Full-Mesh 拓扑,如下图所示。

在这里插入图片描述

可见,NVSwitch 1.0 技术实现了全部 CPU-GPU、GPU-GPU 之间的单 Link 双向 50GB/s,单 GPU 300GB/s 的满带宽高速互联,使得 GPU 计算性能不再收到 PCIe 和 Cube-Mesh 拓扑的限制。

在这里插入图片描述

另外,NVSwitch Full-Mesh 拓扑还解决了 NVLink Cude-Mesh 的远程访问不一致性问题,在 DGX-2 中,每块 GPU 之间都以相同的速度和一致性延迟传输数据。

值得注意的是,NVSwitch 目前依旧是 NVIDIA 的闭源方案,其他厂商的服务器设备并不具备该特性。如果 NVIDIA 开放 NVSwitch 方案,那么在 AI 服务器行业中将会构建一种新的标准。

2020 年,NVIDIA 发布了 NVLink 3.0、NVSwitch 2.0,以及 A100 GPU。 每张 A100 具有 12 条 Link 接口,单 Link 双向 50GB/s(400Gb/s),单卡满带宽 600GB/s,比 NVLink 2.0 提升了 1 倍。由于 Link 数量的增加,NVSwitch 2.0 的 Port 数量也增加到了 36 个,单 Port 双向 50GB/s。由 8 张 A100 和 4 个 NVSwitch 2.0 组成了 DGX A100 系统如下图所示。

  • 2 颗 CPU 芯片
  • 4 颗 PCIe Gen4 Switch 芯片
  • 6 颗 NVSwitch 芯片
  • 8 张 GPU
  • 8 块 NVMe 本地高速存储
  • 2 张存储网卡:200G,PCIe 直连 CPU。用于从外部存储读写数据,例如读训练数据、写 checkpoint 等。以及用于作为 SSH 管理网络。
  • 8 张 GPU 专属网卡:200G,PCIe Switch 互联。用于跨机传输 GPU 之间的数据。

在这里插入图片描述在这里插入图片描述

NVLink 4.0、NVSwitch 3.0 与 DGX H100

2022 年,发布了 NVLink 4.0、NVSwitch 3.0 以及 H100 GPU。

  • 每张 H100 具有 18 条 Link 接口,单 Link 双向 50GB/s(400Gb/s),单卡满带宽 900GB/s。
  • 由于 Link 数量的增加,NVSwitch 2.0 的 Port 数量也增加到了 64 个,单 Port 双向 50GB/s。

DGX H100 系统由 8 张 H100 与 4 颗 NVSwitch 芯片组成,如下图所示。

在这里插入图片描述

值得注意的是,从 NVSwitch 3.0 开始 NVIDIA 真的将 NVSwitch 芯片拿出来做成了交换机,是真正的 “NVLink Switch”,用于实现跨主机连接 GPU 设备。NVSwitch 3.0 集成了多个 800G OSFP 网络光模块,使得可以连接到 NVLink Switch。

🔘 NVSwitch+NVLink

在现代GPU系统中,NVLink和NVSwitch是协同工作的,但它们的角色和应用场景有所不同:NVLink 是一种点对点的直接连接技术,用于GPU之间的高速通信。每个GPU有多个NVLink端口,用于与其他GPU直接连接。 NVSwitch 是一个中央交换芯片,用于管理和调度GPU之间的通信。在多GPU系统中,NVSwitch可以连接多个GPU,并通过NVLink端口与每个GPU相连。NVSwitch提供了全互联的能力,确保任意两个GPU之间的通信都能高效进行。在现代GPU服务器(如NVIDIA DGX H100)中,NVLink和NVSwitch是共存的,这种架构结合了NVLink的高带宽和NVSwitch的全互联能力。

🔘 NVLink技术演进史

  1. 2016年(NVLink 1.0):功能机时代,P100 GPU,4条NVLink,总带宽160GB/s(相当于3G网络)
  2. 2017年(NVLink 2.0):智能手机初期,V100 GPU,6条NVLink,总带宽300GB/s(4G网络)
  3. 2020年(NVLink 3.0):5G时代,A100 GPU,12条NVLink,带宽翻倍到600GB/s
  4. 2022年(NVLink 4.0):星链时代,H100 GPU,18条NVLink,带宽900GB/s(接近内存速度)

🔘 拓扑结构可视化

  1. Cube-Mesh(P100时代):8人分成2组(4人/组)组内直接沟通,跨组需经过组长(类似部门划分)
  2. Hybrid Cube-Mesh(V100改进):每人新增2条直达通道,跨部门沟通更便捷(类似企业微信打破部门墙)
  3. NVSwitch全互联(H100实现):中央会议室(NVSwitch)连接所有人,任何两人对话只需进一次会议室

🟡 超大规模网络训练时的CPU与GPU分工

假设我们要训练一个大规模的自然语言处理模型,如GPT-3:数据预处理:CPU从HDFS加载大量文本数据,进行分词、编码等预处理,并将处理好的数据组织成TFRecord格式,分片缓存以供后续训练使用。 模型初始化:CPU解析模型配置文件,通过CUDA API为1750亿参数分配显存空间,GPU接收指令并进行参数初始化。 训练循环:在前向传播过程中,CPU调度PyTorch线程,管理数据加载和通信状态,GPU则利用Tensor Core加速矩阵运算,执行LayerNorm和Dropout计算,并缓存激活值。反向传播与梯度同步:GPU计算梯度,通过NCCL库在多GPU间同步梯度,CPU监控整个过程,最后使用优化器更新模型参数。 Checkpoint保存:CPU协调多GPU的状态,将模型参数和优化器状态收集并写入存储系统,GPU将数据从显存拷贝到CPU内存,使用DMA引擎加速传输。 容错与监控:CPU捕获异常信号,监控硬件状态,管理日志系统,确保训练过程的稳定性和可恢复性。通过这种分工协作,CPU和GPU在大规模网络训练中各司其职,共同完成复杂的训练任务。

🔘 数据预处理阶段

  • CPU任务
    • 数据加载:从分布式存储系统(如HDFS)读取原始数据,类似于餐厅经理从中央仓库运来食材。
    • 数据预处理:包括分词、编码等操作,如同厨师将食材进行初步处理。
    • 数据组织:将处理好的数据组织成适合训练的格式,并进行分片和缓存。
  • GPU任务:在这一阶段,GPU不参与计算,因为其强项是矩阵运算,而不是串行的文本处理任务。

🔘 模型初始化阶段

  • CPU任务
    • 解析模型配置:读取模型的配置文件,了解模型的结构和参数。
    • 显存分配:通过CUDA API为模型参数分配显存空间。
    • 建立内存映射:管理CPU与GPU之间的内存映射,确保数据传输的准确性。
  • GPU任务
    • 显存响应:接收来自CPU的显存分配指令,并做出响应。
    • 参数初始化:对模型参数进行初始化计算,如格式转换等。

🔘 训练循环阶段(前向传播)

  • CPU任务
    • 任务调度:协调PyTorch的C++前端线程,确保训练任务有序进行。
    • 数据加载管理:通过DataLoader高效加载训练数据,减少数据传输的延迟。
    • 通信状态监控:监控NCCL通信状态,确保GPU间通信正常。
  • GPU任务
    • 矩阵运算:利用Tensor Core加速Transformer层的矩阵乘法等操作。
    • 层计算:执行LayerNorm和Dropout计算等,调整网络输出。
    • 激活值缓存:存储每一层的中间输出,加速反向传播。

🔘 反向传播与梯度同步阶段

  • CPU-GPU协作
    1. 梯度计算:GPU自主完成反向传播,计算每个参数的梯度。
    2. 梯度同步:通过NCCL库在多GPU之间同步梯度,减少延迟。
    3. 参数更新:使用优化器更新模型参数,学习率调度由CPU控制,但更新操作在GPU显存中完成。

🔘 Checkpoint保存阶段

  • CPU任务
    • 状态收集:协调多GPU的状态,将分片数据收集并写入存储系统。
    • 文件操作:调用POSIX API写入存储系统,处理分布式文件锁。
  • GPU任务
    • 数据拷贝:将模型参数从HBM显存拷贝到CPU内存。
    • 加速传输:使用DMA引擎加速传输,减少CPU负担。

🔘 容错与监控阶段

  • CPU专属任务
    1. 信号处理:捕获浮点异常等信号,进行相应处理。
    2. 硬件监控:通过IPMI读取GPU温度,解析NVML的ECC错误计数器。
    3. 日志管理:将监控指标推送到中心服务器,管理日志索引。

InfiniBand

NVLink、PCIe和InfiniBand是三种不同层级的硬件互联技术

  • NVLink是NVIDIA设计的芯片级高速通道,专为GPU与GPU之间的直接通信而生,通过多条并行链路实现900GB/s的超高带宽(如H100 NVLink 4.0),延迟低至300ns,但仅支持NVIDIA GPU且需专用芯片(如NVSwitch)扩展连接规模。

  • PCIe是CPU与外设(包括GPU)之间的基础总线协议,负责传输控制指令、模型参数等,带宽随版本升级(PCIe 5.0 x16为126GB/s),但通道资源有限(如单CPU仅128条),易成为多GPU系统的瓶颈。

  • InfiniBand是数据中心级的网络互联标准,通过交换机构建大规模集群,支持服务器、存储、GPU等异构设备,带宽可达1.6Tb/s(HDR InfiniBand),延迟约1μs,兼具开放性和扩展性,兼容CPU、GPU、存储等异构硬件,适合跨节点分布式训练。

三者关系
单机多GPU场景中,NVLink提供GPU间高速直连(如DGX H100的18条NVLink通道),PCIe负责GPU与CPU及外设的基础通信;多机集群则依赖InfiniBand构建高效网络,三者分层协作,兼顾单机性能与集群扩展能力。NVLink:解决单机多GPU的高效互联问题(类似“家庭内部的高速公路”)。InfiniBand:解决多机集群的高效互联问 单机内部:GPU通过NVLink互联。多机集群:服务器通过InfiniBand互联。