多卡跑本地大模型:NVLink、PCIe 与层拆分详解
更新于 2026-09-10 · 核实于 2026-08-04
单卡上限 32GB。而你真正想跑的模型需要 48GB、74GB、96GB。多卡推理到底怎么工作,营销话术哪里在骗人——这篇讲完。
先建立唯一重要的直觉:解码阶段,每个 token 都要把模型权重完整读一遍。显存带宽决定了 tok/s,显存容量决定了模型能不能装下。多卡方案的一切取舍,都是围绕这两个数展开。
拆分模型的两种方式
层拆分(流水线并行) 是 llama.cpp 和 Ollama 的默认做法:第 1–40 层在显卡 1,第 41–80 层在显卡 2。每个 token 先流过显卡 1,激活值再经 PCIe 传给显卡 2。关键在流量大小:Llama-3.3-70B 的隐藏层宽度是 8192,fp16 激活值过界一次只有 16KB。哪怕上下文里挂着 KV 句柄,每个 token 的卡间流量也就是几十 KB 量级——对比 PCIe 3.0 x16 约 16 GB/s 的带宽,传输耗时微秒级,而读 43GB 权重需要几十毫秒。卡间互联根本不在瓶颈上。
张量并行 把每一层拆到所有卡上(vLLM 的 --tensor-parallel-size,部分 llama.cpp 模式)。每层计算完都要做一次跨卡 all-reduce,每 token 每层至少两轮全员通信,流量比层拆分高几个数量级。规模化吞吐时它更快,但要求极高的互联带宽——NVLink 就是为这个准备的。
单用户推理,PCIe 层拆分就是全部所需。 NVLink 的 900 GB/s 解决的是一个你没有的问题。
NVLink 的真实定位
先把事实摆清楚:
- RTX 3090 是最后一张带 NVLink 接口的消费卡;RTX 4090 和 RTX 5090 已经物理取消了这个接口。
- 数据中心卡上 NVLink 确实惊人:A100 600 GB/s,H100 900 GB/s——但那是给训练和张量并行用的。
- llama.cpp 的层拆分模式下,即使给两张 3090 插上 NVLink 桥,解码 tok/s 也几乎不变——因为每个 token 只跨边界一次,瓶颈始终在显存带宽,不在卡间链路。
什么场景 NVLink 才真正值得掏钱:
- 训练与微调:梯度同步每步都要全量跨卡,PCIe 会被打满。
- 高并发张量并行服务:几十个并发会话共享一组卡时,all-reduce 流量 × 会话数,互联开始成为瓶颈。
- 多用户 API 服务:这时候你在意的指标是总吞吐而不是单流 tok/s,vLLM + 张量并行 + 好互联才是正解。
一个人跑 70B 聊天?把买 NVLink 桥和主板的钱省下来,买带宽更高的卡。
显存算法:直接相加
两张 24GB 的卡给你 48GB 可用容量。四张就是 96GB。我们不为张量并行开销打折(它很小,判定分档里已有的安全边际足以吸收)。完整算一遍 Llama-3.3-70B Q4_K_M、8K 上下文:
权重 43.2GB(70.6B × 4.9 bpw ÷ 8)+ KV 缓存 2.7GB + 运行时开销 1.5GB = 47.4GB
对照判定档位:需求 ≤ 可用的 80% 为「舒适」,≤100% 为「紧张」,超出 100% 但在 120% 以内就是「需要多卡」的典型区间。47.4GB 对单张 24GB(超 97%)是硬不可行,对 2×24GB = 48GB 是「紧张」——能跑,但别指望再把上下文拉长:70B 的 KV 缓存在 fp16 下每 token 约 327KB,32K 上下文就要多吃 10.7GB,直接把 48GB 方案顶穿。想跑长上下文,要么上 q8 KV(减半),要么加容量。
| 配置 | 可用显存 | 能跑什么(Q4_K_M,8K 上下文) |
|---|---|---|
| 2× RTX 3090/4090 | 48 GB | Llama-3.3-70B(紧张,需求 47.4GB) |
| 2× RTX 5090 | 64 GB | 70B 舒适,上下文余量充裕 |
| 2× RTX A6000 | 96 GB | gpt-oss-120b(73.6GB,舒适)、Q8 的 70B(79.3GB,紧张) |
| 4× RTX 3090 | 96 GB | 同上容量,更便宜,更耗电 |
| 4× RTX 4090 | 96 GB | 以上全部,更快 |
边界也要说清楚:DeepSeek-R1 671B 的 Q4 权重约 411GB,把消费卡叠到 8 张也装不下。多卡不是无限容量的魔法,它的甜区就是 48–96GB 这一档。
速度算法:0.85 折损,不是翻倍
多卡不会让带宽翻倍。跨卡同步和不完美的拆分要损失约 15%:
有效带宽 = 各卡带宽之和 × 0.85(同型号) 理论 tok/s = 有效带宽 × 0.75 效率 ÷ 每 token 权重体积
70B Q4_K_M 每 token 要读 43.2GB 权重,代入各配置(理论估算,实际受框架/驱动/CPU 影响,误差 ±30%,且常落在误差带下半区):
| 配置 | 有效带宽 | 70B Q4 理论速度 |
|---|---|---|
| 2× RTX 3090 | 1591 GB/s | 约 28 tok/s |
| 2× RTX 4090 | 1714 GB/s | 约 30 tok/s |
| 2× RTX 5090 | 3046 GB/s | 约 53 tok/s |
| 2× RTX A6000 | 1306 GB/s | 约 23 tok/s |
| 4× RTX 3090 | 3182 GB/s | 约 55 tok/s |
两个值得记住的推论。其一,2×3090 只比 2×4090 慢约 7%——带宽差 8% 而已,但 2026 年二手价差一倍多(约 1100 vs 2400 美元一张)。纯 LLM 推理,3090 的性价比碾压。其二,4 卡的速度约为 2 卡的两倍:0.85 折损不随卡数加深,层拆分扩展性很好——问题只在电源、散热和主板。
混插显卡:最慢的卡起决定作用。我们的模型按 min(带宽) 取瓶颈:4090 搭 3060,有效带宽直接掉到 360 GB/s,70B Q4 理论只剩约 6 tok/s——比两张 3090 慢四倍多。容量是加上了,速度被打回 CPU 卸载的隔壁。别这么干。
MoE 例外:gpt-oss-120b 总参数 116.8B,但每 token 只激活 5.1B、只读约 3.1GB 权重。同样的 2×A6000,跑 70B 稠密模型理论 23 tok/s,跑 gpt-oss-120b 理论超过 300 tok/s。大容量多卡配 MoE 模型,是 2026 年被低估的组合。
实操步骤
llama.cpp(层拆分为多卡默认):
llama-cli -m model.gguf -ngl 99 --split-mode layer --tensor-split 24,24
--tensor-split 按显存比例分配层数,同型号卡写 1,1 即可;--main-gpu 指定放输出层的卡。Ollama 更省事:自动使用所有可见 GPU,想屏蔽某张卡用 CUDA_VISIBLE_DEVICES 环境变量。装完后跑 nvidia-smi 验证:各卡显存占用应按比例分布,如果一张卡爆了另一张闲着,多半是拆分比例或模型没放对。
vLLM 用户注意:--tensor-parallel-size 2 是张量并行,适合多并发吞吐;单流低延迟场景它未必赢过层拆分,而且消费卡之间走 PCIe 的 all-reduce 并不便宜。
硬件实操清单
- 电源:3090 350W、4090 450W、5090 575W(均为 TDP)。两张 450W 的卡加 CPU,靠谱的 1200W 以上电源是底线;瞬时尖峰会让杂牌电源跳闸,这钱是省不得的。
- 电费感念:4×3090 满载约 1400W,24/7 跑一个月约 1000 kWh——批量推理前先算算这账。
- 主板:需要物理 x16 插槽,但层拆分用 PCIe 3.0 x8 电气规格就够解码。x1 转接也能跑,代价只是模型加载变慢。
- 散热:涡轮扇或水冷卡更适合叠放;相邻槽位的两张开放式散热 4090 会热节流,长期高负载下掉速。
- 转接线可以用。 很多本地 LLM 主机用 PCIe 转接线把卡装在开放式机架上——层拆分的带宽需求就是这么低。
- 统一内存替代方案:买 4 张显卡之前,先给 96GB 的 Mac Studio 报个价。M3 Ultra 带宽 819 GB/s,70B Q4 理论约 14 tok/s——比 2×3090 慢一半,但静音、100W 级别功耗、零组装。你的 tok/s 需求和耳朵,总有一个要做主。
常见误区
- 「显存相加,带宽也相加」:容量确实直接相加,带宽要打 0.85 折,混卡时按最慢的算。三件事,三套规则。
- 「没有 NVLink 玩不了多卡」:恰好相反——层拆分就是为了不依赖高速互联。4090/5090 取消 NVLink 对推理用户几乎无感。
- 「给 3090 插 NVLink 桥能提速」:解码瓶颈在显存带宽,桥接的是一条本来就不堵的路。
- 「多卡适合微调」:消费卡多卡微调仍是补丁式方案,显存相加帮不了梯度同步的带宽饥渴。认真训练,租云。
- 「能装下的模型也拆开跑更快」:单卡能装就别拆。32B Q4 需求 23.7GB,单张 24GB 紧张但可行;拆成 2×12GB 反而引入 0.85 折损和双倍故障点。多卡是容量工具,不是提速工具。
一句话总结:多卡买容量,带宽打八五折,NVLink 留给训练。 先想清楚你要装的模型需要多少 GB,再去数要插几张卡——用显存计算器跑一遍你的目标模型,比任何经验法则都可靠。
常见问题
多卡推理需要 NVLink 吗?
不需要。单用户推理用普通 PCIe 层拆分就够了——每个 token 只在层边界跨卡传一次激活值(几十 KB 量级),卡间流量极小。NVLink 是训练和高并发张量并行服务的刚需,不是一个人和 70B 模型聊天的刚需。
2×3090 跑 70B 有多快?
按本站模型:有效带宽 = 2×936×0.85 ≈ 1591 GB/s,70B Q4_K_M 每 token 读 43.2GB 权重,理论约 28 tok/s(±30% 误差带,实际落在 20–28 都正常)。2×4090 理论约 30 tok/s——带宽只差 8%,二手价却差一倍多。
可以混用不同型号的显卡吗?
技术上可以(llama.cpp 会按比例拆分层),但最慢那张卡的带宽会成为瓶颈。4090 混 3060 跑 70B,按 min(带宽) 规则有效带宽只剩 360 GB/s,理论约 6 tok/s——比两张 3090 慢四倍多。强烈建议同型号成对使用。
四张卡比两张卡快多少?
同型号下接近线性:0.85 折损系数不随卡数变化,4×3090 理论约 55 tok/s,正好是 2×3090 的两倍。但四张卡的电源、散热、主板成本翻倍,只为速度从 2 卡升到 4 卡通常不划算——除非你反正需要 96GB 容量。