什么是 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 向量避免重复计算,是空间换时间;代价是显存随长度和并发线性增长。
面试官可能的追问
- 【概念辨析】KV Cache 缓存的是 Key 和 Value,那为什么不需要缓存 Query?你能从注意力的计算方式解释一下吗?
- 【场景切入】线上推理服务显存告急,监控发现 KV Cache 占了大头,在不换卡的前提下,你能想到哪些缓解思路?