SeKV:把 KV 缓存做成"可变分辨率"地图,长上下文推理终于能两条腿走路
你有没有这种感觉:同一个 128K 的长 prompt,给同一个模型跑两次,一次答得头头是道,一次直接 hallucination。问题出在哪?不是模型能力不够,是 KV 缓存被压缩得太狠,原本应该被精确检索的那一句话,已经在 prefill 阶段被当作"不重要 token"扔掉了。
这篇来自 UBC 和 Microsoft Research 的 SeKV(论文 arXiv ID 2606.31145),就是冲这个问题来的。
核心摘要
SeKV 把 KV 缓存从"扁平 token 列表"重构成一张分层语义地图:以 token 熵(surprisal)作为零成本切分信号,把上下文切成一个个语义 span,每个 span 同时保留两份表示——GPU 上一个轻量 summary 向量用于快速路由,CPU 上一份低秩 SVD 基底用于按需还原 token 级细节。一个训练出来的 zoom-in 机制在每一步解码时决定把哪些 span 临时"放大"到全分辨率。整个 base LLM 冻住不动,额外可训练参数不到 0.05%。
在 4 个长上下文基准、5 个 backbone 上,SeKV 在 10% KV 预算下比最强的语义压缩基线 SentenceKV 平均高 5.9 个点,比 FullKV 在 128K 时少用 53.3% 的 GPU 显存,同时延迟还更快。一句话评价:它不是另一种 token 淘汰方案,而是把 KV 缓存从"垃圾桶"升级成了"可变焦镜头"。
论文信息
- 标题:SeKV: Resolution-Adaptive KV Cache with Hierarchical Semantic Memory for Long-Context LLM Inference
- 作者:Amirhossein Abaskohi、Giuseppe Carenini、Peter West(UBC);Yuhang He(Microsoft Research)
- 链接:https://arxiv.org/abs/2606.31145
- 提交日期:2026 年 6 月 30 日
- 代码:https://github.com/AmirAbaskohi/SeKV
问题:现有压缩方法都在 prefill 阶段"做死决定"
现在的 KV 缓存压缩基本分两派:
第一派:token 淘汰。 典型代表 StreamingLLM、H2O、SnapKV、PyramidKV。它们在 prefill 阶段根据 attention 分数挑出"重要 token",把剩下的永久丢掉。问题是:哪些 token 重要,取决于 query 啊朋友。prefill 阶段 query 还没进来,模型凭什么知道后面哪句话会被问到?结果就是图 1(a) 那种尴尬——关键事实埋在文档中段,prefill 阶段被认为"不重要"被 evict 掉,最后 attention 全跑到文档边界去了,模型 hallucination 给出 23% 这种离谱答案。

