Paper Reading Notes · arXiv:2609.03430

Random Attention:重新思考 KV Cache 驱逐
for 高效推理

KV cache 驱逐一直被当作"打分排序"问题——给每个缓存 token 估计未来重要性,保住分最高的。本文直接检验这个前提并给出否定答案:保住 prompt + 每个 KV 头内均匀随机驱逐、不打任何分,就能在 4 个模型 × 6 个推理任务上追平最强驱逐器,并在 vLLM 部署中以 32–43% 的吞吐优势胜出。两个控制实验解释了原因:prompt 才是 cache 的脆弱部分;推理轨迹靠"文本复述 + 跨头复制"两层冗余自我保护。
Salesforce AI Research + UIUC(Heng Wang 等) 论文:arXiv:2609.03430 代码:GitHub
KV Cache 驱逐推理模型长思维链高效推理vLLM 部署
01 · Overview

速览

推理模型靠生成数万 token 的思维链解决难题,KV cache 随生成长度线性膨胀,成为解码期的显存瓶颈。现有驱逐(eviction)方法共享一个范式:给每个已缓存 token 打一个"未来重要性"分数,保留分最高的 top-K。本文的检验结果近乎釜底抽薪——这个选择信号几乎不贡献任何精度

方法本体
保住 prompt + 每头随机驱逐不打分、不校准、不调参;每轮一次 rand + 一次 topk
精度(4 模型 × 6 任务)
60 格中 31 格显著领先仅 1 格显著落后(32B 代码任务,归因 prompt 长度)
吞吐(vLLM, 32k 生成)
比最强基线快 32–43%免打分带来;同时是 full attention 的 1.6–2.7×
单轮驱逐成本
0.30 ms纯压缩下限;最强基线 TriAttention 要 1.47–1.64 ms

作者把 Random Attention 同时定位为可部署的方法零假设(null hypothesis):任何打分式选择器如果在同等预算下打不过"随机",就说明它的信号没有提取到可用信息。两张总览图先把结论立住:

Figure 1: 六任务平均精度对比(左)与 vLLM 服务吞吐(右)
Figure 1:(a) Mean accuracy over the six reasoning tasks of Tables 1 and 5 at ∼4× compression: Random Attention matches the strongest prior evictor on every model. (b) vLLM serving throughput at 32k-token generations; labels give Random Attention's multiple of full attention and its margin over TriAttention. 左图:约 4× 压缩下,六个推理任务的平均精度——四个模型上 Random Attention(最右柱)与最强基线 TriAttention 基本持平(14B/32B 的小差距主要来自代码任务,那里超长 prompt 吃掉了预算,见 §4)。右图:32k 生成的 vLLM 服务吞吐——Random Attention 达到 full attention 的 1.58×/2.23×/1.97×/2.67×,比 TriAttention 高出 +37%/+43%/+40%/+32%,原因很简单:它从不运行打分过程。

💡 点击任意图片可查看原始高清大图,再次点击或按 Esc 关闭。

一句话结论:驱逐器的精度由"它保护了什么"决定,而不是"它怎么给其余 token 排序"。保护住不可恢复的 prompt 之后,推理轨迹的冗余足以让随机抽取保留模型还需要的东西——打分信号剩下的用武之地,是"只说一次、从不复述"的稀有事实,而推理轨迹很少产生这种事实。
02 · Preliminaries

背景:驱逐框架与"打分函数动物园"

为什么是解码期驱逐

推理模型创造了一个特殊 regime:一个 200 token 的数学问题,可能触发 10,000+ token 的思维链。cache 的膨胀发生在解码阶段,而不是 prefill。这决定了问题形态——

本文只讨论前者:要给内存封顶,驱逐是唯一的路。

记号与周期性驱逐框架

解码第 $t$ 步,一个注意力头持有 $N$ 对缓存 $(k_i, v_i)$,位置 $1,\ldots,\ell_p$ 是 prompt。输出由当前查询 $q_t$ 加权求和得到:

$$o_t=\sum_{i\le N}\alpha_i^{(t)}v_i,\qquad \alpha_i^{(t)}=\frac{\exp\left(q_t^\top k_i/\sqrt{d}\right)}{\sum_{j\le N}\exp\left(q_t^\top k_j/\sqrt{d}\right)} \tag{1}$$

