Key-Value (KV)缓存已成为大型语言模型(LLMs)推理加速的关键技术。在自回归LLM解码过程中,KV缓存用于存储过去token的键值对,避免重复计算。然而,随着上下文长度和批次大小的增加,KV缓存呈线性增长,迅速耗尽GPU内存,导致内存瓶颈。从片外内存获取庞大的KV缓存会显著增加推理时间,导致计算单元空闲,增加每个token的延迟。因此,高效的KV缓存至关重要,它需要在内存节省、模型精度和吞吐量之间取得平衡。本文将深入探讨几种最新的硬件高效KV缓存技术,旨在优化内存效率,提升模型精度,并最终加速推理速度

Grouped-Tied & Grouped-Latent Attention (GTA/GLA):精简KV结构

注意力机制是Transformer模型的核心,而传统的Multi-Head Attention (MHA) 结构会在解码过程中为每个头/token缓存独立的Key和Value,造成巨大的内存占用。Grouped-Tied Attention (GTA) 通过将Key和Value投影到一个共享的状态中,显著减少了KV缓存的大小。GTA将一组头的Key和Value绑定在一起,使用同一个状态同时表示Key和Value,相当于将KV缓存大小减半,并相对于Grouped-Query Attention (GQA) 提高了算术强度。具体来说,每个query组重用“绑定的KV”状态的前半部分作为Key,整个状态作为Value,并在它们之间分配旋转RoPE。

Grouped-Latent Attention (GLA) 则更进一步,通过将潜在的token向量拆分为多个“潜在头”,并在设备间分片,实现了头级别的并行性。GLA将token压缩为潜在头(每个维2𝑑ₕ,而MLA为4𝑑ₕ),并将每个潜在头分配给query头的一个子集。这保留了MLA的高算术强度(每组加载一个潜在头),同时实现了头级并行性(每个GPU上没有重复的潜在缓存)。

与MHA相比,GTA和GLA显著降低了KV缓存的内存占用和带宽需求。实验表明,GTA使用的KV内存是其GQA对应物的一半(具有相当的困惑度)。GLA的优化内核在推测解码中(query长度>1)比DeepSeek的FlashMLA快高达2倍,并通过获取更小的每设备缓存,使在线基准测试的吞吐量翻倍。在实验中,GLA将每个GPU的KV流量减半(对于TP≥2),同时匹配了MLA的精度。总体而言,GTA/GLA减少了端到端延迟,提高了GPU利用率(更高的FLOPs/字节),使推理速度提高了高达2倍。例如,在一个拥有8块GPU的服务器上运行大型语言模型,采用GLA后,原本只能支持10个并发请求,现在可以支持20个,显著提升了服务器的吞吐能力。

AQUA-KV:自适应Key-Value量化

量化是一种常用的模型压缩技术,AQUA-KV(Adaptive Key-Value Quantization)通过利用KV缓存中的层间和层内依赖关系来提升压缩率。它训练紧凑的线性预测器(“适配器”),这些预测器可以从相邻层和彼此预测每一层的Key/Value,从而捕获相互信息。然后只对预测残差进行量化(例如,使用高级的无数据矢量量化器)。这种“预测然后量化”的方法将比特集中在缓存中不可预测的部分。AQUA-KV的校准是一次性的(无需微调)且轻量级。

传统的量化方法在极低的精度(<4 bits)下会严重降低模型精度。AQUA-KV的目标是通过利用缓存结构,实现极高的压缩率(每个值2-2.5比特),同时将质量损失降到最低。通过捕捉依赖关系,AQUA-KV提高了KV压缩率:例如,在~2.09比特时达到与naive KVQuant(图1)的2.33比特相似的精度。AQUA-KV的校准效率很高(在单个GPU上对70B模型进行校准只需几个小时),并且与其它技术(剪枝,RoPE处理)兼容,只有边际开销。结果是KV缓存小一个数量级,大大降低了内存占用和潜在带宽,质量与全精度相当。例如,在Llama-3模型上,AQUA-KV实现了接近无损的2-2.5比特量化,在LongBench等基准测试中,其perplexity/accuracy下降小于1%,优于之前的2比特KV量化器(HIGGS,KVQuant等)。

MiniCache:基于深度的KV合并

模型深度是影响模型性能的关键因素, MiniCache 观察到,在中间层/深层中,连续层的KV缓存高度相似,从而提出了一种跨层合并KV状态的方法。每个层对(或组)的KV向量被分解为一个方向和一个幅度。MiniCache通过插值方向向量(保持长度固定)来合并层,并保留一些不同的token未合并以保留信息。这种跨层合并是免训练的,并且与现有的每层压缩(量化/稀疏性)正交。

