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 知识体系结构图
下面这张图展示了四种互联方式在延迟和带宽维度上的定位,以及它们适用的通信场景。
2.7 实际选型建议
说了这么多理论,最后给你一些实际可用的建议:
- 单节点内多卡通信:优先使用 NVLink。如果卡数超过 8 张,考虑 NVSwitch 拓扑。
- 跨节点通信(8-32 卡):InfiniBand 是最佳选择。如果预算有限,100 GbE + RoCE 也能用,但要做好调优。
- 跨节点通信(32 卡以上):必须上 InfiniBand。以太网在 32 卡以上基本跑不动 All-Reduce。
- 混合拓扑:我习惯的做法是——节点内用 NVLink,节点间用 InfiniBand。这样既利用了 NVLink 的低延迟,又保证了跨节点的扩展性。
总结一句话:NVLink 是 GPU 的「私聊」通道,InfiniBand 是集群的「群聊」工具,PCIe 是通用的「邮局」,以太网是便宜的「平邮」。选哪个,取决于你的场景和预算。