框架沿用近期工作的 decode-phase 设定:持久预算 $K$ + 近期缓冲 $r$( $r \ll K$,缓冲永不打分)。每步追加一对,每 $r$ 步缓冲填满触发一次驱逐——对候选集 $C_t$(缓冲之外的全部缓存位置)按策略分数 $s_i$ 保 top-K:

$$S_t=\operatorname{top-}K_{i\in C_t}\; s_i \tag{2}$$

驱逐是单调的:丢掉的对永远消失。各驱逐方法的差异,几乎全部落在分数 $s_i$ 怎么定义上:

各驱逐策略 = 各自的打分函数 si(按论文 §2 的统一记号整理;最后一行为本文方法)
方法分数 si 的定义一句话直觉默认 prompt 处理
StreamingLLM无分数(结构规则)保注意力sink + 近期窗口仅 sink tokens
H2O$\sum_{t'=i}^{t}\alpha_i^{(t')}$入缓存以来累计注意力最高的留下交给分数
SnapKV$\sum_{t'=t-w+1}^{t}\alpha_i^{(t')}$,近邻 max-pool只看最近 $w$ 个查询都关注谁仅 sink tokens
R-KV$\lambda s_i^{\text{Snap}}+(1-\lambda)(1-\bar c_i)$,$\bar c_i=\frac{1}{N-1}\sum_{j\ne i}\cos(k_i,k_j)$注意力高且不冗余的留下(复述过的事实不存两份)仅 sink tokens(实际保留最多)
VaSE值幅值 $\max_j v_{ij}-\min_j v_{ij}$ 保 $n_{\text{large}}$ 个,其余按 SnapKV 分数采样填充值向量"摆幅大"的位置更重要,其余随机补齐仅 sink tokens
TriAttention$f(t-i)$(逐头校准的三角级数,组合 $\lVert k_i\rVert$)按"离当前查询的位置距离"打分默认保全部输入
Random Attention(本文)$+\infty$(prompt)/ $u_i\sim\mathrm{Uniform}(0,1)$问题绝不丢,轨迹随机撒整个 prefill 钉死
伏笔(§5.1 揭晓):注意最后一列——各方法默认的 prompt 保护制度并不一致:TriAttention 默认保住整个输入,而 VaSE/R-KV/SnapKV 默认只保 sink tokens、把 prompt 的存亡交给分数。这意味着跨论文比较精度时,其实同时在比较"保护制度"。这个混淆变量是后文归因实验的主角。
03 · Method

方法:两个结构性选择,四行算法

Random Attention 是一个无信号(signal-free)的驱逐策略,全部内容是两个结构性选择。直觉是把"不可替换的输入"与"模型自己生成的轨迹"分开:问题只陈述一次,丢了就永远找不回来;而轨迹在生成过程中不断回访、复述自己的中间状态。

写成公式,整个方法就是:

$$s_i=\begin{cases}+\infty, & i\le \ell_p \quad(\text{prompt})\\[2pt] u_i\sim\mathrm{Uniform}(0,1), & \text{otherwise}\end{cases} \tag{3}$$

每层逐头独立抽取,式 (2) 完成剩下的工作。算法全文四行:

Algorithm 1 · Random Attention 打分(一次驱逐事件,逐层运行)
Require: batch B · KV 头数 Hkv · 缓存位置数 S · prompt 长度 ℓp · 预算 K
1: s ← rand(B, Hkv, S) ▹ 每个缓存位置、每个 KV 头独立的均匀随机分数
2: s[:, :, 0:ℓp] ← +∞ ▹ 强制保住问题
3: keep ← topk(s, K) ▹ 每个 KV 头独立的 top-K
4: return keep

每次驱逐的成本 = 一次 rand + 一次 topk这是能写出来的最弱选择信号——因此该方法具有双重身份:既是可部署的方法,也是一个零假设。任何信号驱动的选择器,如果在同等预算下赢不了它,就没有从自己的信号里提取到可用信息。

