一句话定义:KV 驱逐(KV Eviction)指在AI 词典:自回归生成">自回归生成过程中主动丢弃一部分历史 token 的 KV 缓存;H2O(Heavy-Hitter Oracle)是其中一种代表性策略,核心判断是"注意力只集中在少数 token 上"。
为什么会有 KV:模型每生成一个新 token,都要回看之前所有 token 的 Key 和 Value 向量。为了不重复计算,推理框架把它们缓存下来,这就是 KV cache。它的体积随上下文长度和并发数线性增长,长上下文场景下常常比模型权重更占显存,是吞吐量的主要瓶颈。
怎么判断该扔谁:观察发现每层注意力权重高度倾斜——少数 token 反复被关注,吃掉大部分注意力质量,这些就是 heavy hitter;刚生成的最近几个 token 几乎总被强烈关注;序列开头几个 token 常充当注意力汇聚点(attention sink),也不宜轻易扔。H2O 给 KV 设一个固定预算,每步解码后把新 token 收到的注意力分数累加到历史分数上,按累计分数保留 top-k 重击手加一个最近窗口,其余淘汰。显存从线性增长变成有上限,被驱逐的 token 不再参与计算,解码也更快。
打个比方:两小时的会,桌面放不下全部速记,你只能留两类纸——被反复引用的发言,和刚刚说过的两三句,其余撕掉。"谁被引用得最多"就是 H2O 的规则。
和相邻概念的区别:
| 方法 | 处理对象 | 判断依据 | 代价 |
|---|---|---|---|
| KV 驱逐 | 删掉部分 token 的 KV | 注意力累计得分、位置 | 可能丢长距离细节 |
| KV 量化 | 全部保留,降低向量精度 | 统一降位宽或重要部分高精度 | 数值误差累积 |
| 滑动窗口 | 只留最近 N 个 token | 位置 | 远处信息直接消失 |
| 上下文截断 | 输入前就删文本 | 人工或规则 | 模型看不到被删内容 |
实际意义:驱逐与量化常叠加使用,是长上下文推理、高并发服务摊薄单 token 显存成本的关键手段。但它是有损的:需要精确检索远处细节的任务(例如从长文档里抠一个数字)容易掉点,预算比例、是否保底保留 sink token 要按业务调;各推理框架的支持情况以官方文档为准。
