Paper — Sep 5, 2026

论文速读:Random Attention 为什么随机淘汰 KV Cache 反而够用

Paper 5 min read ·

2026 年 9 月 3 日提交到 arXiv cs.CL 的 Random Attention: Rethinking KV Cache Eviction for Efficient Reasoning 是今天很值得放进论文速读的推理效率论文。它出现在 arXiv cs.CL recent,也被 Hugging Face Daily Papers 和 X 上的研究者讨论。论文摘要的结论非常反直觉:在长推理任务里,很多复杂 KV cache evictor 试图给缓存 token 打重要性分数,但选择信号贡献可能很小;只要保护 prompt,在每个 attention head 内均匀随机淘汰,效果就能接近最强 prior evictor,同时在 vLLM 部署中获得 32-43% 更高吞吐。

这类论文的价值不在“随机就是最优”的口号,而在它挑战了一个工程直觉:我们总以为缓存淘汰一定要更聪明,结果瓶颈可能在打分器自己。

KV cache 为什么会卡住长推理

自回归 LLM 每生成一个 token,都会保存历史 token 的 key/value,以便后续 token 注意到过去信息。这就是 KV cache。没有缓存,生成会重复计算历史;有缓存,生成速度大幅提升。但长上下文和长 chain-of-thought 会让 KV cache 占用显存快速增长。

长推理尤其麻烦。模型为了解题会生成大量中间步骤,推理 trace 越长,缓存越大。服务端为了多用户吞吐,必须控制显存。最直接的方法是淘汰一部分缓存,只保留“重要”的 token。

过去很多方法都围绕重要性打分:看注意力权重、看最近使用、看特殊 token、看聚类代表性。直觉上这很合理,像操作系统页面置换。但 LLM 长推理不一定符合传统缓存直觉。

Random Attention 的核心观察

论文摘要给出两个关键解释。

第一,prompt 是脆弱部分。题目、约束、输入事实、工具结果通常都在 prompt 或前缀里。如果这些信息被淘汰,模型可能失去任务定义。很多 evictor 的差距,可能主要来自它们是否意外保住了 prompt。

第二,推理 trace 有冗余。模型在思考时会反复重述关键状态,比如“我们需要证明 X”“已经知道 A 和 B”“下一步计算 C”。这意味着后续 token 不一定只依赖某一个精确位置。再加上多头注意力中不同 head 会保留不同副本,随机抽样也可能留下足够信息。

因此,Random Attention 的策略非常简单:始终保留 prompt;对后续推理缓存,在每个 attention head 内均匀随机淘汰。它不计算重要性分数,也不排序。

为什么这有工程意义

很多高明的 evictor 在论文图表里有效,但上线时会被额外开销吃掉收益。你需要收集统计、计算分数、维护数据结构、做排序或选择,还要适配推理引擎。对于高并发服务,这些操作不是免费的。

Random Attention 的吸引力在于它把策略成本压到很低。随机选择可以在内核或调度层更容易实现,也减少了控制逻辑复杂度。如果质量接近强基线,吞吐提升就很现实。

这类结果对 vLLM、SGLang、TensorRT-LLM、llama.cpp server 这类推理系统都有启发:不要只优化保留哪些 token,也要计算“决定保留哪些 token”本身的成本。

一个简化伪代码

下面是思路级伪代码,不是完整高性能实现:

type CacheBlock = {
  tokenIndex: number;
  isPrompt: boolean;
  head: number;
};

export function randomAttentionEvict(blocks: CacheBlock[], keepRatio: number) {
  const prompt = blocks.filter((block) => block.isPrompt);
  const generated = blocks.filter((block) => !block.isPrompt);
  const byHead = new Map<number, CacheBlock[]>();

  for (const block of generated) {
    const list = byHead.get(block.head) ?? [];
    list.push(block);
    byHead.set(block.head, list);
  }

  const kept: CacheBlock[] = [...prompt];

  for (const list of byHead.values()) {
    const shuffled = [...list].sort(() => Math.random() - 0.5);
    const budget = Math.ceil(list.length * keepRatio);
    kept.push(...shuffled.slice(0, budget));
  }

  return kept;
}

真实推理引擎不会用上面这种随机排序写法,也不会用对象数组管理缓存。但伪代码表达了重点:prompt 保护是硬约束,后续 trace 按 head 随机保留。

