Files
myWiki/concepts/rolling-kv-cache.md

2.4 KiB
Raw Blame History

title, created, updated, type, tags, sources
title created updated type tags sources
滚动 KV 缓存 (Rolling KV Cache) 2026-05-14 2026-05-14 concept
llm
inference
kv-cache
streaming
attention
https://arxiv.org/abs/2309.17453

滚动 KV 缓存 (Rolling KV Cache)

定义

滚动 KV 缓存是 streaming-llm 框架的核心机制,将 KV 缓存分为两部分:

  1. Attention Sinks4 个初始 Token 的 KV稳定 SoftMax 注意力分布
  2. Rolling KV Cache(最近 L 个 Token 的 KV负责语义建模

两部分共同构成一个固定大小($L+4$)的 KV 缓存,随着新 Token 的生成不断滚动更新。

数据结构

生成 Token 7 时:
[0][1][2][3] | [ ][ ][ ][4][5][6][7]
 ↑ Attention   ↑ Rolling KV Cache
   Sinks          (最近 L 个)

生成 Token 8 时:
[0][1][2][3] | [ ][ ][ ][ ][5][6][7][8]
 ↑ 不变          ↑ Token 4 被逐出Token 8 加入

关键设计决策

位置编码在 Cache 内部分配

StreamingLLM 保留原始文本中的位置索引,而是在 cache 内部分配连续位置:

  • Cache 中 Token = [0, 1, 2, 3, 6, 7, 8],解码第 9 个 Token
  • 分配的位置 = [0, 1, 2, 3, 4, 5, 6, 7]
  • 而非原始位置 [0, 1, 2, 3, 6, 7, 8, 9]

这是 StreamingLLM 性能的关键——跳跃的位置索引会破坏相对位置编码的一致性。

RoPE 兼容性

  • 在应用旋转变换之前缓存 Key
  • 每个解码步对滚动缓存中的 Key 重新应用位置变换
  • 确保相对位置信息正确反映 cache 内的邻近关系

ALiBi 兼容性

  • 更直接:使用连续的线性偏置替代跳跃偏置
  • 无需额外的重新计算

复杂度分析

操作 复杂度
内存 O(L + S) 固定大小S=4 为 Sink Token 数
每 Token 解码时间 O((L+S) · d),恒定
累积时间T Token O(T · (L+S) · d)

其中 L 为滑动窗口大小S 为保留的初始 Token 数d 为模型维度。

与 Sliding Window Re-computation 的对比

Re-computation 对每个新 Token 重建 L 个 Token 的 KVO(TL²) 累积StreamingLLM 仅需 O(TL) → 最高 22.2× 加速。

相关概念