隐式的年龄偏好(§7 展开):虽然没有计算任何分数,这个策略并不是"年龄盲"的。一个位置每活过一次驱逐,下一轮就要重新抽签,存活 $n$ 轮的概率约为 $\left(\frac{K-\ell_p}{K+r-\ell_p}\right)^n\approx 0.94^n$(取 $K=1024$、$r=64$)。所以 Random Attention 实际是一个软近期窗 + 逐头不同的长尾:近期位置几乎总在,老位置以薄尾存活、且各头的尾不同。
04 · Experiments

实验:主结果网格与压缩压力

设置

主结果:数学与科学上信号不买任何东西

Table 1 给出主网格(14B 的复制在 Table 5)。配对检验下,Random Attention 在 60 个基线格中31 格显著领先、仅 1 格显著落后:

Table 1: 三模型 × 五任务主结果网格
Table 1:Accuracy under KV cache eviction at each task's ∼4× compression (LiveCodeBench: ∼3×); the header gives each task's per-head KV budget K. Bold: best eviction method per column; grayed: significantly below Random Attention. 读表三个层次:① MATH500/GPQA-D——Random Attention 在每个模型上显著超过 VaSE 与 SnapKV,在 Qwen3-4B 上还显著超过 R-KV;没有任何选择器在这里显著超过它(TriAttention 在两个 GPQA-D 格的名义领先只有 0.3–0.6 分,在噪声之内)。② AIME/HMMT——竞赛数学样本小而难(16 次采样/题),SnapKV 在每个模型上仍显著落后,R-KV 在 Qwen3 系、VaSE 在 Phi-4 上也显著落后;VaSE 在 32B 上的 +1.7/+1.5 名义领先,对照两种方法 ±5 分的 run-to-run 标准差,只是噪声。③ LiveCodeBench 是唯一拉开大差距的任务——SnapKV 每个模型掉 20–35 分,VaSE 在 Phi-4 上塌到 0.373(落后 29 分)——原因见下面的 prompt 长度分析。

Qwen3-14B 在中间规模上复制了同样的图景(Table 5),其中出现 3 个基线显著领先的格子:TriAttention 在 LiveCodeBench(+2.6 分,$p=.007$)与 MATH500(+2.1 分,$p=.02$),VaSE 在 AIME(+2.6 分,$p=.007$)——与它们在 32B 上的名义领先一致,下文 prompt 长度账本能解释代码任务上的那一格。

Table 5: Qwen3-14B 主网格复制
Table 5:Performance of Qwen3-14B with the same setting as in Table 1. 14B 的复制网格:Random Attention 在 MATH500(0.870)与 GPQA-D(0.628)上显著超过 VaSE 与 SnapKV,整体仍与 TriAttention 胶着(五任务各有胜负、差距都在 2 分级)。注意 LiveCodeBench 上 TriAttention 0.843 vs Random Attention 0.820——这是它在代码任务上跨 14B/32B 稳定出现的小优势,§4 末尾与 §5.1 会说明这更多是"长 prompt 预算"而非"选择信号"的故事。

压缩越紧,差距越大——而且对每个家族都一样

Figure 2: 2× 到 16× 压缩下的精度曲线
Figure 2:Accuracy from 2× to 16× compression on Qwen3-4B and Phi-4-reasoning, on the four math and science tasks; dashed lines mark full attention. 四个数学/科学任务上从 2× 压到 16×:2× 时所有方法都贴着 full attention(虚线);预算收紧后,Random Attention 与 TriAttention 继续并肩下行,而两者的领先带对 VaSE 逐渐拉开(如 Qwen3-4B MATH500 16× 处 0.39 vs 0.09)。"随机"并没有在压力下崩掉——它跟住了最强的打分基线。LiveCodeBench 不参与扫描,因为它的 prompt 在小预算下本身就放不下。

代码任务为何特殊:prompt 是六倍长

LiveCodeBench 是唯一出现大分差的任务,而账本指向 prompt 长度而非选择信号:

主结果读法:在打分信号声称最擅长的地方(数学/科学推理),随机+保 prompt 与最强基线统计上不可区分;唯一输的一格(长 prompt 代码)输在预算分配,不在排序质量。下一节把"为什么"拆开。
05 · Analysis

分析:为什么打分信号几乎不买任何东西