与以往的层内压缩工作不同,MiniCache 注意到层深度方向存在冗余,通过合并相似层的缓存,减少了存储的总向量数。在基准测试中,具有4比特MiniCache的LLaMA-2-7B在ShareGPT上实现了高达5.02×的压缩和大约5×的吞吐量,同时相对于16比特基线降低了41%的内存。关键的是,性能保持接近无损(对下游分数影响很小)。由于它合并了层,因此它将许多token的每层所需存储减半(或更好)。吞吐量增益来自减少的内存负载。例如,可以将一个原本只能支持5000个token上下文长度的模型,扩展到支持25000个token的上下文长度。

SQuat:子空间正交量化

模型精度是所有优化技术都需要关注的核心指标。SQuat (Subspace-Orthogonal Quantization) 引入了一个来自当前prompt的query向量的任务相关子空间。在KV量化期间,它确保每个Key中的量化误差与此query子空间正交,从而保留对注意力重要的内积。具体来说,SQuat迭代地量化Key元素,同时更新剩余元素,以最大限度地减少对这些内积的影响。不需要微调或额外数据;它基于理论最优框架。

简单的KV量化侧重于Key/Value的数值保真度,但忽略了哪些误差实际上会影响下一个token的预测。通过保留Key在query子空间上的投影,SQuat保留了任务关键信息并防止了误差累积。SQuat的目标是在不降低精度的情况下实现激进的压缩。实践表明,SQuat 将 K/V 量化到非常低的比特位,并且比基线量化器产生的质量损失要小得多。评估报告显示,在相似或更低的比特率下,LongBench得分高于之前的 2 比特 KV 量化方法。

例如,在一个需要高度精确数值计算的任务中(例如金融建模),SQuat 可以确保关键信息不会因为量化而丢失,从而保持模型的预测准确性。

MorphKV:相关性感知 Token 剪枝

Token 剪枝 是一种通过删除不重要的 Token 来减小 KV 缓存大小的技术。MorphKV 维护一个固定大小的KV缓存,该缓存动态地保留最相关的token。它通过与最近token的相关性得分对所有过去的token进行排名,从而平衡长程和局部上下文。在每个解码步骤中,MorphKV根据这些注意力模式告知的相关性驱逐或替换不太相关的KV,然后通过轻量级的迭代更新来细化缓存。这避免了“早期token偏差”,确保仅保留那些真正有助于正在进行的生成的遥远token。

标准的驱逐方案(仅保留最近的token,或启发式地保留固定prompt)要么迅速丢弃重要的早期上下文,要么过度保留无用的token。MorphKV的目标是在限制内存的同时防止精度损失:它通过自适应地选择要缓存的固定数量的token来解决线性KV增长问题,而不是无限地增加缓存或依赖于固定的启发式方法。

通过保留恒定的缓存大小,MorphKV实现了巨大的内存节省,并且没有质量损失(事实上,它通常会提高精度)。在长响应任务中,研究表明,与之前的方法相比,KV内存减少了约52.9%,并且精度绝对提高了18.2%。因为存储的KV更少,所以预填充和解码内存带宽下降,从而实现了更高的吞吐量。因此,MorphKV使相同的硬件能够产生更长的输出,将激进的内存减少与卓越或保持的任务性能相结合。

例如,在一个需要生成长篇故事的应用中,MorphKV 可以智能地选择保留哪些 Token,确保故事的连贯性和逻辑性,同时保持较低的内存占用。

HashEvict:基于 LSH 的驱逐

局部敏感哈希 (LSH) 是一种高效的近似最近邻搜索技术。HashEvict 使用局部敏感哈希 (LSH) 在注意力机制之前驱逐token。它将每个Key和当前的Query投影到二进制哈希码(通过SimHash),并识别Key具有最低估计注意力(与Query的哈希汉明距离最高)的过去token。在每个步骤中,新token的KV替换缓存中相关性最低的token。由于它使用廉价的汉明距离比较而不是完整的点积注意力,因此驱逐决策是“无注意力的”并且对GPU友好。

