摘要

在长上下文和高并发的大模型推理场景中,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
  • 显存优化
  • 大模型部署

本文为原创内容,版权归作者所有,转载需注明出处。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