Skip to content

Elastic Cache:面向视觉指令跟随模型的弹性 KV 缓存高效推理 ​

论文:Efficient Inference of Vision Instruction-Following Models with Elastic Cache

作者:Zuyan Liu, Benlin Liu, Jiahui Wang, Yuhao Dong, Guangyi Chen, Yongming Rao, Ranjay Krishna, Jiwen Lu

机构:Tsinghua University、University of Washington、Carnegie Mellon University、MBZUAI、Tencent、Allen Institute for AI

发布时间:2024年7月(ECCV 2024)

🔗 arXiv | 代码

分类标签:KV Cache 压缩 高效推理 Cache Merging 视觉指令跟随 Training-Free

一句话总结 ​

提出 Elastic Cache——对视觉指令跟随模型的推理过程使用两阶段差异化策略:指令编码阶段用注意力得分驱动的 importance-driven cache merging(以重要 KV 向量为锚点,将周围不重要向量合并而非丢弃),输出生成阶段用固定截断点淘汰策略平衡初始指导与新生成内容。该方法完全 training-free、即插即用,在 LLaVA-1.5/Qwen-VL 上以 0.2 的 KV Cache 预算实现 78% 实际加速,同时在 PPL 和 ROUGE 上全面超越 H2O 和 StreamingLLM。

一、问题与动机 ​

1.1 视觉指令跟随模型的推理瓶颈 ​

多模态指令跟随模型(LLaVA、Qwen-VL 等)在推理时面临 KV Cache 的显著内存压力。随着对话轮次增长,KV Cache 线性膨胀,有时甚至超过模型权重本身的显存占用,严重限制了 batch size 和推理吞吐量。

一个关键但常被忽略的事实:指令编码阶段占据了绝大部分 FLOPs(~66%),但实际延迟占比极低(~2%);真正的延迟瓶颈在输出生成阶段——每步解码都需要对完整 KV Cache 做注意力计算,KV Cache 的大小直接决定了生成速度。

1.2 现有方法的两大短板 ​

方法核心思路短板
H2O累积注意力频率,逐出最不常用的 KV 向量仅在序列超过缓存容量时才加速,无法任意压缩;新生成 token 在频率评分中天然处于劣势,导致生成能力退化
StreamingLLM保留最初 + 最近的 token同样依赖缓存容量阈值;固定保留最近 token 可能丢弃关键视觉信息
Gist Tokens学习压缩 prompt token需要额外训练,且缓存更新策略引入额外参数计算

共同问题:

  1. 加速比受限于缓存容量——只有当序列超过预设缓存大小时才能压缩,无法对任意长度序列实现提速
  2. 对多模态指令跟随能力的保持不足——统一策略在编码和生成阶段不加区分地剪枝,导致视觉信息丢失和生成质量下降

二、核心方法 ​

Elastic Cache 的核心思想是 "One Sequence, Two Policies"——对指令编码阶段和输出生成阶段使用不同的缓存管理策略。

2.1 指令编码阶段:Importance-Driven Cache Merging ​

目标:在指令编码完成后,立即将 KV Cache 从 T 个向量压缩到 NI=γ×T 个,γ 是预设保留比例。

Step 1:计算重要性分数 ​

对第 i 层的注意力矩阵,定义第 n 个 token 的重要性为其在因果注意力矩阵中被关注的总程度(列求和),然后在同层所有头上取平均:

Ini=1K∑j∑mAm,ni,j

其中 Am,ni,j 是第 i 层第 j 头中第 m 个 token 对第 n 个 token 的注意力权重,K 是头数。

用大白话说:如果一个 token 被后续很多 token 都高度关注,说明它编码了重要的上下文信息,应该被保留。

关键设计:重要性分数是逐层独立计算的(layer-wise),不同层可能保留不同位置的 token。但同一层内所有头共享锚点位置(anchor point positions),虽然各头的实际 KV 值不同。

Step 2:桶划分与合并 ​

选出重要性最高的 NI 个 token 作为锚点,按位置升序排列:{tk∣k=1,2,…,NI}。以锚点为中心,将整个序列划分为 NI 个桶:

