2、硬件环境准备:支持RDMA的网卡、GPU型号要求、NVLink与PCIe拓扑

好,咱们直接进入正题。上一章聊了GPU Direct RDMA的整体架构,这一章咱们把硬件底子铺好。说白了,你软件写得再漂亮,硬件不支持,一切都是白搭。

我个人习惯,在搭建任何高性能计算集群之前,先把硬件清单列清楚。尤其是RDMA和GPU的搭配,踩坑的代价太大了。我曾经在一个项目里,因为网卡和GPU的PCIe插槽没对齐,导致带宽直接腰斩,排查了整整两天。

2.1 支持RDMA的网卡:Mellanox与Intel怎么选?

目前市面上主流的RDMA网卡,基本就是Mellanox(现在叫NVIDIA Networking)和Intel两家的天下。你想想看,它们虽然都叫RDMA,但实现方式和生态各有千秋。

2.1.1 Mellanox ConnectX系列

这是目前AI训练集群的绝对主力。我个人最常用的是ConnectX-5和ConnectX-6系列。为什么?

  • 生态成熟:NVIDIA自家的东西,和GPU的配合天衣无缝。你装个NVIDIA驱动,MLNX_OFED驱动包一装,基本就能跑起来。
  • 带宽高:ConnectX-6单口200Gb/s,双口400Gb/s。嗯,这个速度,喂饱A100甚至H800都绰绰有余。
  • 支持GPUDirect:这是核心。Mellanox网卡可以直接访问GPU显存,不需要经过CPU内存中转。
我的小技巧:买卡的时候,注意看型号后缀。比如ConnectX-6 Dx和ConnectX-6 Lx,前者支持RoCE v2,后者主打低功耗。做AI训练,我建议直接上Dx系列。

2.1.2 Intel Omni-Path与100G网卡

Intel这边,主要是Omni-Path架构和后来的100G Ethernet网卡。说实话,在AI领域,Intel的RDMA方案市场份额不如Mellanox,但也不是不能用。

  • Omni-Path:这是Intel自家的高速互联技术,延迟低,但生态相对封闭。我记得有个客户用了Omni-Path,结果想换Mellanox的卡,发现驱动和交换机都不兼容,折腾了很久。
  • Intel 100G网卡:比如XXV710系列,支持RoCE v2。如果你预算有限,或者公司已经有Intel的网络设备,可以考虑。
避坑指南:我曾经遇到过Intel网卡和NVIDIA GPU在同一个PCIe Switch下,因为TLP(事务层包)处理逻辑不同,导致GPUDirect通信不稳定。所以,如果你用Intel网卡,务必先做小规模验证。

2.2 GPU型号要求:NVIDIA Tesla与Quadro

说到GPU,很多人以为只要是NVIDIA的卡就能用GPUDirect RDMA。其实不然。这里有个关键点:只有支持UVA(统一虚拟地址)的GPU才能直接参与RDMA通信

2.2.1 Tesla系列:AI训练的主力军

Tesla系列,比如V100、A100、H100,是专门为数据中心设计的。它们都支持GPUDirect RDMA,而且性能最好。

  • A100:目前最主流的训练卡。80GB显存,支持NVLink 3.0,带宽高达600GB/s。我现在的集群里,清一色的A100。
  • H100:新一代旗舰,支持NVLink 4.0和第四代NVSwitch。如果你做千亿级大模型训练,H100是首选。
  • V100:老将了,但依然能打。32GB显存,支持NVLink 2.0。预算有限的话,V100也能跑通GPUDirect RDMA。

2.2.2 Quadro系列:工作站也能玩

Quadro系列,比如RTX A6000,其实也支持GPUDirect RDMA。但要注意,Quadro的驱动和Tesla不同,有些功能被限制了。

我有个朋友,用Quadro RTX 8000搭了个小集群,跑分布式训练。结果发现GPUDirect RDMA的带宽只有Tesla的一半。查了半天,原来是Quadro的PCIe BAR(基地址寄存器)大小被限制了。所以,如果你真想玩RDMA,还是老老实实用Tesla。

