← AI Hashrate

在消费级 GPU 上运行大模型:Offload、速度衰减与 MoE

为什么"装不下"不等于"跑不动"——以及你要为此付出的代价 · AI Hashrate 指南

每个玩本地 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。为什么是平方?因为两重惩罚会叠加:

举个实例——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 GB0.35(驻留)~80
32B Q4(差一点装下)25.6 GB0.88~49
70B Q453.8 GB0.20~5
70B FP16156.2 GB0.02~0.2

32B 那一行才是重要的一课:刚好卡在装不下的线上,其实能保住大部分速度——0.88 对 0.35,在我们的模型里反而比驻留系数还高,因为公式的惩罚上限就是驻留比例。深度缺口是灾难性的,浅度缺口则完全可以忍受。

为什么 MoE 模型是 offload 的甜点位?

MoE(Mixture-of-Experts)模型存储大量专家网络,但每个 token 只激活其中几个。这把问题拆成了两半:

而当 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(8K) + 1 GB 开销 ≤ VRAM 的 95% 时,我们才把某个组合标记为"装得下",也只有这种情况才套用完整的 0.35 利用率。"装不下"从来不等于"跑不动"——它的意思是"以 offload 方式运行,速度按所示的衰减估算值计算"。完整公式及其局限都写在方法论页面上。