推理时的 cache 内容天然分成两类:prompt(陈述一次,之后不再出现)与工作状态 working state(解题过程中不断书写、重写的中间步骤)。两个控制实验分别证明:第一类是脆弱的,而各方法的差距大部分只是"分数弄丢了多少问题";第二类冗余到随机抽签就能留住模型还需要的东西。

5.1 prompt 才是脆弱的部分

§2 的伏笔在这里揭晓:各方法对 prompt 的默认处理不一(TriAttention 保全部输入;VaSE/R-KV/SnapKV 只保 sink、把 prompt 交给分数)。让每个方法都拿到同一条规则("保住 prompt"),就能把"分数"与"保护"两个变量拆开:

Table 2: 加 prompt 保护规则前后的成绩对比
Table 2:Performance before and after protecting the prompt. R-KV never gains more than 1.9 points, SnapKV gains everywhere, VaSE gains materially only on Phi-4-reasoning. 规则给每个方法"发钱",发得刚好等于它的分数此前弄丢的问题量:SnapKV(默认保留 prompt 最少)处处大涨,Phi-4 GPQA-D 上 +22.5 分;VaSE 只在其保留失败的地方涨(Phi-4 的 prompt 比 Qwen3-4B 长 2–3 倍,+4.2/+10.2);R-KV 本来就保留得最多,涨幅从未超过 +1.9 分。规则之后,三个基线在每个设置里彼此差距 ≤2.2 分。更扎心的是两行"无信号"对照:没有规则时,纯近期窗低到 0.093、Random Attention(那时 prompt 只按均匀概率存活)掉到 0.23–0.76;有规则后,Random Attention 在每个设置都是最优,连纯近期窗都距最佳基线不到 2 分。丢 prompt 是灾难性的,随机砍轨迹不是——这就是"prompt 是脆弱部分"的含义。

Table 6 把同样的控制推广到 Table 2 没覆盖的设置(代码任务、竞赛数学、32B 的 GPQA-D),结论在全部十五个受保护格子上成立:

Table 6: 其余设置下的 matched protection 对照
Table 6:Matched protection in the settings Table 2 does not cover (LiveCodeBench: pass@1; others: accuracy; AIME pools 2025+2026). Small numbers give the gain from the rule; bold marks the best protected method. TriAttention and Random Attention keep the prompt by construction and appear only in the protected column. 两个事实贯穿全部设置:① 回报跟随保留缺口——SnapKV 最大涨 +35.2(Phi-4 代码),R-KV 全程 −1.4~+0.9 约等于零;② 保护补上大分差但不补全部——在 32B GPQA-D 上,三个受保护的基线仍比 Random Attention 低 4–6 分,而"什么都不排序"的均匀抽取 + 规则在那里赢了每个受保护的学习型分数。另注意:TriAttention 与 Random Attention 构造上就保 prompt,所以 Table 1 里两者的每一格本来就是 matched-protection 对比——混淆变量只影响其余基线的"账面劣势"。
§5.1 结论:基线之间的差距大部分是 prompt。把 prompt 保护对齐之后,剩下的差距不但小,还往往是负的——每个学习型分数都追不上一个不排序的策略。这个混淆也解释了此前文献里"随机/近期基线远逊于打分选择"的普遍报道:那些随机基线把 prompt 丢了。

5.2 工作状态自我保护:两层冗余

cache 的其余部分是模型自己的推理轨迹,它以两个层面冗余存储:

作者用植入事实探针(planted-fact probe)量化第二层:往真实的 MATH500 推理轨迹里植入一个合成事实(如 "Let zq = 4729",每次全新的变量名与值),植入点距末尾的问题 1,536 token——中间隔着 15 次驱逐。实验控制"哪些头保住了这个事实"(在指定 (层,头) 位置钉住,其余头一律驱逐),用两个指标度量存活:Retrieval(贪心解码能否复现该值)与分级召回 R:

$$R=\frac{\sum_i\left(LP_i-LP_i^{\text{del}}\right)}{\sum_i\left(LP_i^{\text{kept}}-LP_i^{\text{del}}\right)} \tag{4}$$