一句话总结:Tesla是亲儿子,Quadro是干儿子。做AI训练,别在GPU上省钱。

2.3 NVLink与PCIe拓扑:决定性能的关键

硬件选好了,怎么连?这里面的门道可多了。你想想看,GPU和网卡之间怎么通信?数据走哪条路?这直接决定了你的训练速度。

2.3.1 NVLink:GPU之间的高速公路

NVLink是NVIDIA自家的高速互联技术。它让GPU之间可以直接通信,不需要经过PCIe总线。

  • NVLink 2.0(V100):每对GPU 300GB/s,6条链路。
  • NVLink 3.0(A100):每对GPU 600GB/s,12条链路。
  • NVLink 4.0(H100):每对GPU 900GB/s,18条链路。

嗯,这个速度,比PCIe 4.0 x16的32GB/s快了一个数量级。所以,如果你的模型需要频繁的All-Reduce通信,NVLink是必须的。

2.3.2 PCIe拓扑:网卡插哪里?

这是最容易踩坑的地方。GPUDirect RDMA要求网卡和GPU在同一个PCIe Root Complex下,或者通过PCIe Switch相连。

我曾经在一个项目中,把网卡插在了CPU0的PCIe插槽,而GPU插在了CPU1的插槽。结果呢?数据要从GPU -> CPU1 -> QPI总线 -> CPU0 -> 网卡,延迟高得离谱。

正确的做法是:

  1. 查看拓扑:用lspci -t或者nvidia-smi topo -m命令,看看GPU和网卡在哪个PCIe总线下。
  2. 尽量靠近:把网卡插在和GPU同一个CPU的PCIe插槽上。
  3. 避免跨Socket:如果必须跨Socket,确保有足够的QPI/UPI带宽。
实战命令
# 查看GPU和网卡的PCIe拓扑
nvidia-smi topo -m

# 输出示例:
#        GPU0    GPU1    GPU2    GPU3    mlx5_0
# GPU0   X      NV2     NV2     NV2     PIX
# GPU1   NV2    X       NV2     NV2     PIX
# GPU2   NV2    NV2     X       NV2     PIX
# GPU3   NV2    NV2     NV2     X       PIX
# mlx5_0 PIX    PIX     PIX     PIX     X

# 注意:PIX表示同一个PCIe Switch下,这是最佳情况。
# 如果是PHB(跨CPU),就要小心了。

2.3.3 实际拓扑示例

我给大家画个简单的拓扑图(文字版):

组件 PCIe位置 说明
GPU0 CPU0, Bus 0x01 通过NVLink连接GPU1
GPU1 CPU0, Bus 0x02 通过NVLink连接GPU0
Mellanox网卡 CPU0, Bus 0x03 和GPU在同一CPU下,PIX连接
GPU2 CPU1, Bus 0x81 跨CPU,通过QPI连接

你看,GPU0和GPU1在同一CPU下,网卡也在同一CPU下,它们之间的通信走PCIe Switch,延迟很低。而GPU2在另一个CPU下,通信就要走QPI总线,延迟会高一些。

我的建议:在规划硬件时,尽量让同一个训练任务的所有GPU和网卡都在同一个CPU Socket下。如果节点有8张GPU,最好用2张网卡,每个CPU下各插一张。

2.4 硬件检查清单

最后,我给大家列个检查清单,照着做,基本不会出大问题:

  • 网卡:Mellanox ConnectX-5/6,或者Intel XXV710,确保支持RoCE v2或InfiniBand。
  • GPU:NVIDIA Tesla V100/A100/H100,确保驱动版本≥418.xx(支持GPUDirect)。
  • NVLink:检查GPU之间是否有NVLink连接,用nvidia-smi nvlink -s查看。
  • PCIe拓扑:用nvidia-smi topo -m确认网卡和GPU在同一PCIe Switch下。
  • 驱动:安装MLNX_OFED驱动,并确保ibv_devinfo能看到网卡支持GPUDirect。

嗯,硬件环境准备就这些。下一章,咱们开始动手配置软件环境,把驱动和库装好。到时候,我会分享一些我踩过的坑,保证让你少走弯路。