传统的token剪枝需要计算所有缓存token的完整注意力得分,这很昂贵。HashEvict的挑战是在不显式评估注意力的情况下快速丢弃不相关的token。通过使用LSH,它可以有效地近似token相关性,从而实现激进的缓存缩减,而无需评分的计算开销。实验表明,HashEvict可以将KV缓存缩减30-70%,同时保持高任务性能。这产生了显着的加速:报告的预填充吞吐量是基线的1.5-2倍,解码速度与H2O和Scissorhands等基线相当(或更快)。例如,它可以实现比FastGen快17倍的预填充和快2倍的解码。

在一个需要处理大量并发请求的在线服务中,HashEvict 可以快速地清理掉不重要的 Token,从而释放更多的资源来处理新的请求。

KIVI:免调优的 2 比特量化

模型部署的便捷性是实际应用的关键考量。KIVI 是一种针对KV统计信息进行调整的2比特量化方案。详细的分析表明,Key具有一些大的“异常值”通道,而Value没有,因此KIVI对Key应用每通道量化,对Value应用每token量化。这种非对称策略适当地限制了误差。KIVI是“免调优的”:不需要自定义校准或微调,并且它使用整数友好的操作来实现。

将KV缓存量化到非常低的精度是困难的,因为标准的统一量化会产生严重的误差。KIVI的洞察力在于利用Key与Value的不同分布来在最佳轴上量化每个,从而在没有大量工程的情况下实现极端的2比特压缩。通过 KIVI,流行的模型(LLaMA、Falcon、Mistral)在使用仅约2.6倍更少的峰值内存(包括模型权重)的同时,几乎保持了原始精度。这允许高达4倍更大的批处理大小,从而在实践中带来2.35-3.47倍的吞吐量增益。

在一个资源受限的边缘设备上,KIVI 可以在不损失太多精度的情况下,显著减小模型的体积,使其能够在这些设备上运行。

多维度优化:未来展望

上述各种KV缓存优化技术各有优缺点,例如:

  • 基于量化的方法 (AQUA-KV, SQuat, KIVI):
    • 优点:保留所有token,实现高压缩率,与现有系统兼容。例如,KIVI在实现2.6倍内存减少的同时,保持了GSM8K的准确率。
    • 缺点:在极端压缩下可能降低精度,校准要求复杂。
  • 基于驱逐的方法 (HashEvict, MorphKV):
    • 优点:为保留的token保持全精度,提供基于内容的自适应选择。MorphKV在长响应任务中实现了更高的准确率。
    • 缺点:驱逐token的信息丢失会带来上下文依赖性挑战。当压缩率超过70%时,HashEvict的性能会显着下降。
  • 结构化方法 (GTA/GLA, MiniCache):
    • 优点:架构感知的优化实现了新的压缩维度。MiniCache通过跨层合并实现了吞吐量改进,同时在大多数基准测试中保持了99%的准确率。
    • 缺点:模型特定的实现限制了通用性。GLA需要特定的硬件优化,可能无法很好地转移到不同的GPU架构或模型大小。

展望未来,理想的解决方案需要结合多种策略,例如将量化用于稳定token(AQUA-KV预测器),将驱逐用于不相关的token(HashEvict LSH),并为冗余的中间层实施跨层合并(MiniCache SLERP),并使用硬件优化的注意力模式进行主动计算(GLA内核)。例如,一个组合系统可以实现:2比特量化 + 50%驱逐 + 跨层合并 = 10倍总压缩。此外,还需要根据序列特征动态选择压缩策略,并根据硬件利用率指标进行实时优化。

最终,KV缓存优化领域的未来发展方向将包括:

  • 与模型架构集成 (2025–2027): 将KV缓存优化构建到模型设计中,而不是作为后置优化。
  • 硬件专业化 (2026–2028): 针对KV缓存管理构建专用硬件解决方案。
  • 多模态扩展 (2025–2026): 调整KV缓存优化技术以处理不同类型的输入token和注意力模式。
  • 理论进步 (2025–2030): 更好地理解KV缓存压缩的信息理论限制。

总而言之,KV缓存优化领域正在迅速发展,各种方法都在解决LLM中内存瓶颈的不同方面。当前方法实现的压缩率范围从2倍(基本量化)到5倍(组合方法),精度保持率通常在完整缓存基线的1-3%以内。虽然每种方法都提供了宝贵的见解和改进,但未来在于混合方法,这些方法结合了多种技术的优势,同时适应特定的硬件和应用需求。随着LLM的规模和能力不断增长,这些优化技术将成为下一代AI应用的重要基础设施。 通过降低内存需求,我们能够降低部署成本,提高可访问性,并改善用户体验,为大模型时代的全面到来奠定基础。