其中 $LP_i$ 是模型在条件设置下赋予轨迹 $i$ 正确值的对数概率,$LP^{\text{kept}}$/ $LP^{\text{del}}$ 分别是"全保留/全删除"两个端点。$R=1$ 意味着幸存副本与"从不驱逐"一样好,$R=0$ 意味着一文不值。每个条件在同一批 250–500 条植入轨迹上评分。

Figure 3: 跨头池化与副本形状无关性
Figure 3:(a) A fact held in one head is almost never retrieved; held in several it is. (b) Two facts in different heads are worth more together than the sum of each alone (dashed). (c) Real MATH500: contiguous blocks cost nothing up to size 64; accuracy drops only once a head is left with 4 (K=1024) or 2 (K=512) blocks. (a) 头是专门化的:Qwen3-4B 的 8 个 KV 头里只有 3 个能独立留住事实的可用痕迹,而且单头极弱——最好的单头检索率 0.03、次好 0.01;但读出不在乎是哪个头:同样两个头一起就是 0.60,三个 0.83,八个 0.99——池化强超可加,一对头的价值是两个单头之和的许多倍。(b) 池化甚至跨事实:答案需要两个值、分别放在不同头时,合并召回 R=0.31,远超单独 0.10 与 0.16 之和(虚线)。(c) 副本的形状无关紧要:把事实逐 token 摊到不同头(相邻 token 不同头、没有可读跨度),检索率 0.33 vs 完整句 0.39,R 0.75 vs 0.76;真实 MATH500 上把历史按 1→64 token 的连续块保留毫无损失,块长 256 才掉——且掉的原因是每头只剩 4(K=1024)或 2(K=512)个块:要紧的是每头块数,不是块长。对驱逐策略的直接推论:一个值只要有些头留着副本就仍可用——而"逐头独立抽取"恰好最大化这一点。
共享抽取对照(shared draw):最直接的任务级检验是把跨头多样性删掉——所有头共用同一份随机 keep-set。在真实 MATH500 上它只比 Random Attention 低 0.3 分($K=1024$:0.871 vs 0.874;$K=512$:0.788 vs 0.789)。也就是说:文本层冗余在真实轨迹上已经够用(要紧的东西被复述过,撒一次就撒中);跨头层承载的是"文本不复述"的部分——那正是植入探针构造出来的 regime。两层冗余互为替代,而 Random Attention 恰好两层都保。

5.3 打分信号还剩下什么:只说一次的事实

无信号策略唯一无法覆盖的场景:一个事实只陈述一次、从不复述、很久之后才被用到。作者为此构造"密码实验":宣布一个 passcode,57 轮压缩之后才提问,让各策略自行保留,报告复现率(Retr.)与平均对数概率(log p):

Table 3: 密码实验——各策略对一次性事实的保留
Table 3:A passcode stated once, 57 compression rounds before the question. 结果整齐得像教科书:检索率恰好跟踪各信号打分所用的统计量——R-KV(对全历史累计注意力)84% 找回 passcode、log p −0.71;VaSE(按注意力比例采样)找回三分之一;SnapKV 与 TriAttention(近窗信号)几乎从不;Random Attention 从不(0.000,−18.35,等于 passcode 彻底蒸发)。理论侧,Wang (2026) 证明无冗余时随机 cache 在 pointer-chasing 上必输——找针是真实的选择技能。但它与总体强度互不蕴含:最好的找针者 R-KV 在 Table 1 只赢一列,总体最强的 TriAttention 在这里几乎一无所获。真实推理轨迹里"说一次不复述"的情况罕见——模型会不断复述正在使用的东西。
§5 总账:精度差距 ≈ prompt 保护制度 + (负的)残余选择效应;轨迹靠双层冗余自我保护,随机抽取天然契合"逐头独立";选择信号真正不可替代的场景(一次性事实)存在、可测,但推理轨迹很少生产它。这就是"打分几乎不买任何东西"的完整机制账。
06 · Efficiency

效率:免打分在服务里值 32–43%

效率在两个设置下评测:① vLLM + PagedAttention(沿用 TriAttention 的协议,与 TriAttention 同插件同内核,只换选择器);② HuggingFace Transformers + FlashAttention-2、无分页(精度实验同款引擎,单卡最大 batch)。

vLLM 分页服务:同内核下快 32–43%

