KV缓存压缩发展简史:从340GB到3.4GB的百倍效率跃升
KV缓存压缩发展简史
尽管大多数注意力都集中在模型改进上,KV缓存压缩的效率却取得了革命性的提升。我很好奇这些改进到底有多大,以及为什么我认为它如此重要。
核心数据:自2017年以来,存储一个token上下文所需的内存下降了约100倍。同期,顶级数据中心GPU的内存从16GB增加到288GB——提升了18倍。AI领域的内存瓶颈主要是通过数学,而非硅片解决的。
什么是KV缓存?
当你使用LLM时——无论是通过网页版ChatGPT等,还是通过Claude Code的代理方式——你的“上下文”都存储在KV缓存中。这是一个非常消耗内存的过程,导致会话长度受到硬性限制。
简而言之,你与LLM的“对话”越长,需要的KV缓存就越多。更高效的KV缓存允许你在相同的内存中输入更多内容——对话、代码、参考文档、图像。
一个不精确的类比是音视频文件的压缩。正是MP3算法让90年代末的音频文件压缩到足以使Napster(几乎)可行。同样,MPEG2让数字电视得以运行,而后续的H.264等算法让Netflix在较慢的宽带连接上也能流畅播放。
没有现代视频压缩编解码器,Netflix上的4K流需要(许多)吉比特的带宽才能运行。而有了压缩编解码器,它可以被压缩到15兆比特/秒的带宽分配——超过100倍的压缩比。
通过实现这种效率,你通常可以超越硬件改进。毫无疑问,宽带连接最终会足够快,允许未压缩的4K视频流,但压缩使你能够更快地将改进推广到更广泛的市场。
KV缓存的起源
当Transformer在2017年左右首次出现时,一个128K token的上下文窗口(大约10万个英文单词)需要大约340GB的GPU内存才能进行一次对话,使用的是MHA。这假设是一个70B级别的稠密模型,16位精度——即对话中每个token需要约2.6MB内存。
2017年,绝对最先进的数据中心GPU,如Tesla V100,配备了16GB的HBM2内存。因此,在该架构上,你需要大约20块顶级GPU才能进行一次对话——这在今天看来会非常受限。
虽然这是后见之明——当时你甚至无法用Transformer进行任何对话——但这表明硬件和效率相差多远。
第一个重大飞跃是2019年Google的Noam Shazeer提出的MQA。通过在所有查询头之间共享单个KV头,这实现了(对于有64个注意力头的模型)64倍的巨大缩减。然而,这有重大缺陷——质量受到明显影响,训练变得不稳定,长程召回显著退化。它得到了一些采用(PaLM和Falcon使用了它),但很明显压缩过于激进。
GQA
随着LLM能力开始提升,上下文窗口成为一个巨大的问题。GPT-3.5的上下文窗口限制仅为4K token——勉强够输入几页文档。这无疑是因为巨大的内存需求。
这个限制有多严重,怎么强调都不过分。虽然模型仍处于非常早期的阶段,但如果在上下文窗口效率方面没有进一步发展,LLM将仅限于非常短的问答环节。任何类型的代理工作流,无论模型质量如何,都将受到极大限制——即使在Claude Code中,定义代理可以访问的工具现在就需要20k token,还不包括任何输入或输出。
LLM提供商掩盖这一问题的主要方式就是删除你会话中的消息。ChatGPT可能只保留你的第一条消息和适合上下文窗口的最后n条消息。这导致了极其糟糕的结果,因为它会立即忘记刚才说过的话。对于任何严肃的文档工作,这完全不可行。
GQA于2023年出现,允许查询头分组共享KV头——介于MHA和MQA之间的中间方案。使用8个KV头组,可以实现8倍的缩减——并且随着会话增长,质量损失很小。Llama 2 70B和Mistral几乎立即采用了它,并迅速成为开放模型的默认选择。
大约在同一时间,另一种技巧并行出现:滑动窗口注意力,其中某些层只关注最近的固定窗口的token,因此它们的KV缓存份额完全停止增长。Mistral在2023年推出了它,而Google的Gemma模型后来将局部和全局注意力层交错排列,实现了类似效果。
一旦这类方法变得普遍,我们开始看到上下文窗口长度快速增长——无疑也是因为更多内存可用。GPT-3.5-Turbo允许16k上下文窗口,而最初的GPT-4仅以8k发布(还有一个昂贵的32k变体),GPT-4-Turbo在2023年底大幅扩展到128k。
MLA——DeepSeek的惊喜
下一个重大飞跃来自DeepSeek在2024年提出的MLA。MLA不是共享查询头之间的KV头,而是将键和值压缩成一个更小的潜在向量,并将解压缩步骤折叠到周围的投影矩阵中,这样完整的键和值就永远不必具体化。DeepSeek在其V2论文中声称KV缓存大小减少了93%——同时在质量基准上有所改进,而不仅仅是保持稳定。
这是一个重要的证明点。MQA表明,如果你接受质量损失,可以强力压缩;GQA表明,可以在几乎无损失的情况下实现适度压缩;但MLA表明,你可以比GQA再高一个数量级,而不牺牲任何东西。这也是DeepSeek之所以能以如此低廉的价格提供服务、并在2025年初一天内抹去Nvidia近6000亿美元市值的重要原因。
与此同时,KV缓存本身的量化——将键和值以8位甚至4位精度而非16位存储——变得越来越标准,在已有基础上再次将有效容量大致翻倍或翻四倍。更近期的方案如Google的TurboQuant将这一点推得更远。
(还有一整个并行领域的服务端改进,如vLLM的PagedAttention——但那是关于管理KV内存,而非压缩它,因此我在此不作讨论。)
代理能力
从2023年底到2025年,模型在上下文窗口大小上有些“停滞”,OpenAI和Anthropic提供的模型大约在128-200k token长度。公平地说,这些上下文长度并不差——它们足以完成编码任务和中等复杂的文档处理。但随着真正的编码代理逐渐兴起,这变得非常受限。
在这段时间内,如果你构建或使用代理,你不得不花大量时间考虑这个问题。读取太多大文件会突破窗口,导致可怕的“压缩”运行——这是一个相当粗糙的过程,试图总结代理可以访问的所有内容。
2025年左右的下一项重大突破是线性注意力混合体——如Qwen3-Next和Kimi Linear,它们用线性注意力替换了大部分完整注意力层,每层保持一个固定大小的状态,而不是不断增长的缓存。只有少数层保留完整的KV缓存。这种方法(当然还有其他不太为人所知的方法)使上下文窗口能够扩展到1M token,且质量损失最小。这很可能是Anthropic今年早些时候能够推出1M上下文窗口而不额外收费的重要原因。
> KV缓存每个上下文token的内存(对数尺度)。同期GPU内存仅改进约18倍。
> 另外:我知道有些人不喜欢对数尺度,但如果不使用对数尺度,你根本无法在同一个图上看到17GB和340GB。线性图会让早期改进看起来几乎为零。这只是数学事实。
未来
这种趋势没有放缓的迹象。研究越来越指向彻底消除二次注意力的瓶颈——纯线性和递归方法,无论上下文多长都保持固定大小的状态。这些方法能否在质量上完全匹配注意力仍是一个开放问题,但混合体已经表明,你不需要每一层都支付全价。
不过,我觉得最有趣的是:在九年间实现约100倍压缩增益的过程中,令人惊讶的是很少有部分表现为成本降低。Token价格确实下降了,但大部分效率被用于更长的上下文窗口。4K变成了128K,变成了1M。就像视频编解码器的效率被用于更高分辨率而非更小文件一样,我们不断将内存效率投入更强大的代理。而由于内存现在是AI建设中最严峻的制约之一,我预计这种情况将持续下去。
正如这个领域一贯的情况,这篇文章的一半内容可能一年内就会过时。有大量资金投入使上下文更便宜——我当然不会打赌不可能再提升100倍。