NVLink 还是 PCIe:您的任务需要哪一种。
显卡之间的链路,对一类工作负载至关重要,对另外三类则完全无关紧要。弄清楚自己在跑哪一种,一个月能省下好几百美元。
简短的答案
- 每张显卡运行一个模型
- 链路无关紧要。购买 PCIe,把省下的差价用来买更多显卡。
- 把一个模型拆分到多张显卡上
- 张量并行会在每一层都进行同步。为 NVLink 多花钱是值得的。
- 流水线并行
- 每个微批次才传输一次,而不是每一层都传输。PCIe 通常就足够了。
- 多节点训练
- 我们不提供这项服务——NVLink 连接的是同一节点内部的显卡,没有任何东西能连接不同节点。
简要版本
如果模型能放进一张显卡,就可以不用再往下看了——这些内容都与您无关,能装下您模型的最便宜显卡就是正确的选择。这篇指南讨论的是模型放不下、必须切分时会发生什么。
各类链路分别是什么
| 链路 | 在哪里能获取它 | 每张显卡,单向 | 拓扑 |
|---|---|---|---|
| NVLink 4 via NVSwitch | HGX 主板上的 SXM 显卡——4卡和8卡节点 | 900 GB/s | 全互联。每张显卡都以全速同时与其他每一张显卡通信。 |
| NVLink 5 via NVSwitch | B200 SXM6 节点 | 1,800 GB/s | 全互联,带宽是上一代的两倍。 |
| PCIe Gen5 ×16 | 所有 PCIe 显卡 | 64 GB/s | 通过 CPU 的 root complex 中转。位于不同 CPU 插槽上的显卡,比同一插槽上的显卡距离更远。 |
| PCIe Gen4 ×16 | 部分1卡和2卡机箱 | 32 GB/s | 与上面相同,但速率减半。 |
NVLink 4 与 PCIe Gen5 之间,最显眼的比值大约是 14×。这个数字是真实的,但并不是关键的数字——关键在于您的任务有多频繁地要经过这条链路。
什么时候它决定了您的速度
只有一种情况,也是人们最常在毫无准备的情况下遇到的那种。
张量并行
每一层都会被切分到各张显卡上,因此每张显卡都持有每个权重矩阵的一部分。每层计算完成后,各卡的部分结果必须相加汇总——这就是 all-reduce。
- 对于一个 70B 模型,这意味着每个 token 要同步 80 次
- 每一次都要等待最慢的那张显卡
- 这就是链路上的 14× 变成实实在在的秒数的地方
大批量训练
每一步结束时都要做一次梯度 all-reduce,其大小取决于参数量,而非批大小。一个 70B 模型在 BF16 精度下,每一步都要通过链路传输 140 GB 数据。
- 通过 PCIe Gen5,纯传输时间大约是两秒
- 通过 NVLink,这个时间接近其十分之一
- 在持续数天的训练中,每一步都要乘上这个数字
什么时候完全不影响
三种常见的工作负载,为 NVLink 多花的钱买不到任何可衡量的好处。如果您属于其中之一,PCIe 显卡能让您每一美元换到更多显存。
每张显卡跑一个模型。在四张显卡上运行四份独立的 24B 模型副本,完全不会用到互联链路。吞吐量翻四倍,没有同步开销,也没有相应的故障模式。
流水线并行。模型按层分组切分,因此每张显卡是每个微批次才向下一张交接一次,而不是每一层都交接一次。传输次数足够少,PCIe 完全跟得上。
扩散生成与渲染。图像和视频生成、Blender、Octane:每张显卡各自处理自己的一帧或一张图像,完全不需要 all-reduce。
--tensor-parallel-size 4 来部署,反而会比放在其中一张卡上运行更慢。同步开销是真实存在的,而收益是零。只有在模型放不下时,才需要切分。
同一个任务,两种方式
我们提供的两种节点,都配备四张 80 GB 显卡——总显存相同,显卡级别相同,唯一的区别在于显卡之间的链路。价格为我们的月付价格。
| 4 × NVIDIA A100 PCIe | 4 × NVIDIA A100 SXM4 | |
|---|---|---|
| 显卡之间的链路 | PCIe 5.0 ×16 | NVLink 3 · 600 GB/s |
| 总显存 | 320 GB | 320 GB |
| 每张显卡的显存带宽 | 1,935 GB/s | 2,039 GB/s |
| Llama 3.3 70B,BF16 精度,已切分 | ~18 token/秒 | ~19 token/秒 |
| 价格 | $4,157/月 | $4,395/月 |
我们的吞吐量模型以显存带宽为上限,并且刻意保守——它没有直接对 all-reduce 建模,因此在张量并行任务上,真实的差距只会比表格中显示的更大,而不是更小。请把这些数字当作两台机器的下限,重点在于相对顺序。
自己动手测量
在第一天就做这件事。只需两分钟,就能确认您购买的机器,拓扑结构是否与您付费购买的一致。
# NV# means NVLink. PIX, PHB or SYS mean the traffic goes over PCIe.
$ nvidia-smi topo -m
# NVLink state and per-link throughput counters
$ nvidia-smi nvlink --status
# The honest test: an actual all-reduce across every card in the box.
# Compare busbw to the link's rated figure, not to the headline number.
$ docker run --rm --gpus all --ipc=host --shm-size=8g \
nvcr.io/nvidia/pytorch:25.02-py3 \
all_reduce_perf -b 8 -e 4G -f 2 -g 4
如果您为张量并行购买的节点上,topo -m 在两张显卡之间显示 SYS,说明这两张卡是通过 CPU、跨 CPU 插槽通信——这是这台机器上最差的情况。在我们的 SXM 节点上,每一对显卡都应报告 NV18;如果不是,就是故障,而且我们希望在第一天就收到您的反馈。
该买什么
- 模型能放进一张显卡?那就买一张显卡。这个页面上的内容都与您无关,为互联多花的钱纯属浪费。
- 有多个相互独立的模型,或大量互不相关的任务?购买 PCIe 显卡,需要多少买多少。每一美元能换到更多显存,而且完全用不到互联链路。
- 一个模型太大放不进一张显卡,且并发量较低?PCIe 就够用。切分模型给您带来的多半是成本而非收益,选节点时应该以显存为准,而不是速度。
- 一个模型太大放不进一张显卡,且要承接真实流量或用于训练?这正是 NVLink 存在的意义。请选择 SXM。
- 单个任务需要八张以上的显卡?那需要跨节点的互联架构,而我们不提供这项服务。我们宁愿现在就告诉您,也不愿等您付款之后才说——参见我们不提供什么。
配置工具会告诉您自己属于哪种情况:选择一个模型后,它会针对产品目录中的每个节点,报告该模型是能放进一张显卡、必须切分,还是根本放不下。一旦出现“切分”这个词,这篇指南才真正开始对您有意义。