KV Cache 是什么-为什么能加速推理- [intro-what-is-kv-cache]

article
2026年7月21日阅读约 1 分钟198 字

更新于 2026年7月21日

KV Cache 是什么?为什么能加速推理?

空间换时间的缓存直觉与显存代价

原题:什么是 KV Cache?它为什么能大幅加速大模型的推理?这种加速又会带来什么代价?

推理优化

30 秒回答

  1. 大模型生成是逐 token 自回归的,每生成一个新 token 都要「回看」前面所有 token
  2. 不加缓存时,前面每个 token 的 Key/Value 会被一遍遍重算,计算量随长度急剧膨胀
  3. KV Cache 把已算过的 K、V 存进显存,新 token 只算自己的再与缓存拼接,典型的空间换时间
  4. 代价是显存:缓存随序列长度和并发数线性增长,长对话高并发下可能比模型权重还占显存

回答与解析

答案要点

  • 大模型生成是逐 token 自回归的,每生成一个新 token 都要「回看」前面所有 token

  • 不加缓存时,前面每个 token 的 Key/Value 会被一遍遍重算,计算量随长度急剧膨胀

  • KV Cache 把已算过的 K、V 存进显存,新 token 只算自己的再与缓存拼接,典型的空间换时间

  • 代价是显存:缓存随序列长度和并发数线性增长,长对话高并发下可能比模型权重还占显存

  • 它是所有主流推理框架的默认标配,也是 PagedAttention 等显存优化的起点

核心概念

KV Cache(键值缓存)是大模型推理时,把注意力计算中每个已处理 token 的 Key 和 Value 向量缓存在显存里、避免重复计算的优化技术。背景是:大模型生成文本是自回归的——答案一个 token 一个 token 往外蹦,而每生成一个新 token,注意力机制都要用它和前面所有 token 的 K、V 做计算。关键观察是:前面那些 token 的 K、V 在每一轮里的值完全一样,重算纯属浪费。

直觉:开会记笔记

不缓存,相当于每来一位新发言者,书记员都要把前面所有人的发言从头速记一遍;有了 KV Cache,前面的发言都记在本子上,新发言者只需记下自己这一条,其余翻本子对照即可。

加速效果与显存代价

  1. 加速:每步生成从「重算整个前缀」变成「只算 1 个新 token」,单步计算量从随长度增长变为近似恒定,长文本生成提速常达一个数量级

  2. 代价:缓存大小约等于 2 × 层数 × KV 头数 × 头维度 × 序列长度 × 并发数 × 精度字节数,随长度和并发线性增长;7B 模型在长上下文、多并发时,KV Cache 占用可与权重相当甚至更多

  3. 显存于是决定了能同时服务多少用户、每人能聊多长——这正是大模型推理服务贵在显存的重要原因

入门后可深入 PagedAttention(vLLM 的分页式缓存管理)、GQA/MQA(从架构上减少 KV 头数)以及 KV Cache 量化。

口语版讲法(约2分钟)

  • KV Cache本质是空间换时间
  • 自回归推理重复计算问题
  • 加速效果与显存代价
  • 衍生优化方向与风险

这道题其实在问大模型推理加速里一个很经典的取舍:用显存换计算。先说背景,大模型生成是自回归的,一个 token 一个 token 往外蹦。每蹦一个新 token,注意力机制都要拿它和前面所有 token 的 Key、Value 做计算。核心观察是,前面那些 token 的 K、V 在每一轮里值完全一样,不加缓存的话,每步都要把整个前缀重算一遍,计算量随序列长度急剧膨胀。KV Cache 就是把这些算过的 K、V 存进显存,新 token 只算自己的,再跟缓存拼起来。你可以这么理解,相当于开会记笔记,不缓存就是每来一个新发言者,书记员都要把前面所有人的发言从头速记一遍;有缓存的话,前面的已经记在本子上,新来的只记自己这句,其余翻本子对照就行。

那加速效果很明显,单步计算量从随长度增长变成近似恒定,长文本生成提速能到一个数量级。但代价就是显存。缓存大小大概是 2 乘层数乘 KV 头数乘头维度乘序列长度乘并发数乘精度字节数,随长度和并发线性增长。7B 模型在长上下文、多并发时,KV Cache 占用能和模型权重相当甚至更多。说白了,显存决定了能同时服务多少用户、每人能聊多长,这也是大模型推理服务贵在显存的重要原因。

这里有个坑,就是显存不够时不能简单把序列截断,否则对话体验会断崖式下降。所以现在主流推理框架都在做显存优化,比如 PagedAttention 把缓存分页管理,减少碎片;GQA 和 MQA 从架构上减少 KV 头数;还有 KV Cache 量化,用更低精度存。这些本质上都是在加速和显存之间找平衡。

如果面试官追问,我会说还有一个容易被忽略的点:KV Cache 的显存占用在长对话场景下可能比模型权重还大,而且随着并发数线性增长,所以实际工程中,服务端的显存预算往往不是按模型大小算的,而是按最大上下文长度和并发用户数算的。

关键一句:KV Cache 显存占用在长对话高并发下可能超过模型权重,服务端显存预算应优先考虑上下文长度和并发数。

面试官还可能这样问

  1. 问法 1 · 概念辨析KV Cache 缓存的是 Key 和 Value,那为什么不需要缓存 Query?你能从注意力的计算方式解释一下吗?
  2. 问法 2 · 场景切入线上推理服务显存告急,监控发现 KV Cache 占了大头,在不换卡的前提下,你能想到哪些缓解思路?