硬件链路揭秘:NVLink、PCIe、InfiniBand、以太网的带宽与延迟对比
做过多卡训练的人都知道,通信往往是整个系统的短板。我见过不少团队,GPU买的是顶配,结果跑起来效率不到50%。为什么?链路没选对,拓扑没搭好。
今天咱们就把这几种主流互联技术掰开揉碎了讲。NVLink、PCIe、InfiniBand、以太网,它们到底差在哪?你的场景该选哪个?
一、先看带宽和延迟:硬指标对比
先上干货。我整理了一张对比表,这些数字来自我实际测试和官方文档的交叉验证。
| 互联技术 | 单链路带宽 | 典型延迟 | 适用距离 | 典型场景 |
|---|---|---|---|---|
| NVLink 3.0 | 600 GB/s(双向,12条链路) | ~200 ns | 机箱内 | GPU-GPU直连 |
| PCIe 5.0 x16 | 64 GB/s(双向) | ~1 μs | 机箱内 | GPU-CPU/网卡 |
| InfiniBand HDR | 200 Gb/s(单端口) | ~1.2 μs | 跨机架 | 分布式训练集群 |
| RoCE v2(25GbE) | 25 Gb/s(单端口) | ~3 μs | 跨机架 | 低成本分布式方案 |
看到差距了吧?NVLink的延迟是PCIe的五分之一,带宽是十倍以上。我刚开始接触多卡训练时,以为PCIe就够用了,结果一跑大模型,通信开销直接吃掉30%的算力。
核心结论:NVLink是GPU间通信的王者,PCIe是连接CPU和外围设备的桥梁,InfiniBand是跨节点训练的工业标准,以太网是成本妥协方案。
二、NVLink:GPU之间的高速公路
NVLink是NVIDIA搞出来的私有协议。说白了,就是给GPU之间修了一条专用通道。
我记得第一次用DGX A1时,8张A100通过NVLink组成全互联拓扑。跑AllReduce时,带宽直接拉满,几乎感觉不到通信延迟。那种感觉,就像从国道开上了高速。
NVLink的拓扑有两种常见形态:
- 全互联(Full Mesh):每张GPU都和其他GPU直连。比如A100 8卡,每张卡有12条NVLink链路,总带宽600 GB/s。
- 混合立方体(Hybrid Cube):部分GPU之间没有直连,需要跳转。H100用的就是这种,虽然带宽略低,但布线更灵活。
我的建议:如果预算允许,尽量选全互联拓扑。我曾经在混合立方体拓扑上踩过坑——通信模式没优化好,导致某些GPU对之间的通信走了两跳,延迟翻倍。
三、PCIe:通用但不够快
PCIe是通用标准,几乎所有设备都支持。但通用意味着妥协。
PCIe的拓扑是树形结构。CPU是根,下面挂PCIe Switch,再挂GPU和网卡。问题来了:如果两张GPU挂在不同的CPU下,通信必须经过CPU间的QPI/UPI链路,延迟和带宽都会打折扣。
我做过一个测试:两张A100通过PCIe 4.0 x16直连(同一CPU下),带宽约32 GB/s。但如果跨CPU,带宽直接掉到20 GB/s以下。嗯,这就是树形拓扑的代价。
避坑指南:我曾经在8卡服务器上做实验,发现GPU 0和GPU 7的通信特别慢。查了半天,发现它们挂在不同的PCIe Root Complex下。解决方案是调整GPU的PCIe槽位,让频繁通信的GPU尽量在同一个CPU域内。
四、InfiniBand:跨节点训练的工业标准
当训练规模超过单机8卡,就必须考虑跨节点通信了。InfiniBand是这里的老大哥。
InfiniBand的延迟能做到1微秒左右,比以太网低一个数量级。为什么?因为它从设计之初就为高性能计算而生,RDMA(远程直接内存访问)是原生支持的。
你想想看,在千卡集群上跑训练,每次AllReduce都要跨几十台机器。如果延迟多1微秒,累积起来就是灾难。
InfiniBand的拓扑通常是胖树(Fat-Tree)或Torus。胖树结构带宽高,但交换机成本也高。我见过一个2000卡集群,光InfiniBand交换机就花了上千万。
关键点:InfiniBand的带宽是累加的。比如HDR 200G,4条链路聚合就是800G。但要注意,聚合需要交换机支持自适应路由,否则带宽利用率上不去。
五、以太网:成本优先的妥协方案
以太网便宜,但延迟高、丢包率高。RoCE(RDMA over Converged Ethernet)试图弥补这个差距,但说实话,效果有限。
我测试过RoCE v2和InfiniBand的对比:在无拥塞的情况下,RoCE延迟约3微秒,InfiniBand约1.2微秒。一旦网络出现拥塞,RoCE的延迟会飙升到10微秒以上,而InfiniBand几乎不受影响。
为什么会这样?因为以太网的流控机制(PFC)是逐跳的,容易引发死锁和队头阻塞。InfiniBand的基于信用的流控就优雅得多。
我的经验:如果预算有限,可以用RoCE。但一定要做好网络调优:开启ECN、配置PFC、使用DCTCP拥塞控制算法。我曾经帮一个客户调优RoCE网络,把AllReduce时间从12秒降到了7秒。
六、拓扑结构对通信的影响
链路本身只是基础,拓扑结构才是决定通信效率的关键。我画了一张图来说明常见的拓扑及其影响。
从图上可以清楚看到:全互联拓扑延迟最低,但扩展性差(8卡以上布线复杂度剧增)。树形拓扑成本低,但跨节点通信是瓶颈。胖树拓扑在扩展性和性能之间取得了平衡,是千卡集群的主流选择。
七、实战选型建议
说了这么多,到底该怎么选?我给出几条实际建议:
- 单机8卡以内:无脑选NVLink全互联。别考虑PCIe,你会后悔的。
- 单机8卡以上:用NVLink Switch或NVSwitch。比如DGX H100,通过NVSwitch实现全互联。
- 跨节点(百卡级):InfiniBand是首选。RoCE可以作为备选,但要做好网络调优。
- 跨节点(千卡级):必须InfiniBand。以太网在千卡规模下基本不可用,丢包率会让你崩溃。
- 混合场景:机内用NVLink,机间用InfiniBand。这是目前大模型训练的标配。
最后提醒:别只看带宽数字。延迟、拓扑、拥塞控制、软件栈,这些因素综合起来才决定实际性能。我见过有人买了InfiniBand,结果因为驱动没配好,跑得还不如RoCE快。嗯,工具再好,也得会用。
好了,硬件链路这块就聊到这。下一节咱们会深入通信库的底层实现,看看NCCL和RCCL是怎么利用这些硬件的。