单张 H200,$K=2048$、1k prompt、32k 生成、128 个并发请求(Qwen3-32B 权重占 64 GB、KV 池小,压缩运行封顶 96 并发;Phi-4 因 32k 上下文实际生成 31.5k)。32k 长度下限制并发数的是 KV cache 而非算力——cache 越小,同时在飞的请求越多:

Table 4: vLLM 吞吐对比
Table 4:Serving throughput (output tok/s, and the multiple of full attention) under vLLM with PagedAttention on one H200 (K=2048, 1k-token prompts, 32k-token generations). Random Attention 服务 2046/1737/1819/923 tok/s,达 full attention 的 1.58×/2.23×/1.97×/2.67×;比同内核的 TriAttention 快 +37%/+43%/+40%/+32%——它唯一的区别就是不打分。该差距不挑工况:8k 短生成上 +35%~+42%,容量上限处(Qwen3-4B 224 并发、14B 满)仍 +41%/+42%;单请求时两者只差 1%(115.8 vs 117.0 s)——服务差距是同步点放大的批量成本,不是单流内核差

为什么跳过打分在服务里值 32–43%

单看一轮驱逐,打分并不贵(Table 9):Random Attention 一轮 0.30 ms(纯压缩下限),TriAttention 1.47–1.64 ms。单流下这几毫秒只占解码时间几个百分点。服务把它放大了两重:

Table 9: 单轮驱逐成本
Table 9:Cost of one eviction round (scoring + compaction), measured with CUDA events on an otherwise idle H200: K=1024, 4096 decode steps, single stream. Random Attention performs no scoring, so its round time is the compaction floor every evictor pays. 逐轮成本阶梯:Random Attention 0.30 ms = 所有驱逐器都要付的压缩下限;SnapKV 0.37、R-KV 0.58、VaSE 0.74、TriAttention 1.47–1.64 ms(4B/14B)——超出下限的部分就是"选择信号的价格"。排序不变,且模型大小变 3.5× 也不变(每调用成本差 <12%)。

等显存对比:容量红利人人有份,排序跟着打分开销走

第二个设置给每个方法"能塞进 143 GB H200 的最大 batch"($K=3072$、32k 生成)。full attention 只装得下 28(4B)/ 20(14B)个序列;压缩后的 cache 装得下 109–200 个——3–10× 的加速主要来自这份容量,每个驱逐器都有份,残余的排序由打分开销决定:

Figure 5: 等显存下各方法最大 batch 的解码吞吐
Figure 5:Equal-memory serving: decode throughput relative to full attention at each method's largest batch on one H200 (K=3072, 32k generations). ∗TriAttention here is an unfused re-implementation of its scorer, far slower than the vLLM version. 柱高排序:Random Attention 10.0×(batch 200)/ 8.8×(batch 120)居首,SnapKV 与 VaSE 9.1× 一档,R-KV 6.9×/5.7×,TriAttention 行(带 ∗)3.8×/3.0×——注意这是作者 PyTorch 复现的未融合打分器,远慢于其发布内核;在 vLLM 上它与 Random Attention 的差距是 1.4× 而非这里的 2.7–3.0×。所以方法层面的公平结论以 Table 4 为准,本图用于隔离"打分开销"这一个变量。
Table 10: 等显存吞吐精确值
Table 10:Serving throughput when each method runs at the largest batch that fits one 143 GB H200, at K=3072 with 32k generations. The small cache is what buys the batch, so every evictor collects most of the win; the ordering among them follows the cost of their scoring pass. 精确数字:full 178/164 tok/s(batch 28/20);Random Attention 以最大 batch(200/120)与最小峰值显存(101/89 GB)拿到 1779/1436 tok/s = 10.01×/8.78×;同代码路径的 SnapKV 1624、VaSE 1617、R-KV 1223(4B)——排序完全跟随打分开销。16k 生成时排序不变。

预算越紧,容量倍数越大。把同一协议搬到 MATH500 的预算 $K=1024$ 上(Table 11):压缩 cache 塞进 544–584 个序列(对照 full 的 28),Random Attention 达到 full attention 的 28.8×(5110 tok/s),比 SnapKV 多 16%、比 VaSE 多 20%。