什么时候可能失效

随机淘汰不是免费午餐。第一类风险是事实密集任务。如果输入里有很多一次性事实,而模型后续没有重述,随机淘汰可能丢掉关键证据。

第二类风险是代码和表格。代码行号、变量名、表格单元格关系通常位置敏感,冗余不如自然语言推理 trace 高。简单随机可能破坏精确引用。

第三类风险是工具调用 agent。Agent 的轨迹里有工具返回、错误日志、文件 diff 和权限状态。这些信息不一定会被模型自然重述,不能简单假设 trace 自我保护。

第四类风险是短推理。Random Attention 针对的是长推理缓存瓶颈。如果上下文本来不长,淘汰策略带来的收益有限,额外机制反而增加复杂度。

如何落地评测

上线前应该用自己的任务做四组对比:

baseline: 不压缩 KV cache
strong evictor: 当前生产或论文强基线
random attention: 保护 prompt 后随机淘汰
ablation: 不保护 prompt 的随机淘汰

指标不要只看准确率。还要看吞吐、p95 延迟、显存峰值、重试率、输出长度变化和失败样例类型。尤其要比较 ablation,如果不保护 prompt 后质量大幅下降,说明你的任务确实依赖前缀事实,prompt pinning 是必要条件。

还要按任务分桶:数学推理、代码生成、日志分析、RAG 问答、工具调用、多轮对话。Random Attention 很可能在不同桶里表现差异明显。平均分好看不代表适合所有生产流量。

对长推理模型的启发

这篇论文也提醒我们,长推理 trace 并不是纯粹浪费。它虽然消耗 token 和缓存,但也在不断刷新任务状态。模型反复写“现在我们知道什么”,可能让后续推理更鲁棒。过去我们只把这种重复看成冗余成本,Random Attention 则说明冗余也可能是容错机制。

这会影响 prompt 设计。对于需要缓存压缩的长任务,要求模型定期总结状态、显式保留约束,可能比让它写极简推理更适合服务端压缩。换句话说,推理文本的形状会影响 KV cache 策略。

和现有缓存压缩工作的关系

Random Attention 不意味着所有精细 evictor 都没价值。它更像一个强基线审计:任何复杂方法都应该证明自己比“保护 prompt 后随机保留”明显更好,并且扣除计算开销后仍然更好。

这对论文和工程都公平。复杂方法可以在低冗余任务、精确检索任务或多模态上下文里胜出;但如果只在高冗余长推理任务上略微超过随机,却引入大量开销,它的生产价值就要重新计算。

结论

Random Attention 的最大贡献,是把 KV cache 淘汰问题从“怎么精准预测每个 token 的未来重要性”拉回到“哪些信息真的脆弱,哪些信息天然冗余”。如果 prompt 是脆弱核心,而推理 trace 有足够冗余,那么随机策略就不再荒唐。

对推理系统开发者来说,下一步很明确:把保护 prompt 的随机淘汰加入基线,用真实流量做分桶 A/B。如果它在你的长推理场景里接近强 evictor,同时吞吐更高,那就没有必要为复杂打分器付账。工程优化有时不是更聪明,而是找到哪里不需要聪明。

Frequently asked questions

Random Attention 是新的注意力架构吗?
不是。它更像一种 KV cache 淘汰策略:保留 prompt,对每个 attention head 内的后续缓存做均匀随机淘汰,避免复杂重要性打分。
随机淘汰为什么不会严重伤害长推理?
论文解释是推理轨迹有两层冗余:文本会反复重述关键状态,不同 attention head 也会保留多份相关信息。只要 prompt 不丢,随机保留通常够用。
这是否适合所有任务?
不适合。事实密集、引用精确、代码位置敏感和低冗余上下文任务仍需更谨慎。Random Attention 更适合长链推理中 prompt 固定、trace 冗余较高的场景。
工程上最大的好处是什么?
最大好处是省掉 token 重要性打分和排序开销。论文摘要报告在 vLLM 部署里相比强 evictor 有 32-43% 更高吞吐。
上线前应该怎么验证?
先在自己的任务上做 A/B:比较准确率、重试率、吞吐、显存峰值和失败样例。不要只看通用推理集,因为上下文冗余程度会显著影响结果。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.