Bk={{0,…,⌊t1+t22⌋},k=1{⌊tk−1+tk2⌋+1,…,⌊tk+tk+12⌋},1<k<NI{⌊tNI−1+tNI2⌋,…,T},k=NI

用大白话说:每个锚点"管辖"其与相邻锚点中间位置之间的所有 token,形成一个桶。

Step 3:桶内平均合并 ​

对每个桶内的所有 KV 向量取平均,作为压缩后该桶的代表向量:

KVk=1|Bk|∑t∈Bkkvt

每个注意力头有各自独立的 KVk(只是锚点位置共享)。

Cache Merging vs Cache Eviction 的优势:传统 eviction 直接丢弃不重要的 KV 向量,导致上下文信息不可逆丢失。而 merging 将不重要向量的信息聚合到最近的锚点上,更好地保留了上下文语义。

2.2 输出生成阶段:Fixed-Point Elimination ​

问题:H2O 在生成阶段延续编码阶段的频率策略,但新生成的 token 缺乏累积注意力的优势,容易被不公平地淘汰,导致生成质量急剧下降。

核心假设:在输出生成中,初始指令引导(编码阶段保留的 KV)和最近生成的内容最重要,而中间生成的较早 token 重要性较低。

策略:定义一个固定截断位置 Ntl(实验中设为编码后 KV Cache 长度 NI 附近),当新生成 token 导致 Cache 超出预算时,移除 Ntl 位置处的 token:

{KVk∣k=1,…,Ntl−1,Ntl+1,…,NC+1}

用大白话说:类似一个队列,保护队首(指令上下文)和队尾(最近生成),从中间固定位置淘汰。实验发现截断点在指令 KV 和生成 KV 交界处附近、保留最近 25 个 cache 位置时效果最佳。

2.3 方法特性 ​

特性说明
Training-Free无需任何额外训练或微调
Plug-and-Play可应用于任意多模态指令跟随模型
任意加速比通过调整保留比例 γ 控制压缩程度
忽略级开销缓存更新策略仅涉及简单的索引和平均操作

三、实验结果 ​

3.1 主实验:视觉指令跟随生成质量 ​

在 LLaVA-Description(100 条详细描述指令)和 MM-Vet 数据集上,使用 PPL(越低越好)和 ROUGE-L F1(越高越好)评估。

LLaVA-1.5 7B,KV-Cache Budget = 0.5 时:

方法LLaVA-Description PPL↓ROUGE-L F1↑
Local (StreamingLLM)32.32+较低
H2O~8.3~0.41
Elastic Cache~4.0~0.50
Full Cache3.6baseline

Elastic Cache 在 PPL 上超过 H2O 4.34,ROUGE-L 超 0.089;与 Local 相比 PPL 改进 28.72,ROUGE 改进 0.165。

在三个模型(LLaVA-1.5 13B/7B、Qwen-VL 7B)和两个数据集上,Elastic Cache 一致优于所有基线。

3.2 GPT-4V 评估 ​

对 200 条生成结果,与 Full Cache 基线做 win-rate 对比(由 GPT-4V 判定生成质量):

方法Budget=0.1Budget=0.2Budget=0.3
Elastic Cache47.54%46.63%37.56%
H2O38.55%35.26%30.26%
Local46.37%35.29%10.10%

Local 在低压缩率时有竞争力,但高压缩率(Budget=0.3)时崩溃至 10.10%。Elastic Cache 在所有预算下保持最高 win-rate。

3.3 推理速度 ​

在 LLaVA-1.5/13B 上,KV-Cache Budget = 0.2:

Batch Size模型Token 长度Elastic Cache 延迟Full Cache 延迟吞吐量提升
813B1024+51220.2s30.5s+52.6%
1613B624+25611.8s17.9s+51.7%
167B1024+51217.2s30.6s+77.9%
487B624+25613.6sOOMN/A

最高实现 78% 实际加速,并且在 Full Cache OOM 的情况下仍能正常运行。

3.4 消融实验 ​

在 LLaVA-1.5/13B、Budget = 0.5 上,以 PPL 为指标:

淘汰位置策略:

策略PPL↓
Most Recent3.93
Frequency (H2O 式)3.75
Fixed-point3.60

合并策略:

策略PPL↓
Clustering (10 聚类中心)3.61
Cache Eviction (直接丢弃)3.68
Cache Merging (均值合并)3.60

注意力统计粒度:

粒度PPL↓
Shared (所有层头共享)3.73
Head-wise3.75
Layer-wise3.60

重要性度量:

度量PPL↓
Moving Average8.43
Mean8.70
Sum3.60

关键结论:

  • 简单的 sum 远优于 moving average 和 mean(8.43/8.70 vs 3.60)
  • Layer-wise 优于 shared 和 head-wise,说明不同层关注的 token 确实不同
  • Cache merging 优于 eviction(3.60 vs 3.68),验证了保留上下文信息的价值
  • 固定截断点优于频率策略和最近优先,说明生成阶段需要不同于编码阶段的策略

3.5 定性分析 ​

在 Budget = 0.5 时的图像描述任务:

  • Local (StreamingLLM):产生重复循环文本("a total of 10 doughnuts on a table, showcasing a total of 10 doughnuts on a table...")
  • H2O:输出极短("The image shows a park scene with a doughnut on a table."),丢失大量细节
  • Elastic Cache:生成详细且准确的描述("a large pile of assorted donuts, including glazed and chocolate donuts, arranged in a visually appealing display")

在 Budget = 0.2 的极端条件下,Local 输出退化为乱码,H2O 仅输出一句话,而 Elastic Cache 仍能正确识别图像主体并给出合理描述。

四、局限性与未来方向 ​

4.1 依赖注意力分数的局限 ​

重要性度量完全基于注意力分数的累积统计。然而注意力分数高的 token 不一定对下游生成最有价值——注意力分数反映的是"被关注的程度",而非"对生成质量的因果贡献"。

4.2 仅验证早期 LVLM ​

实验仅在 LLaVA-1.5 和 Qwen-VL(均为较早的 7B/13B 级别模型)上验证。对于更大规模或更新架构(如 GQA、MLA 等注意力变体)的模型,效果和超参数泛化性未知。

4.3 桶内均值合并的信息损失 ​

虽然 merging 优于 eviction,但均值操作仍然是一种信息有损压缩。特别是当桶内 token 语义差异较大时,均值向量可能无法有效代表原始信息。加权平均或更精细的聚合方式可能进一步改善。

4.4 固定截断点的灵活性 ​

生成阶段使用固定截断点(Ntl 约等于 NI),这在不同任务和指令长度下可能不是最优选择。自适应的截断策略可能带来更好的性能。

五、个人思考 ​

5.1 "合并优于丢弃"的设计哲学 ​

Elastic Cache 最核心的洞见是用 merging 代替 eviction。这一思路在后续 KV Cache 压缩工作中被广泛采纳——与其二元地决定"保留或丢弃",不如将信息聚合保留。这类似于 token pruning 领域从 hard pruning 到 token merging(如 ToMe)的演进。

5.2 两阶段差异化策略的合理性 ​

论文最深刻的观察之一是:指令编码和输出生成需要不同的缓存管理策略。这是因为:

  • 编码阶段:所有 token 的注意力统计已经完整可用,适合全局重要性排序
  • 生成阶段:新 token 逐个产生,累积注意力统计对新 token 有天然偏见

这一思想对后续 VLM 高效推理工作有启发意义。

5.3 与项目内其他工作的联系 ​

方面Elastic CacheVLA-CacheVLA-Pruner
应用场景VLM 对话生成VLA 机器人控制VLA 机器人控制
压缩方式KV 向量合并跨帧 Token 缓存双层 Token 剪枝
重要性度量注意力列求和注意力过滤语义级 + 动作级时序平滑
生成阶段策略固定点淘汰——

Elastic Cache 关注的是 VLM 对话/描述生成场景的 KV Cache 压缩,而 VLA-Cache 和 VLA-Pruner 关注机器人动作预测场景的视觉 token 压缩。核心思想(识别重要 token 并压缩冗余)相通,但具体设计因场景差异而不同。

5.4 与 OPERA 中 Attention Sink 观察的关联 ​

OPERA 发现幻觉与注意力柱状聚合模式相关——某些 summary token 被后续所有 token 过度依赖。有趣的是,Elastic Cache 的重要性度量(注意力列求和)恰好会将这些 summary token 识别为最重要的锚点并优先保留。这意味着 Elastic Cache 的策略天然倾向于保留 OPERA 所发现的关键 token,从而在压缩 KV Cache 的同时降低幻觉风险——这两个看似不同的问题可能存在统一的注意力模式解释。

参考 ​

  • H2O(Zhang et al., 2023):Heavy-Hitter Oracle,基于注意力频率的 KV Cache 逐出策略——Elastic Cache 的主要基线之一,Elastic Cache 证明 merging 优于 eviction
  • StreamingLLM(Xiao et al., 2023):Attention Sink + 滑动窗口实现无限长上下文——Elastic Cache 的 Local 基线,其固定窗口策略在多模态场景下表现不佳
  • Scissorhands(Liu et al., 2023):利用重要性持续性假设做 KV Cache 压缩——与 Elastic Cache 共享"注意力统计稳定性"的观察
  • FastGen(Ge et al., 2023):自适应 KV Cache 压缩——Elastic Cache 的 GPT-4V 评估 prompt 参考自此工作
  • OPERA(Huang et al., 2024):注意力柱状模式与幻觉的关联——Elastic Cache 的重要性度量天然保留 OPERA 发现的关键 summary token