2. 硬件拓扑认知

聊到多卡通信,很多人第一反应就是「把卡插上去,跑个测试就完事了」。嗯,我以前也这么想。直到有一次在集群上调试一个 64 卡的大模型训练任务,发现通信延迟高得离谱,排查了三天,最后发现是两台机器之间走的是千兆以太网——说白了,就是一根细水管在给游泳池注水。

所以这一节,我想带你真正搞懂四种主流互联方式的脾气秉性。你只有摸清了它们的带宽和延迟特性,才能在设计系统时做出正确的选择。

2.1 NVLink:GPU 之间的高速公路

NVLink 是 NVIDIA 搞出来的私有协议。它的设计目标很纯粹——让 GPU 之间能像亲兄弟一样快速交换数据。

带宽特性:

  • NVLink 2.0:单链路 25 GB/s 双向,V100 时代标配 6 条链路,合计 150 GB/s
  • NVLink 3.0:单链路 50 GB/s 双向,A100 配 12 条链路,合计 600 GB/s
  • NVLink 4.0:单链路 50 GB/s,H100 配 18 条链路,合计 900 GB/s

延迟特性:

  • 端到端延迟通常在 1-3 微秒级别
  • 比 PCIe 低一个数量级

我个人习惯:在做多卡通信拓扑设计时,我会优先把需要频繁 All-Reduce 的卡放在同一个 NVSwitch 域内。为什么?因为 NVLink 的延迟实在太低了,跨域走 PCIe 的话,延迟直接翻 5-10 倍。

避坑指南:我曾经遇到过一个问题——8 张 A100 卡,NVLink 拓扑显示全连接,但实际通信带宽只有理论值的 60%。后来发现是 BIOS 里把 NVLink 的链路宽度设成了 x8 而不是 x16。嗯,这种低级错误,排查起来最费时间。

2.2 PCIe:通用但有限的总线

PCIe 是通用标准,几乎所有设备都支持。但通用意味着妥协——它的延迟和带宽都不如 NVLink。

带宽特性:

  • PCIe 4.0 x16:单向 16 GB/s,双向 32 GB/s
  • PCIe 5.0 x16:单向 32 GB/s,双向 64 GB/s
  • 注意:这是理论值,实际有效带宽通常只有 85-90%

延迟特性:

  • 典型延迟在 5-10 微秒
  • 经过 PCIe Switch 会增加 1-2 微秒

注意:PCIe 的带宽是共享的。如果你把两张 GPU 插在同一个 PCIe Root Complex 下,它们之间的通信带宽会被折半。我见过有人把 8 张卡插在同一个 PCIe 交换机下,结果 All-Reduce 带宽只有单卡 NVLink 的十分之一。

2.3 InfiniBand:高性能计算的标配

InfiniBand 是 HPC 领域的王者。它不像 NVLink 那样只服务 GPU,而是为整个集群提供低延迟、高带宽的互联。

带宽特性:

  • HDR100:单端口 100 Gbps(约 12.5 GB/s)
  • HDR200:单端口 200 Gbps(约 25 GB/s)
  • NDR400:单端口 400 Gbps(约 50 GB/s)
  • 支持多端口绑定,比如 4x HDR200 可以达到 100 GB/s

延迟特性:

  • 端到端延迟在 1-3 微秒
  • RDMA 模式下可以做到 1 微秒以内

我建议:如果你的集群规模超过 16 张卡,InfiniBand 几乎是必须的。以太网在 16 卡以下还能凑合,再往上走,通信瓶颈会让你怀疑人生。

2.4 以太网:便宜但需要技巧

以太网是成本最低的选择。但低成本意味着你需要花更多心思去优化。

带宽特性:

  • 25 GbE:约 3.1 GB/s
  • 100 GbE:约 12.5 GB/s
  • 400 GbE:约 50 GB/s
  • 注意:实际有效带宽受 TCP/IP 协议栈开销影响,通常只有 70-80%

延迟特性:

  • TCP 模式下:10-50 微秒
  • RDMA over Converged Ethernet (RoCE) 模式下:3-10 微秒

避坑指南:我曾经在 100 GbE 网络上跑 NCCL 测试,发现带宽只有 5 GB/s。查了半天,发现是网卡的 MTU 没设成 9000(巨型帧)。默认的 1500 MTU 会让小包通信效率极低。改成 9000 后,带宽直接翻倍。

2.5 四种互联方式的对比

特性 NVLink PCIe 5.0 x16 InfiniBand HDR200 100 GbE
单向带宽 450 GB/s (H100) 32 GB/s 25 GB/s 12.5 GB/s
端到端延迟 1-3 µs 5-10 µs 1-3 µs 10-50 µs (TCP)
适用场景 单节点内 GPU 通信 通用设备互联 跨节点 HPC 通用网络
成本 高(仅限 NVIDIA) 中 高 低
协议开销 极低 低 极低 高

2.6 知识体系结构图

下面这张图展示了四种互联方式在延迟和带宽维度上的定位,以及它们适用的通信场景。

互联方式延迟-带宽定位图 延迟 (µs) → 1 10 50 100 带宽 (GB/s) → 1 10 100 1000 NVLink 1-3 µs / 900 GB/s PCIe 5-10 µs / 64 GB/s InfiniBand 1-3 µs / 50 GB/s 以太网 10-50 µs / 12.5 GB/s 图例 NVLink (GPU直连) PCIe (通用总线) InfiniBand (HPC) 以太网 (通用网络)

2.7 实际选型建议

说了这么多理论,最后给你一些实际可用的建议:

  1. 单节点内多卡通信:优先使用 NVLink。如果卡数超过 8 张,考虑 NVSwitch 拓扑。
  2. 跨节点通信(8-32 卡):InfiniBand 是最佳选择。如果预算有限,100 GbE + RoCE 也能用,但要做好调优。
  3. 跨节点通信(32 卡以上):必须上 InfiniBand。以太网在 32 卡以上基本跑不动 All-Reduce。
  4. 混合拓扑:我习惯的做法是——节点内用 NVLink,节点间用 InfiniBand。这样既利用了 NVLink 的低延迟,又保证了跨节点的扩展性。

总结一句话:NVLink 是 GPU 的「私聊」通道,InfiniBand 是集群的「群聊」工具,PCIe 是通用的「邮局」,以太网是便宜的「平邮」。选哪个,取决于你的场景和预算。