KV Cache Offloading 到 CPU / NVMe,显存到底能省多少?一篇算清楚
本文定量分析了KV Cache Offloading技术在大模型推理中的显存优化效果。KV Cache在长上下文场景下会占用大量显存,通过将其部分卸载到CPU或NVMe可节省70%-95%的显存,但会带来带宽瓶颈、延迟增加和工程复杂度等代价。最适合用于显存紧张、长上下文、高并发的场景,结合INT8量化可进一步优化。该技术本质是以带宽和延迟换取显存容量,需要根据实际需求权衡使用。
摘要
在长上下文和高并发的大模型推理场景中,KV Cache 显存往往比模型权重还要大。当 GPU 显存成为瓶颈时,KV Cache Offloading(卸载)到 CPU 内存或 NVMe SSD 成为最后也是最“硬核”的解决方案。
本文将从显存公式 + 实际数值出发,定量分析:Offloading 到 CPU / NVMe 到底能省多少显存?又要付出什么代价?
一、KV Cache Offloading 是在“卸载什么”?
先明确一点:
Offloading 的对象是 KV Cache,而不是模型权重。
原因很简单:
-
KV Cache:
- 占用巨大
- 生命周期短
- 可分块(PagedAttention)
-
模型权重:
- 常驻显存
- 访问频繁
- 不适合频繁搬运
二、不 Offloading 时的显存账本
KV Cache 的基础公式(回顾):
KV_per_token =
2 × num_layers × hidden_size × dtype_size
假设(典型 7B 模型):
- num_layers = 32
- hidden_size = 4096
- dtype = FP16(2 Bytes)
单 token KV Cache
≈ 512 KB / token
场景示例:8k 上下文 × 1 路请求
512 KB × 8192 ≈ 4 GB
👉 单个请求就要 4GB 显存
三、Offloading 到 CPU:能省多少显存?
1️⃣ 最理想情况(全量 Offload)
如果 100% KV Cache Offload 到 CPU:
GPU KV 显存占用 ≈ 0
👉 理论上节省 100% KV Cache 显存
但现实中通常不会这么做。
2️⃣ 实际工程做法(Partial Offload)
常见策略:
- 最近 N 个 Block → GPU
- 历史 Block → CPU
例如:
GPU 保留最近 1k tokens
CPU 保存其余 7k tokens
显存占用对比
| 方案 | GPU KV 显存 |
|---|---|
| 不 Offload | 4 GB |
| 部分 Offload | 0.5 GB |
| 显存节省 | ≈ 87.5% |
📌 CPU Offloading 的显存节省比例通常在 70%~95%。
四、Offloading 到 NVMe:还能再省吗?
1️⃣ 显存角度
从显存角度看:
- Offload 到 CPU
- Offload 到 NVMe
👉 GPU 显存节省是一样的
GPU KV Cache ≈ 只保留活跃 Block
2️⃣ 区别在“CPU 内存占用”
| Offload 位置 | CPU 内存 | GPU 显存 | 访问延迟 |
|---|---|---|---|
| GPU | 0 | 高 | 极低 |
| CPU | 高 | 低 | 中 |
| NVMe | 低 | 低 | 高 |
NVMe 的优势是:
- CPU 内存也不够时
- 超长上下文(几十万 token)
- 多租户服务
五、三种方案的显存节省对比(总结表)
假设:
8k tokens × FP16 KV Cache(≈4GB)
| 方案 | GPU KV 显存 | 显存节省 |
|---|---|---|
| 不 Offload | 4 GB | 0% |
| CPU Offload(80%) | 0.8 GB | 80% |
| CPU Offload(95%) | 0.2 GB | 95% |
| NVMe Offload(95%) | 0.2 GB | 95% |
👉 Offloading 的核心价值:把 KV Cache 从“显存约束”变成“内存 / 磁盘约束”。
六、但 Offloading 是“免费的吗”?代价必须清楚
❌ 代价一:带宽瓶颈
- GPU ↔ CPU:PCIe(~16–64 GB/s)
- GPU ↔ NVMe:更低(~3–7 GB/s)
👉 Token 生成速度会下降
❌ 代价二:延迟抖动
- Attention 需要等待 KV 数据回传
- 长上下文 + 高 offload 比例 → latency 上升明显
❌ 代价三:工程复杂度
- 需要异步拷贝
- 需要 PagedAttention
- 调度策略复杂
七、什么时候 Offloading 是“值得的”?
✅ 强烈推荐使用场景
- GPU 显存 < 48GB
- 上下文 ≥ 8k / 16k
- 多并发在线服务
- 用户对 吞吐 > 单 token 延迟 更敏感
❌ 不建议使用场景
- 单请求、低延迟要求
- 上下文 ≤ 2k
- GPU 显存充足(80GB)
八、Offloading + 量化 = 终极组合拳
实际工程中最常见的组合是:
INT8 KV Cache
+ PagedAttention
+ CPU Offloading
举例:
| 优化 | 显存影响 |
|---|---|
| INT8 KV | -50% |
| CPU Offload 80% | -80% |
| 综合效果 | ≈ -90%+ |
👉 这通常是 24GB / 32GB GPU 跑长上下文的唯一解。
九、一句话总结
KV Cache Offloading 本质上是用“带宽和延迟”换“显存容量”,
在长上下文和高并发场景下,它能节省 70%~95% 的 GPU 显存。
是否值得用,取决于你:
- 更缺显存?
- 还是更缺延迟?
写在最后 😊
如果你已经能清楚地判断 “什么时候该 Offload、Offload 到哪、Offload 多少”,那你已经具备了真正的大模型推理工程能力。欢迎点赞、收藏、交流,我们一起把推理系统做得更稳、更极致。
🏷️ 标签
KV Cache显存优化大模型部署
本文为原创内容,版权归作者所有,转载需注明出处。
更多推荐


所有评论(0)