在消费级 GPU 上运行大模型:Offload、速度衰减与 MoE
每个玩本地 LLM 的人,迟早都会试着跑一个超出自己 VRAM 容量的模型。好消息是:现代运行时(llama.cpp、Ollama、LM Studio 等)都很乐意做 offload——把模型拆到 GPU 显存和 CPU 内存之间——让它照样能跑。坏消息是:速度下滑远比直觉来得快。这篇指南会讲清楚背后的机制、我们在估算中使用的 (VRAM ÷ need)² 衰减规则,以及为什么 MoE 模型是在小硬件上跑大模型的"作弊码"。
GPU offload 到底是怎么回事?
解码(decode)本质上是一场显存带宽的游戏:每生成一个 token,硬件都要把所有参与计算的权重读一遍。当整个模型都在 VRAM 里时,这次读取以 GPU 显存速度完成——RTX 4090 上是 1,000+ GB/s。装不下时,运行时会把尽可能多的层留在 VRAM,剩下的放在系统内存里,每生成一个 token 都要通过 PCIe(几十 GB/s)来回搬运。
所以 offload 后的模型是个混血儿:每个 token 的一部分权重以 VRAM 速度到达,剩下的在 PCIe 上缓慢爬行,而最慢的那部分决定整体节奏。它能跑——但瓶颈已经不再是你的 GPU 了。
为什么速度按 (VRAM ÷ need)² 衰减?
我们的估算器采用了一条刻意保守的规则:模型装不下时,利用率系数从 0.35(装得下)掉到 (VRAM ÷ need)²,下限 0.01。为什么是平方?因为两重惩罚会叠加:
- 比例惩罚:只有
VRAM ÷ need这部分模型能以 GPU 速度运转,其余都要走 PCIe。速度大致随驻留比例线性缩放。 - 效率惩罚:offload 运行会失去驻留推理所依赖的批处理与缓存效率——层交换、同步停顿、CPU 侧的 attention 计算都会吃掉吞吐。经验上,真实 offload 数字明显低于朴素线性比例的预期,所以我们把它平方。
举个实例——24 GB RTX 4090 上跑 Llama-3.1-70B Q4:8K 上下文下模型需要 53.8 GB,比例为 24 ÷ 53.8 = 0.45,平方后 = 0.20,而装得下时是 0.35。估算速度:约 5 tok/s,而不是线性猜测会得出的约 12 tok/s(估算值)。再看更极端的情况——同一张卡跑 70B FP16 需要 156 GB——估算直接崩到 约 0.2 tok/s(估算值):技术上在跑,实际上没法用。
| 场景(RTX 4090 24GB) | 需求量 | 比例² | 估算 tok/s |
|---|---|---|---|
| 8B Q4(装得下) | 7.0 GB | 0.35(驻留) | ~80 |
| 32B Q4(差一点装下) | 25.6 GB | 0.88 | ~49 |
| 70B Q4 | 53.8 GB | 0.20 | ~5 |
| 70B FP16 | 156.2 GB | 0.02 | ~0.2 |
32B 那一行才是重要的一课:刚好卡在装不下的线上,其实能保住大部分速度——0.88 对 0.35,在我们的模型里反而比驻留系数还高,因为公式的惩罚上限就是驻留比例。深度缺口是灾难性的,浅度缺口则完全可以忍受。
为什么 MoE 模型是 offload 的甜点位?
MoE(Mixture-of-Experts)模型存储大量专家网络,但每个 token 只激活其中几个。这把问题拆成了两半:
- VRAM 取决于总参数量——所有专家都得存着。Qwen3-30B-A3B 在 Q4 下需要 18.4 GB,和稠密 14B 差不多。
- 速度取决于激活参数量——每个 token 只读约 3B 参数。在 RTX 4090 上,Q4 估算可达 约 214 tok/s(估算值)——一个 30B 级别的模型,回答速度比大多数稠密 8B 方案还快。
而当 MoE 模型真的需要 offload 时,损伤也会减轻:PCIe 上搬运的只是被激活的专家,而不是整个模型。这就是为什么巨型 MoE 旗舰在统一内存机器上出奇地可用:gpt-oss-120b(激活 8B)在 128 GB M4 Max 上 Q4 估算约 43 tok/s,Qwen3-235B(激活 22B)在 192 GB Mac Studio M2 Ultra 上估算约 23 tok/s(估算值)。同样总规模的稠密模型在同一台机器上会慢成幻灯片。
模型装不下时,你有哪些实际选择?
- 缩短上下文。KV cache 随上下文线性增长;从 8K 砍到 4K,在中等规模模型上能省出好几个 GB,可能直接把"装不下"翻成"装得下"。
- 坚持用 Q4。0.55 字节/参数,它是唯一能让 30B 级模型够得着消费级显卡的档位;详见我们的量化指南。
- 容量紧张时优先选 MoE。小激活参数能同时压低 KV cache 和每 token 的权重读取量。
- offload 只适合批处理场景。约 5 tok/s 用来隔夜跑摘要没问题,拿来聊天就很痛苦。
- 加容量,而不是加算力。一张二手 24 GB 显卡或一台统一内存 Mac,增加的是可用 VRAM——这才是真正的瓶颈。掏钱之前,先到 AI Hashrate 矩阵上查一下组合。
该怎么读我们的"装得下 / 装不下"线?
只有当 权重 + KV(8K) + 1 GB 开销 ≤ VRAM 的 95% 时,我们才把某个组合标记为"装得下",也只有这种情况才套用完整的 0.35 利用率。"装不下"从来不等于"跑不动"——它的意思是"以 offload 方式运行,速度按所示的衰减估算值计算"。完整公式及其局限都写在方法论页面上。