图 1:(a) 现有 token 淘汰方法把关键 token 永久丢弃,attention 在文档边界鼓包而答案区接近为零,导致幻觉;(b) SeKV 把上下文组织成语义 span,在 GPU/CPU 内存层级上保留所有信息,训练出的 zoom-in 机制动态把最相关的 span 展开到 token 级分辨率。
第二派:语义分组。 典型代表 ChunkKV、SemantiCache、SentenceKV。它们把上下文切成块或句子再压缩,比纯 token 淘汰好一些,但压缩策略还是在 prefill 阶段定死的,生成时只能从已经决定的"保留池"里挑,挑不到的就再也找不回来了。
SeKV 的判断很直接:长上下文 KV 缓存需要的不是更狠的压缩,而是一种可变焦的内存组织——平时存低分辨率的"地图",query 真问到这里时再把局部"放大"到全分辨率。
方法:熵切 span + 双分辨率 + 训练式 zoom-in
SeKV 整个方法分三块:怎么切 span、每个 span 怎么存、什么时候放大。
3.1 熵引导的 span 切分
切分信号用的是 prefill 阶段 LLM 自己算出来的 token surprisal(也就是 \(-\log p_\theta(x_t \mid x_{<t})\))——这个东西不需要额外模型,prefill 一次前向就有了,零成本。
直觉是:surprisal 高的位置往往是话题切换、实体引入、逻辑转折的地方,正好是 span 边界。论文把 surprisal 大于 \(\mu + \sigma\alpha\) 的位置作为锚点(anchor),锚点之间的 token 就是一个语义 span。\(\alpha\) 控制切分粒度。
相比 ChunkKV 的固定大小切块、SemantiCache 的聚类切分,这种"内容自适应"切法的优势是:信息密集的地方切出更短 span、更多锚点,保留更细粒度;平淡的地方合并成长 span,总锚点数自然变少。这其实也是 surprisal 用作分块信号最早被研究时的核心发现。
3.2 双分辨率表示 + GPU/CPU 内存分层
这是 SeKV 最关键的设计。每个 span 同时存两份:
| 层级 | 存什么 | 用途 | 大小 |
|---|---|---|---|
| GPU | summary 向量 \(\bar{k}_{S}\) | 粗粒度路由("这个 span 相关吗") | 极小,每头每层一个 \(d_r\) 维向量 |
| GPU | 锚点 token 的 full KV | 始终在线的"高保真种子" | 跟锚点数量成正比 |
| CPU | 低秩 SVD 基底 \(U, \Sigma, V^T\) | 选中时还原成 token 级 KV | 跟保留秩 \(r\) 成正比,$r \ll |
Summary 向量怎么算? 不是简单平均,而是 surprisal 加权投影到 head-specific 的路由空间:
其中 \(W^{(l,h)}\) 是 per-head per-layer 的可学习投影——为什么必须每头每层一个?因为不同头不同层的 attention 模式天差地别(这本来就是多头注意力的设计初衷),用同一个路由空间肯定表达力不够。
路由打分用 sigmoid 不是 softmax。 这里有个细节我很喜欢:因为"哪些 span 重要"是独立多标签问题,不是"在 K 个里面挑一个"的竞争问题,所以用 sigmoid gate + 单调长度先验,避免长 span 被系统性地低估。
低秩 SVD 基底怎么用? 对每个 span 的 key 矩阵做截断 SVD 得到 \(K_S \approx U \Sigma V^T\),但不是固定截到 rank \(r\),而是用一个轻量预测器给每个奇异分量一个软门控 \(g_i\):
预测器只用奇异谱 \(\Sigma\) 和 span summary 算开销,得到每分量保留概率。信息量大的 span 自然保留更多分量,平淡 span 自动瘦身。Value 矩阵做同样处理。
这里的关键设计是:SVD 本身是 prefill 阶段用随机化截断 SVD 算一次,后续不解它——梯度只流过 soft gate,避免了 SVD 反向传播在奇异值退化附近的数值不稳定(这点论文也明确说了)。
3.3 训练式 zoom-in 机制
这是最灵魂的部分。每一步解码时,SeKV 对每个 span 算一个"展开概率" \(\alpha_S^{(l,h)}\),跟 per-head per-layer 阈值 \(\tau^{(l,h)}\) 比较,超过就展开成 token 级:
为什么必须per-head per-layer?因为 attention head 分工不同:retrieval head 经常需要展开远距离 span,streaming head 几乎从不展开。论文后面 Figure 5 的热图就证实了这点——zoom-in 集中在中后层的少数 head 上,大多数 head 几乎不展开。共用一个全局阈值,要么过度展开要么欠展开。
混合分辨率注意力怎么算? 这一步实现很优雅:所有 span 都参与同一个 softmax,被展开的 span 用还原出的 token-level KV 算精细 attention,没展开的 span 用 summary + 修正项算一个"等效"贡献。没有任何 span 被丢掉——被压缩的只是"目前不重要的那部分",需要时可以再放大。
训练目标有 4 个 loss 加起来:
- 蒸馏 loss:让 SeKV 输出的 attention 分布逼近 FullKV 教师
- Zoom 监督 loss:直接监督路由概率,让它预测教师 attention mass 在哪些 span 上集中(关键是这里监督的是概率而不是决策,所以 threshold 不会自己定义自己的监督信号,训练稳)
- 重建 loss:监督每分量的软门控,让保留的秩能有效降低逼近误差
- 预算 loss:惩罚展开 span 数量和总保留秩,避免模型偷懒全展开
反传用 straight-through estimator(STE)处理二值决策。整 base LLM 完全冻住,可训练部分只有路由投影 + 阈值 + 秩门预测器,在 Llama-3-8B 上总共约 4M 参数,不到模型 0.05%。

