KV cache 原理与显存估算

黎 浩然/ 7 10 月, 2026/ 大语言模型/LARGELANGUAGEMODEL/LLM, 机器学习/MACHINELEARNING, 研究生/POSTGRADUATE, 计算机/COMPUTER/ 0 comments

模型权重装进显存,不等于长对话一定能跑起来。对于使用完整因果注意力的自回归语言模型,输入和输出越长,需要保留的 KV cache 往往越大。估算部署容量时,把权重和这部分运行状态分开,通常比只盯着“模型多少 B”更有用。

文章目录
  1. KV cache 保存的是什么?
  2. 为什么上下文越长,显存越吃紧?
  3. 一个能复算的容量例子
  4. 权重量化,不会自动解决缓存问题
  5. 不同缓存策略在交换什么?
  6. 参考资料

KV cache 保存的是什么?

注意力计算会把 token 的表示映射为查询 Q、键 K 和值 V。逐个生成新 token 时,新位置的查询需要与已有位置的键和值交互。KV cache 留下历史位置的 K、V,下一步复用它们,避免再次计算同一段历史的键和值。

KV cache 原创流程图:历史键和值缓存与新 token 的查询共同参与注意力计算
图中描述的是因果自回归解码的概念流程,不代表具体模型结构,也不是速度测试。

它并不是缓存“模型给出的答案”,也不意味着完全跳过历史上下文。新 token 仍需要对可见历史做注意力计算。缓存减少重复工作,却要用存储空间换取这部分计算。

为什么上下文越长,显存越吃紧?

先看一个简化估算:各层都采用完整注意力,K、V 以相同精度存储,忽略内存对齐、分配器和其他临时张量。设层数为 L,同时处理的序列数为 B,缓存长度为 T,KV 头数为 H,单头维度为 D,每个数占 S 字节。

KV 字节数 ≈ 2 × L × B × T × H × D × S

前面的 2 分别对应 K 和 V。T 包括已处理的提示词及生成过程中需要保留的 token;对于长度不同的批次,实际占用还与引擎是否填充、如何分配缓存有关。

变量 影响 需要注意
上下文长度 T 完整注意力的缓存通常随长度线性增长 滑动窗口或混合层结构不能直接套用全部层同一个 T
并行序列数 B 更多并发会增加缓存需求 前缀共享与引擎调度可能改变实际占用
KV 头数 H 头数越少,这一项越小 不要把查询头数误填为 KV 头数
存储精度 S 更少字节能降低理论存储量 量化元数据和保留高精度部分仍可能占空间

一个能复算的容量例子

假设 32 层、一个序列、8192 个缓存位置、8 个 KV 头、每头 128 维,以每个数 2 字节存储。代入上式得到 1 GiB。若其余条件不变,仅将 KV 头数改为 32,则是 4 GiB。这是一组虚构参数的算术示例,不是某款模型的实测内存。

def kv_gib(layers, batch, tokens, kv_heads, head_dim, bytes_per_element=2):
    return 2 * layers * batch * tokens * kv_heads * head_dim * bytes_per_element / 2**30
assert kv_gib(32, 1, 8192, 8, 128) == 1.0
assert kv_gib(32, 1, 8192, 32, 128) == 4.0
print('8 KV heads:', kv_gib(32, 1, 8192, 8, 128), 'GiB')
print('32 KV heads:', kv_gib(32, 1, 8192, 32, 128), 'GiB')

这段纯 Python 示例已运行,断言通过,输出为:

8 KV heads: 1.0 GiB
32 KV heads: 4.0 GiB

GiB 使用 2 的 30 次方字节为单位。这里算的只有 K、V 张量,不能把结果当成整个推理服务的显存预算。权重、激活、工作区、缓存分配和框架开销都需要另外考虑。

权重量化,不会自动解决缓存问题

“模型已经量化到 4 bit”通常是在描述权重。KV cache 是否量化、使用什么精度,是另一项配置。权重变小后,长上下文仍可能使缓存成为主要占用之一。

选择优化方法时,可以先确认是长度、并发还是精度带来的压力。缩短无关历史、控制同时生成的请求数、采用适合模型和引擎的缓存策略,各自针对不同问题。不要仅凭一个内存公式承诺性能改善。

不同缓存策略在交换什么?

动态缓存按生成过程增长;静态缓存预留空间,让形状更稳定,但可能为短请求留出用不到的容量。卸载把一部分缓存放到 CPU,减少设备端存储压力,同时增加数据搬运。缓存量化减少表示所需空间,也引入额外处理与精度权衡。

这些策略是否可用、能否配合编译,以及具体接口,取决于模型和软件版本。先确认支持范围,再在目标硬件上测量首 token 延迟、逐 token 延迟和峰值内存,比直接复制一组配置更可靠。

部署优化还涉及权重和执行方式,可结合此前的大语言模型部署与优化一起阅读。KV cache 是其中一个独立预算项,而不是对所有性能问题的统一解释。

参考资料

补发说明:文章日期保留原计划的北京时间 2026 年 10 月 7 日 14:00,实际于当日稍后补发。本文讨论已有技术原理,不作为实时新闻。

支持

如果这篇文章对你有帮助,欢迎支持本站。

微信支持二维码,点击查看大图
微信
支付宝支持二维码,点击查看大图
支付宝
Buy Me a Coffee,点击支持本站
Buy Me a Coffee

二维码可点击放大。更多支持方式见支持页面。

Share this Post

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

*
*