完整题目
什么是 KV Cache?它为什么能大幅加速大模型的推理?这种加速又会带来什么代价?
本文目录
答案要点
- 大模型生成是逐 token 自回归的,每生成一个新 token 都要「回看」前面所有 token
- 不加缓存时,前面每个 token 的 Key/Value 会被一遍遍重算,计算量随长度急剧膨胀
- KV Cache 把已算过的 K、V 存进显存,新 token 只算自己的再与缓存拼接,典型的空间换时间
- 代价是显存:缓存随序列长度和并发数线性增长,长对话高并发下可能比模型权重还占显存
- 它是因果Transformer自回归推理中的常用优化,也是PagedAttention等缓存管理的基础;具体缓存策略依架构和框架配置。
核心概念
KV Cache(键值缓存)是大模型推理时,把注意力计算中每个已处理 token 的 Key 和 Value 向量缓存在显存里、避免重复计算的优化技术。背景是:大模型生成文本是自回归的——答案一个 token 一个 token 往外蹦,而每生成一个新 token,注意力机制都要用它和前面所有 token 的 K、V 做计算。关键观察是:前面那些 token 的 K、V 在每一轮里的值完全一样,重算纯属浪费。
直觉:开会记笔记
不缓存,相当于每来一位新发言者,书记员都要把前面所有人的发言从头速记一遍;有了 KV Cache,前面的发言都记在本子上,新发言者只需记下自己这一条,其余翻本子对照即可。
加速效果与显存代价
- 加速:新token的投影/前馈不再重算全部前缀;但全注意力仍要与历史K做匹配并加权V,注意力部分单步仍随历史长度近似线性增长,不是整体计算变成常数。实际提速取决于模型、上下文、batch、内核与访存,不能统一承诺数量级。
- 代价:常规MHA/GQA全注意力KV缓存的张量估算为2 × 层数 × KV头数 × 头维度 × 已缓存长度 × 并发序列数 × 每元素字节数。实际还受分页/元数据、前缀共享、滑窗、量化与MLA等架构影响;长上下文多并发时可与权重相当或更多。
- 显存于是决定了能同时服务多少用户、每人能聊多长——这正是大模型推理服务贵在显存的重要原因
入门后可深入 PagedAttention(vLLM 的分页式缓存管理)、GQA/MQA(从架构上减少 KV 头数)以及 KV Cache 量化。
参考资料
换一种问法,检查是否真正理解
概念辨析
KV Cache 缓存的是 Key 和 Value,那为什么不需要缓存 Query?你能从注意力的计算方式解释一下吗?
场景切入
线上推理服务显存告急,监控发现 KV Cache 占了大头,在不换卡的前提下,你能想到哪些缓解思路?
练习口述回答 · 约2分钟
- KV Cache本质是空间换时间
- 自回归推理重复计算问题
- 加速效果与显存代价
- 衍生优化方向与风险
这道题其实在问大模型推理加速里一个很经典的取舍:用显存换计算。先说背景,大模型生成是自回归的,一个 token 一个 token 往外蹦。每蹦一个新 token,注意力机制都要拿它和前面所有 token 的 Key、Value 做计算。核心观察是,前面那些 token 的 K、V 在每一轮里值完全一样,不加缓存的话,每步都要把整个前缀重算一遍,计算量随序列长度急剧膨胀。[[KV Cache]] 就是把这些算过的 K、V 存进显存,新 token 只算自己的,再跟缓存拼起来。你可以这么理解,相当于开会记笔记,不缓存就是每来一个新发言者,书记员都要把前面所有人的发言从头速记一遍;有缓存的话,前面的已经记在本子上,新来的只记自己这句,其余翻本子对照就行。
缓存避免重算前缀的投影和前馈,但新query仍需匹配历史K并加权V;全注意力部分单步随历史长度线性增长,整体不是常数。实际提速受模型、batch、内核与访存影响,不能预设数量级。但代价就是显存。常规MHA/GQA全注意力缓存可按2乘层数、KV头数、头维度、缓存长度、并发序列数和每元素字节数估算;分页、共享前缀、滑窗、量化和MLA会改变实际占用。7B 模型在长上下文、多并发时,KV Cache 占用能和模型权重相当甚至更多。说白了,显存决定了能同时服务多少用户、每人能聊多长,这也是大模型推理服务贵在显存的重要原因。
这里有个坑,就是显存不够时不能简单把序列截断,否则对话体验会断崖式下降。所以现在主流推理框架都在做显存优化,比如 PagedAttention 把缓存分页管理,减少碎片;GQA 和 MQA 从架构上减少 KV 头数;还有 KV Cache 量化,用更低精度存。这些本质上都是在加速和显存之间找平衡。
如果面试官追问,我会说还有一个容易被忽略的点:KV Cache 的显存占用在长对话场景下可能比模型权重还大,而且随着并发数线性增长,所以实际工程中,服务端的显存预算往往不是按模型大小算的,而是按最大上下文长度和并发用户数算的。