你让 AI 读完一本很长的书,再陪你来回讨论。它每说一个新词,都要翻看此前留下的“阅读笔记”。书越长,这叠笔记越厚。到后来,真正拖慢回答的可能不再是模型本身有多大,而是这些笔记能不能及时搬进芯片。
这叠笔记就是 KV cache——模型为已经读过的每个词元保存的中间结果,避免生成下一个词时从头重算。Tejinder Singh 的综述论文《The KV Cache Is the New Memory Wall》提出:在长上下文、自回归生成的特定阶段,推理瓶颈会从模型权重转向 KV 缓存。这里的“内存墙”是指芯片算得很快,数据却搬得不够快,计算单元只能等。
这个判断来自同一篇论文的解析模型和文献整理,尚无独立信源复核。下文的速度数字主要是按字节流量推导的上限,不等于真实部署中的实测成绩。
墙为什么会换位置?
模型权重是训练后固定下来的大量参数,可以理解为 AI 的长期知识。运行模型时,系统通常要把权重放进 GPU 的高速内存 HBM。论文以 BF16——每个数用 16 位存储——版本的 Llama-3-70B 为例:权重约占 140 GB,已经装不进一张配有 80 GB HBM 的 H100。
KV 缓存则不同。它会随对话增长。论文计算,Llama-3-70B 的一条 128k-token 序列还要增加约 42 GB KV 缓存。token 是模型处理文字的基本单位,并不等同于一个汉字或一个单词。上下文越长、同时服务的请求越多,缓存就越大。
问题不只在“放不放得下”,还在“搬不搬得动”。生成阶段一次只写出一个新 token,但每一步都要读取此前缓存。显存带宽——HBM 每秒能搬运多少数据——像道路通车能力。缓存不断增长,相当于每走一步都要让更多货车重新上路。
论文用 roofline model(屋顶线模型,一种比较芯片计算能力与数据搬运能力的方法)分析 H100、B200 和 MI300X,并给出一个关键分界点:当上下文短于硬件和负载共同决定的“交叉长度”时,权重流量更大;超过它之后,KV 流量开始占主导。这个交叉点并非固定常数。模型结构、批量大小、缓存精度和芯片拓扑都会改变它。
以论文对 Llama-3-70B 的推导为例,batch size 为 1 时,交叉点约为 427.2k token;批量增至 32 时,交叉点降到约 13.4k。batch size 是系统同时处理的序列数。权重可以由一批请求共同读取,KV 缓存却是每条序列各有一份。因此,并发越高,KV 墙反而越早出现。
五种办法,其实在解决不同问题
论文把现有方案归为五类。
Quantization(量化)用更少的位数保存缓存。比如从 16-bit 降到 4-bit 或 2-bit,直接减少每一步需要读取的数据。论文归纳认为,结构感知的方法可把低精度造成的损失压低;但对朴素方案而言,精度低于 4-bit 后,质量退化会加速。
Token eviction(词元淘汰)只保留被判断为更重要的历史位置。它也能直接削减容量和带宽,但删除不可逆。综合任务可能容忍较高淘汰率,答案恰好藏在某个历史位置的任务却可能突然失效。论文称这种风险具有位置敏感性,不能只看一个平均分。
KV paging(分页)把缓存切成固定大小的块,减少内存碎片和提前预留造成的浪费。论文引用既有研究称,传统预留方式可能浪费 60%至80%的缓存空间,分页可把浪费控制在 4%以下。不过,它主要让已有空间得到更充分利用,并不自动减少每一步必须读取的有效数据。
Prefix caching(前缀缓存)让多个请求共享相同开头,例如共同的系统提示或文档。命中共享内容时,系统不用重复存储和计算这部分状态。它可以无损,但收益取决于请求之间究竟有多少重复。
Heterogeneous tiering(异构分层)把 KV 缓存放到 HBM、主机内存乃至存储设备的不同层级。它解决“装不下”,却没有让数据消失。如果生成每一步都要从较慢层取数据,瓶颈只是从 HBM 转移到 PCIe 或 NVLink 等互连链路。
真正重要的是先判断身处哪一段
论文提出三个阶段。交叉点以前,权重流量占主导,压缩 KV 对端到端速度帮助有限。交叉点以后,KV 流量占主导,减少缓存字节才更接近减少运行时间。再往后,如果总容量已经无法容纳模型与缓存,系统就必须采用多设备放置或分层存储。
这解释了为什么同一种优化在不同论文里可能显得忽强忽弱。论文以 B200、Llama-3-70B、batch size 1 的解析上限为例:在 128k 上下文中,2-bit KV 量化的推导加速仅为 1.25 倍,因为这里仍低于该设置的流量交叉点;到 512k、越过交叉点后,同一方案的推导上限升至 1.91 倍。再叠加保留一半 token 的淘汰策略,上限约为 2.05 倍。算法没变,变的是权重与缓存各自在总流量中的占比。
这也会改变系统设计的优先级。芯片不能只追求更多算力,还要考虑 HBM 带宽、多芯粒之间的数据位置和互连能力。服务系统不能只扩大批量,还要安排缓存页放在哪里、哪些请求可以共享前缀。优化算法则应先问清硬件、上下文长度和质量预算,再决定压缩、淘汰还是卸载。
局限与未知
- 论文明确区分了解析推导与既有工作报告的质量变化,但材料没有提供完整复现实验、代码及各方法统一质量指标,不能把推导上限当成实测速度。
- “KV 缓存取代权重”只适用于超过硬件特定交叉点的长上下文负载,不是所有模型、批量和部署方式的普遍结论。
- 分页与前缀共享被概括为偏向解决容量而非带宽,但实际收益仍取决于复用率、调度方式和数据移动路径。
更准确的结论不是“权重已经不重要”,而是:长上下文把系统推过某个交叉点后,AI 每一步反复搬运的运行时记忆,会比固定权重更值得优先优化。