图 2:SeKV 总览。输入被切成熵引导的 span。锚点和 summary 留在 GPU 做粗路由,SVD 基底放 CPU。每步解码:Stage 1 路由找出相关 span,异步把它们的 SVD 基底搬到 GPU;Stage 2 还原 token 级 KV 算精细 attention,最后两阶段输出合并。
实验:四个基准、五个模型、四个角度
主实验:4 个基准、5 个 backbone、20/20 全胜
主表(Table 1)用 10% KV 预算跑 4 个基准 × 5 个 backbone = 20 个组合,SeKV 全部拿下最强压缩结果。下表挑出关键部分(Llama-3.1-8B-Instruct + Qwen2.5-14B-Instruct 表现):
| 基准 / 模型 | FullKV | SnapKV | PyramidKV | ChunkKV | SentenceKV | SeKV |
|---|---|---|---|---|---|---|
| LongBench / Llama-3.1-8B | 51.18 | 47.11 | 48.02 | 49.14 | 49.93 | 51.02 |
| LongBench / Qwen2.5-14B | 55.47 | 49.34 | 50.17 | 51.42 | 52.31 | 54.71 |
| RULER / Llama-3.1-8B | 88.35 | 74.31 | 76.23 | 78.41 | 80.37 | 84.17 |
| RULER / Qwen2.5-14B | 90.74 | 77.48 | 79.33 | 81.17 | 83.41 | 87.34 |
| InfiniteBench / Llama-3.1-8B | 28.88 | 22.47 | 23.62 | 24.71 | 26.07 | 27.94 |
| InfiniteBench / Qwen2.5-14B | 36.51 | 28.14 | 29.37 | 30.84 | 32.17 | 34.83 |
| NIAH / Llama-3.1-8B | 91.52 | 73.42 | 75.83 | 79.23 | 82.13 | 87.42 |
| NIAH / Qwen2.5-14B | 95.28 | 76.83 | 78.41 | 81.72 | 84.83 | 91.17 |
几个我看完后觉得"嗯,确实"的点:
- SeKV 与 FullKV 差距很小——在 LongBench 上平均只差 0.80 个点,InfiniteBench 上差 1.23 个点。也就是说用 10% 预算基本拿到了完整缓存的效果。
- 检索型基准上提升最猛——NIAH 上比 SentenceKV 高 +5.68,RULER 上高 +3.63。说明"按需放大"对"找一句话"这种场景最有效。
- 越强的模型越受益——Qwen2.5-14B 比 SentenceKV 的提升幅度(+2.94 到 +3.83)比 Llama-3.2-3B 更大,说明更强模型能更好利用被还原的精细信息。
- 20/20 全部最佳——这个胜率在我印象里很少见。一般论文会有 1-2 个组合是 baseline 更好。
NIAH 热图:SeKV 哪里强

图 3:Llama-3.1-8B 的 Needle-in-a-Haystack 检索热图(KV 缓存大小 128,上下文 8K)。绿色越深表示该 needle 位置/深度下检索成功率越高。SeKV 整体最稳定,StreamingLLM 长 context 几乎全失败。
热图里一眼能看出 StreamingLLM 在 4K+ 长度就崩成一片红黄,因为它只保留 sink + 滑动窗口。SnapKV / PyramidKV 在深 needle 位置有明显的"低带"——这些位置被 attention 选择性忽略了。SeKV 几乎是全绿一片,最分散也最稳定。
效率分析:又快又省
显存扩展性(Figure 4)——这是最打动我的图:

