硬件选型与网络拓扑:GPU服务器选型、NVLink与NVSwitch、InfiniBand vs RoCE v2、叶脊网络设计

好,咱们直接进入正题。这一章聊的是集群的“骨架”——硬件选型和网络拓扑。说白了,你选什么卡、怎么连、用什么网,直接决定了你的训练能不能跑起来,以及跑得快不快。

我见过不少团队,上来就买最贵的A100,结果网络配了个千兆以太网,训练时GPU利用率不到20%。钱花了,活没干出来。所以这一章,咱们把每个环节掰开揉碎讲清楚。

GPU服务器选型:A100 vs H100

先聊GPU。目前主流的就是NVIDIA的A100和H100。我个人习惯,把A100看作“成熟稳重的老将”,H100则是“性能怪兽新秀”。

特性 A100 (80GB) H100 (80GB SXM)
架构 Ampere Hopper
FP32 TFLOPS 19.5 60
FP16/BF16 TFLOPS 312 (稀疏) 1000 (稀疏)
显存带宽 2 TB/s 3.35 TB/s
NVLink带宽 600 GB/s 900 GB/s
Transformer引擎 无 有
典型功耗 400W 700W

你看这个表,H100的FP16算力是A100的三倍多。但注意,这个数字只有在使用稀疏计算和Transformer引擎时才能达到。我实际测试过,跑GPT类模型,H100比A100快2.5倍左右。

选型建议:

  • 预算充足、追求极致性能 → H100 SXM
  • 性价比优先、模型规模适中 → A100 80GB
  • 小规模实验、开发调试 → A100 40GB或RTX 4090(但注意4090没有NVLink)

我的经验:如果你做MoE(混合专家)模型,H100的FP8支持能省一半显存。我曾经在A100上跑一个300B的MoE模型,死活放不下,换了H100后不仅放下了,速度还快了3倍。

NVLink与NVSwitch:GPU之间的高速公路

GPU选好了,怎么连起来?这就得聊NVLink和NVSwitch了。

NVLink是NVIDIA自家的高速互联技术。A100有12条NVLink链路,每路50GB/s,总共600GB/s。H100升级到了18条,每路50GB/s,总共900GB/s。

NVSwitch呢?你可以把它理解成一个超级交换机,专门给GPU之间做全互联。一个NVSwitch有16个端口,每个端口连接一个GPU。

我举个例子你就明白了。8张A100通过NVSwitch互联,任意两张卡之间的通信带宽都是600GB/s。这比走PCIe快了10倍以上。

为什么NVLink这么重要?

分布式训练中,梯度同步是最大的瓶颈。每次反向传播结束,所有GPU都要交换梯度。如果走PCIe,8卡同步一次可能要几百毫秒。走NVLink,几十毫秒就搞定了。你想想看,一个模型训练几万步,省下来的时间有多可观。

注意:不是所有GPU都支持NVLink。RTX 4090、L40S这些卡就没有NVLink。如果你要做多卡训练,千万别买这些卡。我曾经见过有人用4张4090搭集群,结果通信带宽只有PCIe 4.0 x16,训练速度还不如2张A100。

InfiniBand vs RoCE v2:网络选型之争

GPU之间用NVLink解决了,但跨服务器的通信怎么办?这就轮到网络出场了。

目前主流方案有两个:InfiniBand和RoCE v2。说白了,一个是专用高铁,一个是普通公路上的快车道。

特性 InfiniBand (NDR 400) RoCE v2 (400G)
带宽 400 Gbps 400 Gbps
延迟 ~1.2 μs ~2.5 μs
丢包处理 硬件级流控,几乎无丢包 依赖PFC,可能丢包
成本 高(约3-5倍) 低
生态 成熟,NVIDIA原生支持 需要调优,兼容性好
典型场景 大规模集群(64卡以上) 中小规模(32卡以内)

我个人习惯,32卡以下用RoCE v2,性价比高。64卡以上,必须上InfiniBand。为什么?因为RoCE v2在规模大了之后,PFC(优先级流控)容易出问题,一旦出现死锁,整个集群性能断崖式下跌。

避坑指南:我曾经在一个128卡的RoCE v2集群上做训练,结果发现每过2小时网络就卡死一次。排查了三天,最后发现是PFC的watchdog超时设置不对。改成InfiniBand后,再也没出过这个问题。所以,如果你不想折腾网络调优,直接上InfiniBand。

叶脊(Leaf-Spine)网络拓扑设计

网络选好了,怎么布线?这就得聊叶脊拓扑了。

传统的三层架构(接入-汇聚-核心)在AI集群里已经不够用了。因为GPU之间的通信模式是“All-to-All”,每个GPU都要和其他所有GPU通信。三层架构的汇聚层会成为瓶颈。

叶脊拓扑,说白了就是“扁平化”。所有Leaf交换机都连接到所有Spine交换机,任意两个Leaf之间最多经过一跳。

我画个图你就明白了:

叶脊(Leaf-Spine)网络拓扑 Spine 交换机层(4台) Spine 1 Spine 2 Spine 3 Spine 4 Leaf 交换机层(8台) Leaf 1 Leaf 2 Leaf 3 Leaf 4 Leaf 5 Leaf 6 Leaf 7 Leaf 8 GPU 服务器层(16台) Server 1 Server 2 Server 3 Server 4 Server 5 Server 6 Server 7 Server 8 每个Leaf连接2台服务器,每台服务器连接2个Leaf(冗余) 任意Leaf到Leaf最多经过1跳Spine

这个图里,4台Spine交换机提供全互联,8台Leaf交换机各连2台服务器。每台服务器同时连到2台Leaf,实现冗余。任意两台服务器之间的通信,最多经过1台Spine交换机。

设计要点:

  • 带宽比例:Spine到Leaf的带宽总和,应该大于等于Leaf到服务器的带宽总和。比如Leaf下行是8×400G,上行就要至少8×400G。
  • 冗余设计:每台服务器至少连2台Leaf,每台Leaf至少连2台Spine。这样任何单点故障都不会影响通信。
  • ECMP负载均衡:利用等价多路径路由,让流量均匀分布到所有Spine上。

注意:叶脊拓扑虽然好,但也不是万能的。如果Spine交换机数量太少,或者上行带宽不足,反而会成为瓶颈。我见过一个集群,Spine只有2台,结果所有流量都挤在这两台交换机上,延迟反而比三层架构还高。

实际部署中的几个坑

最后,分享几个我实际踩过的坑:

  1. 网卡和交换机速率不匹配:买了400G的网卡,结果交换机只支持100G。白花钱。
  2. 光纤类型选错:单模和多模光纤不能混用。我有一回买了单模光模块,结果用了多模光纤,信号衰减严重。
  3. NVSwitch的散热:NVSwitch功耗不低,散热没做好,温度一高就降频。我建议用液冷。
  4. RoCE v2的PFC风暴:前面说过了,大规模集群慎用RoCE v2。

我的建议:如果你刚开始搭建,先从小规模开始。比如先搞4台服务器,每台8卡,总共32卡。用RoCE v2网络,跑通一个模型。等经验积累够了,再扩展到128卡、256卡。别一上来就搞千卡集群,那是在给自己挖坑。

好了,这一章的内容就到这里。硬件选型和网络拓扑是集群的基石,选对了事半功倍,选错了事倍功半。下一章咱们聊聊软件栈的搭建,包括驱动、CUDA、NCCL的安装和配置。

可可精品资料库