长上下文为什么更吃显存?KV Cache 省掉的重算和没省掉的 attention
KV Cache 常被说成省算力,但它省掉的是历史 token 的 K/V 重算,没有省掉 attention。上下文一长,瓶颈会转到显存。这篇把 prefill、decode 和常见优化串起来。
KV Cache 解决的问题很具体:自回归生成时,模型每吐一个 token,都要拿当前 token 的 Q 去和历史 token 的 K/V 做 attention。历史 token 的 K/V 如果每步重算,代价会随上下文长度增长。KV Cache 把这些 K/V 存下来,下一步直接复用。
生成过程可以拆成两段。
Prefill 阶段,模型读入 prompt,一次处理整段输入,计算并缓存各层的 K/V。Decode 阶段,每步只处理新 token,算它的 Q、K、V,把新的 K/V 追加进缓存,历史 K/V 从缓存里取。推文作者 ramakrishna e/acc 特别强调了一点:KV Cache 没有消除对历史 token 的 attention,它消除的是历史 K/V 的重算。这个区别很关键,不然容易把推理优化理解错。
上下文越长,KV cache 占用越高,可能成为主要瓶颈。它受层数、KV 头数、head 维度、序列长度、batch 大小影响。于是有了 MQA、GQA 来减少 KV 头数,PagedAttention 做分页管理,Prefix Caching 复用相同前缀。这些技术都在解决同一个方向的压力:缓存怎么少占显存,怎么少搬数据,怎么复用。
原推文配了一段图解视频:
对做推理服务的人,KV Cache 直接影响吞吐、延迟和显存预算。对普通用户,它解释了长对话为什么更吃资源,以及相同长前缀为什么能被复用。理解 KV Cache,才能看懂 LLM 推理系统里那些优化到底在省什么。
来源:ramakrishna e/acc 的推文,原文链接。
发布时间: 2026-11-09 16:26