Table 11: K=1024 等显存吞吐
Table 11:Equal-memory serving at K=1024 (Qwen3-4B, 32k generations, one 143 GB H200): the tighter budget fits a batch of 584 against 28 for full attention, and Random Attention reaches 28.8× full-attention throughput. 紧预算的放大效应:batch 584 vs 28,Random Attention 5110 tok/s = 28.79× full attention——压缩带来的容量红利随预算收紧继续增长,而"免打分"在每一档都再多拿一截。R-KV 与 TriAttention 未在此预算下测量。
工程侧两个坑(作者实录,值得抄走):① vLLM 自带吞吐 benchmark 忽略请求的输出长度——默认 128 token 输出根本触不到压缩阈值,等于在测 full attention;② 该压缩集成的去重保护会在一次良性的"预算内"轮次后悄悄禁用之后的所有压缩。两者都用只动记账、不动选择/内核语义的改动修正,每次运行以"实际压缩事件计数"验证。
07 · Diagnostics

补充:keep-log 诊断、生成长度与波动

每个策略把预算花在哪:keep-log

§5 的"保留量"数字全部来自对真实运行的逐轮日志:19 个策略-格子日志、每份 16 条 trace、每份 104–105 轮,记录每轮每个(层, KV 头)的 keep-set 与保留位置的车龄。三个量:槽位覆盖率(至少一个头保留的候选比例)——Random Attention 与 VaSE 0.999–1.000、TriAttention 0.993、共享抽取对照 0.938;prompt 存活率(并集/单头)——Random Attention 0.994–0.999 且逐头相同,R-KV 0.55–0.91 / 0.26–0.67,VaSE 0.56–0.70 / 0.20–0.29,SnapKV 0.32–0.42 / 0.11–0.22(四个模型-任务设置里全都最低)。按车龄看则是一张很有信息量的图:

Figure 4: 各策略保留概率随车龄的分布(对数轴)
Figure 4:Fraction of positions of a given age that a head still holds (log scale; Qwen3-4B MATH500, K=1024). Random Attention decays geometrically with age; VaSE concentrates and freezes a tail of old favourites; TriAttention spends almost uniformly across ages. 三种"花钱形状"一目了然:Random Attention 随车龄几何衰减(软近期窗,各头的尾巴互不相同);VaSE 集中在少数"旧爱"上并冻结成尾;TriAttention 几乎均匀铺在各年龄段——单头保留不比 Random Attention 少多少,但各头几乎保同样的位置(1–2k 带跨头并集只有 0.199,是所有逐头策略里跨头多样性最低的),而 Random Attention 同带并集 0.776。"推理回看带"约为 2.2× 车龄范围——各策略都在这段带内做文章,但形状并不决定精度(§5.2),决定性的是有没有副本幸存。

驱逐会拉长生成——但 Random Attention 拉得最少

Table 7: 每格平均生成 token 数(千)
Table 7:Mean generated tokens (thousands) per cell of Tables 1 and 5, measured over every run of the cell; Avg = unweighted mean over the five tasks. 两个观察:① 驱逐普遍让生成变长(丢东西→重新想),最弱的选择器拉得最多(SnapKV 平均 17.0k vs full 12.1k,4B);② Random Attention 是 Qwen3-4B/14B 上生成最短的驱逐器(4B 平均 13.9k,14B 13.1k),另两个模型也只比最短者多 ~5%——它的精度持平不是靠更长的生成买回来的。32B 的 LiveCodeBench 例外(18.4k,该格生成最长),与其代码预算紧张一致。

波动有多大:为什么每个结论都要过配对检验

Table 8: 每格 run-to-run 精度标准差(分)
Table 8:Run-to-run variability: standard deviation of per-run accuracy (points) across each cell's independent sampled runs. 波动量级:MATH500 在 1 分内,GPQA-D 与 LiveCodeBench 1–3 分,竞赛数学 2–5 分(AIME 只有 30 题)。这解释了论文的纪律:所有差距都由按题聚类的配对 bootstrap + 符号检验裁决,而不是看格子里的名义差——例如 VaSE 在 32B AIME 的 +1.7 领先,对照 ±5 分的波动只是噪声。MATH500 每格只有 2 次采样,其标准差是两样本估计。

