CPU 卸载:部分层放上显卡值得吗?
更新于 2026-09-10 · 核实于 2026-08-04
你的显卡差 2GB 装不下模型。llama.cpp 的 -ngl 参数承诺了一个方案:把大部分层放显卡,剩下的放 CPU。这到底要付出什么代价?这篇文章把机制、数字和决策边界讲清楚。文中所有速度均为本站计算器的理论估算口径(带宽 × 0.75 效率 ÷ 每 token 权重体积),实际受框架、驱动、CPU 影响,误差 ±30%。
部分卸载到底怎么工作
llama-cli -ngl 20 model.gguf 把 20 层放上显卡;剩下的层在 CPU 上用系统内存跑。关键点:每个 token 仍然要串行流过所有层。GPU 层的激活值经 PCIe 传给 CPU 层,算完再传回来——激活值本身只有几 MB,总线传输不是大问题。
真正的开销在另一处:CPU 层每生成一个 token,都要把放在系统内存里的那部分权重重新读一遍。解码是纯带宽受限的操作,于是每个 token 都要等流水线中最慢的一环:你的系统内存。
两个实操细节:
-ngl的语义是「放上显卡的层数」。设一个超过模型层数的大值(如 99)等于「能放多少放多少」,显存满了剩下的自动落回 CPU——这通常是部分卸载时最省心的用法。- 预填充(读 prompt)受的惩罚比解码小。 预填充是算力受限、批量读取权重的,带宽压力被摊薄;逐 token 解码才是带宽墙正面相撞的地方。所以部分卸载时你会感觉「读 prompt 还行,吐字巨慢」。
内存墙:数字到底差多少
| 路径 | 带宽 | 在每个 token 耗时中的角色 |
|---|---|---|
| GPU 显存(RTX 4090) | 1008 GB/s | 快 |
| PCIe 4.0 x16 | 约 32 GB/s(只搬 MB 级激活值) | 影响很小 |
| 系统内存(DDR5 双通道) | 60–100 GB/s | 瓶颈 |
系统内存那一行值得展开:DDR5-6000 双通道的理论峰值是 96 GB/s(6000 MT/s × 8 字节 × 2 通道),DDR4-3200 双通道只有 51 GB/s。再打折掉实际达成率,主流桌面落在 60–100 GB/s 区间——这就是我们计算器取 80 GB/s 中值的原因。内存配置直接决定卸载速度上限:同一台机器,单通道和双通道的卸载速度可以差一倍。
对比之下,4090 读显存权重比 CPU 读系统内存快约 12 倍。
站点的速度模型与口径
卸载速度 = min(GPU 带宽, 约 80 GB/s) × 0.75 ÷ 每 token 权重体积
注意这是一个保守下限:它假设只要有一个层在 CPU 上,整个 token 的节奏就被系统内存拖住。真实的部分卸载落在「全量 GPU 速度」和这个下限之间,卸载比例越低越靠近上限。用于「要不要卸载」的决策,这个口径足够,而且宁可保守。
代入数字(24B 稠密模型,Q4_K_M,每 token 读 14.7GB 权重):
| 配置 | 估算速度 | 体感 |
|---|---|---|
| 全量在 RTX 4090(1008 GB/s) | 约 51 tok/s | 即时 |
| 部分卸载(下限口径,80 GB/s) | 约 4 tok/s | 阅读速度 |
| 全量 CPU(DDR5 双通道) | 约 4 tok/s | 痛苦 |
从 51 到 4 不是线性的「慢一点」,是数量级的断崖。
用站内数据算三笔账
以下数字全部来自本站 models.json/gpus.json/quant-presets.json 按同一套公式推算,你可以在显存计算器里复算。
场景 1:24B 模型,16GB 显卡(RTX 4070 Ti Super)
Mistral Small 3.2 24B,Q4_K_M:权重 14.7GB + KV 缓存(8k 上下文,fp16)1.3GB + 运行时开销 1.5GB = 17.5GB,装不下 16GB。
- 方案 A,卸载约 2GB 的层:速度下限约 4 tok/s。能跑,但聊天体验是阅读速度。
- 方案 B,降到 Q3_K_M:权重缩到 12.0GB,总需求 14.8GB,tight 档刚好装下,4070 Ti Super(672 GB/s)全量跑约 42 tok/s。
结论没有悬念:降一档量化换来 10 倍速度,质量损失远小于速度损失。
场景 2:Qwen3-32B,24GB(RTX 4090),想要 16k 上下文
Q4_K_M 权重 20.1GB。8k 上下文时总需求 23.7GB,tight 档能跑,全量约 37 tok/s。但把上下文拉到 16k,KV 缓存从 2.1GB 涨到 4.3GB,总需求 25.9GB——装不下了。
- 方案 A,卸载:约 3 tok/s。
- 方案 B,KV 缓存改 q8:16k 的 KV 从 4.3GB 降回 2.1GB,总需求回到 23.7GB,37 tok/s 保住,质量影响极小。
这是卸载决策里最常见的误判:缺口不在权重,在 KV 缓存,而 KV 量化是不动速度路径的免费午餐。细节见我们的 KV 缓存指南。
场景 3:MoE 模型是另一个物种
Qwen3-30B-A3B 总参数 30.5B,但每 token 只激活 3.3B——每 token 只需读约 2.0GB 权重。即便按 80 GB/s 的卸载下限口径,也有约 30 tok/s,依然是可用的聊天速度。gpt-oss-20b(激活 3.6B)同理,下限约 27 tok/s。
对照组:稠密的 Llama-3.3-70B 每 token 要读 43GB 权重,卸载下限约 1.4 tok/s——比人读得慢。MoE 架构是「卸载也够用」的最大例外,因为带宽墙撞的是每 token 实际读取的字节数,而不是总参数量。
什么时候卸载值得
- 评估和一次性任务:「这个 32B 模型到底能不能做 X?」——能,卸载着跑一夜,明天看结果。
- 批量流水线:给 500 篇文档各生成 800 token 的摘要,总共 40 万 token;4 tok/s 单流约 28 小时,开 4 路并发一夜跑完。吞吐任务不在乎单流 tok/s。
- MoE 模型的日常部分卸载:如上,下限仍有 30 tok/s 量级。
- 容量救急:需要的模型超了 2GB,而替代方案是云端账单。
什么时候不值得
- 交互聊天——阅读速度的输出几分钟就让人烦躁。
- Agent 循环——减速会复利。一个 20 步、每步输出 500 token 的 Agent 任务,总量 1 万 token:32B 全量在 4090 上(约 37 tok/s)4 分半跑完;卸载后(约 3 tok/s)接近 1 小时。步骤越多越不可用。
- 存在更小的全量常驻模型时——而 2026 年几乎总是存在。实操中全量在卡的 13B/14B 会比在 DDR5 里喘息的 32B 产出更多好结果,因为你会真的去迭代它。
常见误区
- 「PCIe 5.0 能救卸载。」 不能。瓶颈不是总线——激活值每个 token 只有 MB 级。瓶颈是 CPU 每 token 都要从系统内存重读 GB 级权重,这条路不过 PCIe。
- 「卸载 20% 的层只慢 20%。」 不是线性衰减,是断崖:只要最慢一环变成系统内存,整个流水线按系统内存的节奏走。
- 「内存频率无所谓。」 卸载场景下内存带宽就是生成速度本身。DDR4 双通道换 DDR5 双通道,卸载上限直接接近翻倍;单通道插满双通道也有立杆见影的效果。
- 「Mac 上也一样。」 Apple Silicon 是统一内存,CPU 和 GPU 读同一个池子,没有卸载惩罚。48GB 的 M4 Pro(约 36GB 可用,273 GB/s)全量跑 24B Q4 约 14 tok/s——不快,但那是全量速度,不是惩罚后速度。
- 「预填充也会这么慢。」 预填充是算力受限,惩罚小得多;慢的是逐 token 解码。这也是为什么部分卸载跑批量摘要「感觉还行」、聊天「痛不欲生」。
更好的逃生通道(按优先顺序)
- q8 KV 缓存 + 更短上下文:不动权重、不动速度路径,能腾出实打实的 GB(场景 2 里就是 2.2GB)。
- 降一档量化(Q4→Q3):场景 1 里这是 4 tok/s 和 42 tok/s 的差别。质量损失通常比卸载的速度损失小。见量化指南。
- 加一张二手显卡:两张二手 RTX 3060 12GB(站内二手价约 $260/张)合计 24GB 做层拆分,等效带宽 2 × 360 × 0.85 ≈ 612 GB/s,24B Q4 能跑约 31 tok/s——完胜任何卸载方案。见我们的多卡指南。
- 重新考虑统一内存:如果买卡预算已经接近 Mac mini 的价,48GB 统一内存方案值得先报价对比。
非卸载不可时的实操步骤
- 先用显存计算器确认缺口到底多少 GB——常常发现 q8 KV 或降量化就能补上,根本不用卸载。
- 确认非卸载不可后,
-ngl直接设 99,让 llama.cpp 放到显存满为止;启动日志里会打印每层的去向(GPU/CPU),核对一下。 - 内存插满双通道,BIOS 里开 XMP/EXPO——卸载速度上限由内存带宽决定。
- 跑起来后看一眼实际 tok/s。低于阅读速度(约 8–10 tok/s)的交互场景,回头认真考虑逃生通道 1–3。
卸载是一个真实存在的功能,解决一类真实存在的问题——但它是一把梯子,不是一层地板:用来爬过「差 2GB」这道坎,别把它当成可以长期站立的地方。
常见问题
CPU 卸载到底多慢?
按我们的速度模型(等效带宽 = min(显存带宽, 80 GB/s) × 0.75 ÷ 每 token 权重体积),24B Q4 模型在 RTX 4090 上全量约 51 tok/s,部分卸载的下限约 4 tok/s。真实部分卸载落在两者之间,卸载比例越高越接近下限。
Mac 上卸载会好点吗?
Apple Silicon 上没有卸载惩罚——CPU 和 GPU 共享同一内存池,没有任何东西要过总线。「卸载」只是 PC/独立显卡世界的概念。48GB 的 M4 Pro(约 36GB 可用)能直接全量跑 4090 装不下的 32B 模型。
卸载和小模型,该选哪个?
几乎总是小模型。Q6 的 13B 全量在卡上,速度和每瓦质量都胜过半卸载的 Q4 32B。只有当你明确需要大模型的能力、且能容忍阅读速度的输出时,卸载才有意义。
MoE 模型卸载也这么惨吗?
不。Qwen3-30B-A3B 每个 token 只激活 3.3B 参数,每 token 只需读约 2.0GB 权重,卸载下限仍有约 30 tok/s;而同容量的稠密 32B 只剩约 3 tok/s。MoE 是卸载场景的最大例外。