CPU 卸载:部分层放上显卡值得吗?
更新于 2026-08-04 · 核实于 2026-08-04
你的显卡差 2GB 装不下模型。llama.cpp 的 -ngl 参数承诺了一个方案:把大部分层放显卡,剩下的放 CPU。这到底要付出什么代价?
部分卸载怎么工作
llama-cli -ngl 20 model.gguf 把 20 层放上显卡;剩下的层和部分计算在 CPU 上用系统内存跑。每个 token 仍然要流过所有层——所以每个 token 都要等流水线中最慢的一环:你的系统内存。
内存墙
| 路径 | 带宽 | 在每个 token 耗时中的角色 |
|---|---|---|
| GPU 显存(4090) | 1008 GB/s | 快 |
| PCIe 4.0 x16 | 约 32 GB/s(传输) | 中等 |
| 系统内存(DDR5 双通道) | 60–100 GB/s | 瓶颈 |
4090 读权重的速度比 CPU 读系统内存快约 12 倍。我们的速度模型如实反映:
卸载速度 = min(GPU 带宽, 约 80 GB/s) × 效率 ÷ 每 token 权重体积
真实数字(24B 模型,Q4_K_M)
| 配置 | 估算速度 | 体感 |
|---|---|---|
| 全量在 RTX 4090 | 约 50 tok/s | 即时 |
| 60% 层卸载 | 约 6 tok/s | 阅读速度 |
| 全量 CPU(DDR5) | 约 4 tok/s | 痛苦 |
两条对卸载有利的补充:MoE 模型卸载表现更好(每 token 只读激活专家路径——gpt-oss-20b 部分卸载仍可用),以及批量/离线任务不像聊天那样在乎 tok/s。
什么时候卸载值得
- 评估和一次性任务:「这个 32B 模型到底能不能做 X?」——能,卸载着跑一夜。
- 批量流水线:总结 500 篇文档,4 tok/s × 并行流完全可以接受。
- 容量救急:需要的模型超了 2GB,而替代方案是云端账单。
什么时候不值得
- 交互聊天——阅读速度的输出几分钟就让人烦躁。
- Agent 循环——Agent 要串几十次调用,10 倍减速复利成不可用。
- 存在更小的全量常驻模型时——而 2026 年几乎总是存在。实操中全量在卡的 Qwen3-14B 会比在 DDR5 里喘息的 32B 产出更多好结果,因为你会真的去迭代它。
更好的逃生通道
- 降一档量化(Q4→Q3):质量损失通常比卸载的速度损失小。
- q8 KV 缓存 + 更短上下文:不动速度路径就能腾出实打实的 GB。
- 加一张二手显卡:两张 180 美元的 RTX 3060(合计 24GB,层拆分)在速度上完胜任何卸载方案。见我们的多卡指南。
常见问题
CPU 卸载到底多慢?
预期 5–10 倍减速。24B 模型在 4090 上全量跑约 35 tok/s,一半层卸载到典型 DDR5 系统(60–100 GB/s,对比 1008 GB/s 带宽)后降到约 4–8 tok/s。
Mac 上卸载会好点吗?
Apple Silicon 上没有卸载惩罚——CPU 和 GPU 共享同一内存池,没有任何东西要过总线。「卸载」只是 PC/独立显卡世界的概念。
卸载和小模型,该选哪个?
几乎总是小模型。Q6 的 13B 全量在卡上,速度和每瓦质量都胜过半卸载的 Q4 32B。只有当你明确需要大模型的能力、且能容忍阅读速度的输出时,卸载才有意义。