硬件与口径:精度生成跑在混合 H200 集群;§6 与附录 G 的全部效率测量单卡 H200、单作业占满节点。所有格子以最终 boxed 答案在 32k 上限判分(LiveCodeBench 按真实测试执行),没有任何半途格进入表格。

08 · Commentary

点评:亮点、边界与对领域的启示

值得学习的地方

边界与保留意见

与并行工作的关系

同期独立工作拼出了同一幅图:Prefix Sliding(保留 prompt + 近期窗,即本文 §5.1 里"距最佳基线不到 2 分"的 recency+prompt 行)从训练侧到达类似策略;Garcia (2026) 在长上下文 QA 的全局容量限制下发现"守住 prompt 边界后,打分是二阶的";Wang (2026) 从理论上证明无冗余时随机 cache 必输 pointer-chasing——而本文的经验发现(推理轨迹双层冗余)正是绕开该下界的现实条件。三条线合起来:在冗余丰富的语料上,保护结构 ≫ 排序质量

对后续研究的启示

总评:这是一篇"用最简单的方法推翻一整个范式前提"的论文。它的价值不在 Random Attention 本身有多精巧(它故意不精巧),而在它把 KV 驱逐的问题定义从"怎么排序"改写为"保护什么 + 什么根本不用保护"——并用三个控制实验把这个改写钉死。读它最大的收获是一种研究品味:先找到你所在领域的 null hypothesis,再谈改进。
Glossary

术语速查

阅读中遇到缩写,可随时回到这里;正文里的缩写也可悬停查看释义。

阅读术语表(正文中带虚线下划线的缩写悬停可见)
术语全称/含义一句话解释
KV cacheKey-Value Cache注意力里缓存的历史键值对;解码时随生成长度线性增长,是本文要压的显存瓶颈
驱逐 / evictionKV cache evictioncache 超预算时永久丢弃键值对;内存有界但不可恢复,区别于只选不丢的稀疏注意力
K / r预算 / 缓冲每头持久保留的 KV 对数 K;缓冲 r 是最近 r 个位置,永不参与打分
prefill / prompt / ℓp生成开始前注入的全部输入(系统提示+模板+问题);Random Attention 将其整体钉死
working state工作状态推理轨迹中不断书写/重写的中间状态;靠文本复述与跨头复制两层冗余自我保护
attention sink注意力沉没序列开头的少数位置会持续获得高注意力;StreamingLLM 等默认只保它们
top-K keep-set保留集合 St每轮驱逐后每头存活的 K 个位置;驱逐逐层、逐 KV 头独立决策
KV 头 / GQAGrouped-Query Attention多个查询头共享一组 KV 头;同组查询共享该 KV 头的 keep-set
planted-fact probe植入事实探针往真实轨迹植入合成事实并控制哪些头保住它的实验;度量跨头冗余的价值
Retr. / RRetrieval / graded Recall复现率(贪心解码复现该值)与分级召回(式 4;1=与从未驱逐等价,0=一文不值)
passcode 实验宣布一次密码、57 轮压缩后才提问;检验"只说一次的事实"对各策略的存活
slot coverage / prompt survivalkeep-log 指标至少一个头保留的候选比例 / prompt 位置仍被持有的比例;§5 归因的量化基础
shared draw共享抽取对照所有头共用同一随机 keep-set 的消融;删掉跨头多样性,在真实 MATH500 上只掉 0.3 分
隐式年龄偏好implicit age bias存活 n 轮的概率 ≈0.94n:随机驱逐天然是软近期窗+逐头不同的长尾
先占 / preemptionvLLM preemptionKV 池超订时 vLLM 静默驱逐请求;压缩状态无法在先占后存活,故压缩运行需并发上限
同步点 / barriersynchronisation pointbatched step 之间执行压缩的时刻;压谁,整批就一起等谁——打分成本在此被放大
vLLM / PagedAttention分页式 LLM 服务运行时;块表管理 KV,使内容依赖打分需额外遍历分页状态
FlashAttention-2融合注意力内核;不物化注意力权重,故"读权重打分"的选择器必须重算或改内核
clustered bootstrap / sign test按题聚类自助法 / 符号检验本文的双重显著性关卡:按题聚类的配对 percentile bootstrap 95% CI + 精确符号检验