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

推理优化

答案要点 大模型生成是逐 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 个新 token」,单步计算量从随长度增长变为近似恒定,长文本生成提速常达一个数量级 代价:缓存大小约等于 2 × 层数 × KV 头数 × 头维度 × 序列长度 × 并发数 × 精度字节数,随长度和并发线性增长;7B 模型在长上下文、多并发时,KV Cache 占用可与权重相当甚至更多 显存于是决定了能同时服务多少用户、每人能聊多长——这正是大模型推理服务贵在显存的重要原因 入门后可深入 PagedAttention(vLLM 的分页式缓存管理)、GQA/MQA(从架构上减少 KV 头数)以及 KV Cache 量化。

口语版讲法(约2分钟)

  • 一句话定义:缓存已算过的 K/V,避免重复计算
  • 背景:自回归生成,每个新 token 都要回看全部前文
  • 比喻:开会记笔记,新发言者只记自己这一条
  • 代价:显存随长度和并发线性涨,可能超过权重
  • 埋钉子:PagedAttention、GQA、缓存量化

KV Cache 是大模型推理时最基础也最重要的加速手段。一句话说,就是把注意力计算里已经算过的 Key 和 Value 向量缓存起来,避免每生成一个新词都从头重算一遍,典型的空间换时间。 先讲背景。大模型生成回答是自回归的,答案是一个 token 一个 token 往外蹦的。注意力机制要求每个新 token 都要和前面所有 token 做交互,交互用的就是每个 token 的 K 和 V 这两个向量。关键在于:前面那些 token 的 K 和 V,不管生成到第几步,值都是完全一样的。如果不缓存,生成第 100 个词时要把前 99 个的 K、V 重算一遍,生成第 101 个词又重算前 100 个,越往后浪费越夸张。 打个比方,像开会记笔记:没有缓存,相当于每来一个新发言的人,书记员都要把前面所有人说过的话重新速记一遍;有了 KV Cache,前面的发言都在本子上,新发言者只需要记他自己这一句,其余翻本子就行。这样每一步的计算量就从随长度增长变成基本恒定,长文本生成速度能提升一个数量级,所以现在所有主流推理框架默认都开着它。 但它不是免费的,代价是显存。缓存要给每一层、每个注意力头、每个 token 都存一份 K 和 V,大小随序列长度线性涨,还要乘上并发用户数。长对话加高并发的场景下,KV Cache 吃掉的显存可能比模型权重本身还多,显存不够就得砍并发或者砍上下文长度,这也是大模型推理服务成本高的重要原因。 所以业界围绕怎么让 KV Cache 更省显存做了很多文章。比如 vLLM 的 PagedAttention,用类似操作系统内存分页的方式管理缓存、减少碎片;还有 GQA 这类从模型架构上就减少 KV 头数的设计,以及对缓存做量化压缩。这几个方向我觉得都很值得往下深挖,可以展开聊。

关键一句:KV Cache 用显存缓存已算过的 K/V 向量避免重复计算,是空间换时间;代价是显存随长度和并发线性增长。

面试官可能的追问

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

同模块相关题目