KV Cache 是大语言模型、Transformer、文本生成、推理加速和大模型部署中非常重要的一个术语。KV 是 Key-Value 的缩写,Cache 表示缓存,因此 KV Cache 可以理解为“键值缓存”。它用来描述一种在大语言模型生成文本时,把已经计算过的 Key 和 Value 保存下来、后续生成时直接复用的机制。换句话说,KV Cache 是在回答:模型为什么能更快地一个 token 一个 token 生成文本。
在 GPT 这类自回归模型中,文本不是一次性全部生成出来的,而是每次生成一个 token。每生成一个新 token,模型都需要根据已有上下文计算注意力。如果每一步都重新计算所有历史 token 的注意力表示,计算量会非常大。KV Cache 的作用,就是把历史 token 的 Key 和 Value 缓存起来,避免重复计算。
因此,KV Cache 常用于大语言模型推理、对话生成、长文本生成、流式输出、本地部署和推理服务优化中,是理解大模型推理性能的重要基础概念。
一、基本概念:什么是 KV Cache
KV Cache 是 Transformer 自注意力机制中的一种缓存技术。
在注意力机制中,每个 token 通常会被映射成三类向量:Query、Key、Value。
它们常简写为 Q、K、V,其中:
• Q 表示当前 token 发出的查询
• K 表示各 token 可被匹配的键
• V 表示各 token 携带的信息内容
注意力机制可以简化表示为:
其中:
• Q 表示查询矩阵
• K 表示键矩阵
• V 表示值矩阵
• d_k 表示 Key 向量维度
• softmax 用于把相似度转换为注意力权重
在自回归生成中,历史 token 的 K 和 V 一旦计算出来,在后续步骤中通常不会改变。于是可以把它们保存起来。这就是 KV Cache。
从通俗角度看:KV Cache 就像模型的“上下文计算笔记”。前面已经读过的内容,不必每次都重新读一遍,而是把关键结果保存下来,后面继续生成时直接查用。
二、为什么需要 KV Cache
大语言模型生成文本时,通常是逐 token 生成。
例如:人工智能 → 正在 → 改变 → 世界。
当模型生成“改变”时,需要参考前面的“人工智能 正在”。
当模型继续生成“世界”时,又需要参考“人工智能 正在 改变”。
如果没有 KV Cache,每一步都要重新计算所有历史 token 的 K 和 V。生成越长,重复计算越多。
可以简单理解为:
• 无 KV Cache:每生成一步,都重新计算全部上下文
• 有 KV Cache:历史 K、V 复用,只计算新 token
图 1:无缓存与有 KV Cache 对比
从通俗角度看:没有 KV Cache,模型像每写一个字都重新通读全文。有了 KV Cache,模型像保留了阅读笔记,每次只处理新加入的内容。
这能明显提升生成速度,尤其是在长文本、长对话和流式输出场景中。
三、KV Cache 如何工作
KV Cache 的基本工作流程可以分为两部分。
图 2:KV Cache 生成步骤解析
1、首轮输入:建立缓存
用户输入提示词后,模型会一次性处理这些 token。
例如:
请解释什么是机器学习
模型会为每一层、每个注意力头计算对应的 K 和 V,并把它们保存到缓存中。
可以简单表示为:输入 token → 计算 K、V → 写入 KV Cache。
2、逐步生成:复用缓存
当模型生成新 token 时,只需要计算这个新 token 的 Q、K、V。
然后:
• 新 token 的 Q 会和缓存中的历史 K 做注意力匹配
• 注意力权重会作用在缓存中的历史 V 上
• 新 token 的 K、V 会追加到 KV Cache 中
可以概括为:新 token → 计算新 K、V → 读取历史 K、V → 生成下一个 token → 更新缓存。
从通俗角度看:KV Cache 不是保存最终答案,而是保存注意力机制已经计算好的历史上下文信息。
四、没有 KV Cache 与有 KV Cache 的区别
1、没有 KV Cache
假设已经生成了 1000 个 token,要生成第 1001 个 token。
如果没有 KV Cache,模型需要重新处理前面 1000 个 token,重新计算它们在各层中的 K 和 V。这会造成大量重复计算。
2、有 KV Cache
如果有 KV Cache,前面 1000 个 token 的 K 和 V 已经保存。
生成第 1001 个 token 时,只需要计算新 token 的 K 和 V,并与历史缓存交互。
因此,KV Cache 可以把重复计算显著减少。
可以概括为:
• 无缓存:重复算历史
• 有缓存:只算新增 token
3、速度与显存的交换
KV Cache 的本质是一种“用显存换速度”的技术。它减少了重复计算,但需要保存大量 K 和 V。因此,它会增加显存占用。
从工程角度看:KV Cache 提升生成速度,但会消耗更多显存。
这也是长上下文推理时显存压力很大的重要原因之一。
五、KV Cache 为什么会占显存
KV Cache 需要为每一层、每个注意力头、每个历史 token 保存 K 和 V。
图 3:KV Cache 与显存、上下文长度的关系
因此,它的大小与以下因素有关:
• batch size
• 上下文长度
• 模型层数
• 注意力头数量
• 每个头的维度
• 数据精度
可以简化理解为:
其中:
• B 表示 batch size
• L 表示上下文长度
• N 表示层数
• H 表示注意力头数
• D 表示每个头的维度
从通俗角度看:
• 上下文越长,要保存的历史 K、V 越多
• 并发越高,要为更多请求保存缓存
• 模型越大,每个 token 对应的缓存也越大
因此,长上下文和高并发服务常常会受到 KV Cache 显存占用限制。
六、KV Cache 与上下文窗口
上下文窗口越长,KV Cache 越重要,也越占显存。
例如,一个模型支持 8K、32K、128K 甚至更长上下文时,模型需要保存更多历史 token 的 K 和 V。
这带来两个影响。
1、长上下文生成更依赖缓存
如果没有 KV Cache,长文本生成会非常慢。
因为每一步都要重新计算大量历史 token。
2、长上下文占用更多显存
KV Cache 会随上下文长度增长而增长。
因此,长上下文模型虽然能处理更多内容,但部署时需要更大的显存预算。
从通俗角度看:上下文窗口像模型能同时参考的“阅读范围”。KV Cache 像为这段阅读范围保存的“计算笔记”。阅读范围越大,笔记也越厚。
七、KV Cache 与量化
KV Cache 也可以量化。
在大模型部署中,除了量化模型权重,也可以尝试量化 KV Cache。
例如:FP16 KV Cache → INT8 KV Cache。
这样可以减少显存占用。
不过,KV Cache 量化可能影响生成质量,尤其在长上下文和复杂推理中需要谨慎评估。
可以概括为:
• 权重量化:减少模型参数占用
• KV Cache 量化:减少生成过程中的上下文缓存占用
从实践角度看,KV Cache 优化是长上下文推理、高并发服务和本地部署中的重要方向。
八、KV Cache 的优势、局限与常见误解
1、KV Cache 的主要优势
KV Cache 最大的优势是加速自回归生成。
它可以:
• 减少重复计算
• 提高生成速度
• 支持流式输出
• 提升长文本生成效率
• 改善对话系统响应体验
从通俗角度看:KV Cache 让模型不用反复“重读历史”,所以生成更快。
2、KV Cache 的主要局限
KV Cache 也有明显局限。
首先,它会增加显存占用。
尤其在长上下文、高并发、多轮对话中,KV Cache 可能成为显存瓶颈。
其次,它主要适用于自回归生成。
对于一次性编码任务,KV Cache 的作用并不相同。
再次,KV Cache 不会提高模型本身的知识水平或推理能力。
它只是推理加速机制,不是训练方法,也不是模型能力增强方法。
3、常见误解
误解一:KV Cache 会让模型更聪明。
不对。它主要让模型生成更快,不会直接提高模型质量。
误解二:KV Cache 可以减少所有显存。
不对。它减少重复计算,但会额外保存 K、V,因此通常增加缓存显存。
误解三:上下文越长,速度一定越快。
不对。KV Cache 能避免重复计算,但长上下文仍会带来更大的注意力计算和缓存开销。
误解四:KV Cache 和模型参数是一回事。
不对。模型参数是训练得到的权重;KV Cache 是推理过程中根据当前上下文临时生成的缓存。
九、Python 示例
下面用简化示例帮助理解 KV Cache 的思想。
示例 1:用字典模拟缓存
这个例子表示:历史 token 的 K 和 V 被保存起来,后续可以复用。
示例 2:生成新 token 时追加缓存
生成新 token 后,它的 K 和 V 会追加到 KV Cache 中。
示例 3:复用历史 K、V
这个例子展示了:当前 token 的 Q 会与历史 K、V 交互,从而利用已有上下文。
示例 4:缓存长度随生成增长
随着生成继续,KV Cache 会不断增长。这说明:生成越长,缓存越大。
小结
KV Cache 是大语言模型推理中的键值缓存机制,用来保存历史 token 在注意力机制中的 Key 和 Value。它可以避免每一步生成时重复计算历史上下文,从而显著加快自回归生成速度。但 KV Cache 会占用额外显存,并且随着上下文长度和并发数量增加而增长。对初学者而言,可以把 KV Cache 理解为:模型生成文本时保存的“上下文计算笔记”。
“点赞有美意,赞赏是鼓励”
热门跟贴