图 4:Qwen2.5-14B 在 batch=1 时不同方法的 GPU 显存随上下文长度的变化。FullKV 从 8K 的 36GB 涨到 128K 的 74.8GB,SeKV 几乎平线,从 31.2GB 涨到 34.9GB。
128K 上下文时,FullKV 已经到 74.8GB(基本上一张 A100/H100 都装不下),SeKV 还是 34.9GB。这就是论文摘要里"53.3% GPU 显存节省"的图。SentenceKV 看着省,但 128K 时也到了 43.6GB,而且准确率比 SeKV 低 6 个点。
延迟/吞吐(Table 3)——在 Qwen2.5-14B、batch=1 下:
| 场景 | FullKV 延迟 | SeKV 延迟 | FullKV 吞吐 | SeKV 吞吐 |
|---|---|---|---|---|
| 4K 输入 / 1K 输出 | 43.60s | 38.05s | 105.92 T/S | 120.11 T/S |
| 8K 输入 / 4K 输出 | 183.42s | 166.95s | 55.93 T/S | 64.21 T/S |
比 FullKV 快、还比 FullKV 准。StreamingLLM 更快(8K/4K 150.86s)但准确率崩。
Many-shot 推理:GSM8K 50-shot
50-shot GSM8K 是个挺有意思的测试——它不是"找一句话",而是看模型能不能在 prompt 里保留50 个推理模板的累积结构。Table 2 显示 SeKV 5 个 backbone 平均比 SentenceKV 高 +2.3 个点,跟 FullKV 平均差距只有 2.4 个点。说明这种"按需展开"不仅对单点检索有效,对长 prompt 的整体结构保持也有效。
消融:每块都不能少
Table 5 在 Qwen2.5-14B 上 10% 预算做消融(NIAH 列):
| 变体 | NIAH | 相对完整 SeKV 损失 |
|---|---|---|
| 完整 SeKV | 91.17 | — |
| w/o 熵切分(用固定块) | 86.42 | -4.75 |
| w/o 锚点 | 87.31 | -3.86 |
| w/o surprisal 加权 summary | 88.14 | -3.03 |
| w/o 训练式 zoom-in | 85.96 | -5.21 |
| w/o SVD 还原 | 83.47 | 下降 7.70 个点 |
| 全局阈值(per-head) | 87.82 | -3.35 |
| 均值池化 summary | 88.43 | -2.74 |
最大损失来自 SVD 还原(-7.70)和 训练式 zoom-in(-5.21)。这个组合非常说明问题:光是 summary 路由、不做按需还原是不够的;反过来,固定阈值一开就掉 3 个多。这些 ablation 串起来看就是 SeKV 整个设计哲学的实证。
预算敏感性:5% 预算下 SeKV 反而拉开差距
| 预算 | SnapKV | ChunkKV | SentenceKV | SeKV |
|---|---|---|---|---|
| 5% | 69.84 | 74.31 | 78.62 | 86.31 |
| 10% | 76.83 | 81.72 | 84.83 | 91.17 |
| 15% | 79.24 | 83.76 | 86.92 | 92.08 |
| 20% | 80.63 | 85.14 | 88.21 | 92.46 |
预算越紧 SeKV 优势越大。5% 预算时比 SentenceKV 高 +7.69,10% 高 +6.34,到 20% 高 +4.25。这非常合理——预算紧时"按需放大"的杠杆最大,预算松时所有方法都接近 FullKV。
Zoom-in 热图:大部分 head 几乎不展开

图 5:SeKV 在 NIAH 任务上各层各 head 的 zoom-in 频率。亮色表示该 head 经常展开 span。可以看到 zoom-in 集中在中后层的少数 head,大多数 head 几乎不展开。
这是 SeKV 内部行为最直观的图。最亮的两条带是层 19-31 的 head 23 和 head 19,这俩是 retrieval head,几乎每步都展开;其他大部分 head 整个推理过程都不怎么展开。这就是为什么 per-head per-layer 阈值比全局阈值好——少数头包揽了大部分"展开"工作。
我的判断
它解决了真问题。 "Token 淘汰"这条路径在长上下文上已经基本走死了。核心矛盾就是 prefill 阶段不可能预知哪些 token 重要。SeKV 的"GPU summary + CPU 低秩 + 按需还原"是绕过这个矛盾的一种思路——不预先决定丢谁,让 query 来了再决定。
它不是堆叠组件。 三个核心组件(熵切分、双分辨率、训练式 zoom-in)每个都对应着一个具体的失败模式:固定切块伤语义边界 → 熵切;token 淘汰丢信息 → CPU 留 SVD;静态压缩不能动态响应 → 训练式 zoom-in。每个组件都有 ablation 支撑。
它能落地。 Base LLM 完全冻住,可训练参数 < 0.05%,训练数据用 RedPajama 普通长文档就行,训一个 backbone 在单卡 A100 80G 上 5-10 小时。这是真的能跑的东西,不是只在 paper 上成立的玩具。
它有什么问题?
第一,依赖 surprisal 的质量。Surprisal 在普通自然语言上稳定,但在代码、表格、碎片化 discourse 上可能切分不准(论文 Limitations 也明说了)。这个我比较担心——长上下文应用里表格、代码、QA 模板是常态。
第二,CPU↔GPU 带宽依赖。SeKV 节省了 GPU 显存但增加了 CPU→GPU 数据搬运,CPU-GPU 带宽差的部署环境(比如某些云上 PCIe 拓扑)可能反而被这个开销拖慢。论文延迟是 A100 80G 上测的,PCIe Gen4 x16 = 32GB/s。换到带宽更紧的设备,数据会变。
第三,SVD 算一次但存的是 basis。Span 越长,左奇异向量 \(U\) 就越长,这部分没压缩。论文说"短 span 全保留"来缓解,但如果是超长文档里出现一个超长 span(比如小说里大段描述),SVD 因子本身的开销并不小。
第四,没跟最新的 retrieval-based 方法正面比。RetroInfer(2025)、DesireKV(2026)这些也是 CPU 离线的方案,SeKV 跟他们怎么比、优势在哪,论文里没看到 head-to-head。
整体来说:这是一篇方法设计扎实、实验完整、性能确实涨了 5+ 个点的 paper。它不是那种"换个 loss 涨 0.5 个点硬吹"的论文。从工程角度看,"可变焦 KV 缓存"这个范式本身值得跟进——尤其是当 budget 紧、需要长上下文、又能接受额外 CPU 资源的时候。
一句话总结
SeKV 把 KV 缓存从"扁平 token 列表"变成"可变焦的语义地图":GPU 存粗粒度 summary,CPU 存低秩备份,训练式 zoom-in 决定展开谁。比 FullKV 省 53% 显存、还更快;比最强 baseline 高 5.9 个点。Base LLM 冻住不动,参数开销 < 0.05%。这是一个真能落地的设计。
关键图表速查
| 图 | 内容 | 看点 |
|---|---|---|
| 图 1 | 现有方法 vs SeKV 注意力分布对比 | 一图讲清楚"为什么需要按需展开" |
| 图 2 | SeKV 整体架构(prefill + 两阶段 decoding) | 理解双分辨率、GPU/CPU 分层、异步 prefetch |
| 图 3 | NIAH 热图(6 个方法) | 验证 SeKV 在长 context + 深 needle 位置最稳 |
| 图 4 | GPU 显存随 context 增长 | SeKV 平线、FullKV 翻倍 |
| 图 5 | Zoom-in 频率热图 | 证明 per-head per-layer 阈值的合理性 |
| 图 6 | 三个模型 × 三个基准的 zoom-in 热图 | 验证这种行为在不同 backbone 一致 |
论文基本信息
- arXiv ID:2606.31145
- 链接:https://arxiv.org/abs/2606.31145
- 机构:University of British Columbia + Microsoft Research
- 作者:Amirhossein Abaskohi、Giuseppe Carenini、Peter West、Yuhang He
- 代码:https://github.com/AmirAbaskohi/SeKV
觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我。