首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >KV缓存:LLM推理的“内存怪兽”与优化之道

KV缓存:LLM推理的“内存怪兽”与优化之道

作者头像
数据存储前沿技术
发布2025-07-27 13:32:15
发布2025-07-27 13:32:15
1.4K0
举报

全文概览

在生成式AI飞速发展的今天,大型语言模型(LLM)已成为驱动创新的核心引擎。然而,支撑这些模型高效运行的背后,隐藏着一个至关重要的技术——键值缓存(KV Cache)。它如同LLM推理过程中的“隐形引擎”,通过存储注意力机制的中间状态,极大地加速了文本生成的速度,将原本复杂的计算复杂度从二次方降低到线性。但与此同时,KV缓存也像一个“内存怪兽”,其巨大的内存占用迅速成为制约模型吞吐量、上下文长度和并发处理能力的关键瓶颈。从最初解决计算瓶颈到如今引发内存挑战,KV缓存的演进深刻揭示了AI系统设计中计算与内存之间的动态博弈。那么,这个“内存怪兽”究竟是如何工作的?它又带来了哪些不为人知的系统性挑战?我们又该如何驾驭它,释放LLM的全部潜能?本文将带您深入解析KV缓存的原理、挑战与前沿优化技术。

阅读收获

  • 理解KV缓存如何加速LLM推理,以及它为何成为性能瓶颈。
  • 掌握KV缓存的内存占用计算方式,并了解其在不同模型中的具体表现。
  • 识别KV缓存带来的内存容量、带宽限制及长上下文处理等核心挑战。
  • 学习并区分多种KV缓存优化技术,包括架构创新、内容压缩和系统管理策略。

1. 引言:LLM推理的隐形引擎

现代生成式大型语言模型(LLM)的核心在于其自回归(autoregressive)的生成机制,即逐个token地预测和生成文本 1。这个序列化的过程虽然强大,但其固有的计算模式带来了严峻的挑战:每个新生成的token都依赖于所有先前处理过的token 4。为了解决这一问题,键值缓存(Key-Value Cache, KV Cache)应运而生。

KV缓存是一种关键的优化技术,通过存储注意力机制的中间状态(即“键”和“值”向量),来避免在生成每个新token时重复计算整个序列的历史信息 6。其核心贡献在于,将自回归生成过程中注意力计算的复杂度从关于序列长度的二次方(O(n2))降低到了线性(O(n))9。这一转变极大地提升了推理速度,例如,在某些场景下可带来超过4.5倍的性能提升 11。

然而,这种计算效率的提升是以巨大的内存开销为代价的 6。KV缓存的内存占用随序列长度和批处理大小线性增长,迅速成为现代LLM服务中最主要的性能瓶颈,严重制约了模型的吞吐量、上下文长度和批处理能力 1。这种演变是计算机系统中一个典型的“优化跑步机”现象:一个为解决计算复杂性而设计的初始优化方案,因其广泛应用和成功,其副作用(即内存消耗)反而催生了下一个、甚至更严峻的系统瓶颈。最初,问题是Transformer自注意力机制的二次方计算复杂度,使得长序列生成在计算上不可行 6。KV缓存通过复用历史计算,巧妙地将问题线性化,成为所有现代LLM的标准实践 2。然而,随着模型规模和上下文长度的不断增长,KV缓存本身的大小急剧膨胀,甚至常常超过模型权重所需的存储空间 2。这种巨大的内存压力又引发了新的瓶颈:内存容量(系统能容纳多少并发请求或多长的上下文)和内存带宽(读取庞大缓存的速度有多快)6。因此,整个KV缓存优化领域的研究,本质上都是在致力于解决由第一个主要优化方案所带来的新问题。

本报告旨在对KV缓存进行一次全面而深入的剖析,内容涵盖其工作原理、其所引发的系统性挑战、多样化的关键优化技术,以及这些技术在主流推理框架中的实际集成方式。

2. KV缓存的工作机制

要理解KV缓存,首先需要追溯其根源——Transformer架构中的自注意力机制,并明晰其在LLM推理的两个核心阶段(prefill和decode)中扮演的角色。

2.1 自注意力机制:键(Key)与值(Value)的起源

Transformer架构由输入嵌入(embedding)、位置编码(positional encoding)和一系列堆叠的Transformer模块(block)构成 4。每个模块的核心是自注意力机制。在这一机制中,模型为每个输入token的嵌入向量(embedding)生成三个独立的向量:查询(Query, Q)、键(Key, K)和值(Value, V)19。

这些向量的作用如下:当前token的Q向量会与序列中所有先前token的K向量进行点积运算,以计算出注意力分数(attention scores)。这些分数随后被用作权重,对所有先前token的V向量进行加权求和,从而生成当前token在当前层的最终表示 5。这个过程使得模型在处理当前token时,能够动态地衡量序列中其他token的重要性,并从中提取相关信息 19。

2.2 推理过程:Prefill与Decode两阶段

LLM的自回归生成过程通常分为两个截然不同的阶段 2。

  1. Prefill阶段(提示处理)
    • 在此阶段,模型接收完整的输入提示(prompt),并通过一次并行的前向传播(forward pass)来处理所有prompt token 2。
    • 在这次计算中,模型会为prompt中的每一个token计算其对应的K和V向量,并将这些向量存储到GPU内存中的KV缓存区域 1。
    • 此阶段的计算密集度高,涉及大规模的矩阵-矩阵乘法(GEMM),能够充分利用GPU的并行计算能力,因此是计算密集型(compute-bound) 的 2。这也是为什么用户在提交请求后,通常会经历一个短暂的延迟才看到第一个输出token的原因,因为模型正在进行prefill计算 11。
  2. Decode阶段(token生成)
    • 在此阶段,模型逐个生成输出token 1。
    • 对于每一个新生成的token,模型仅需计算其自身的Q、K、V向量 1。
    • 接着,新生成的Q向量会与整个历史序列(包括原始prompt和所有已生成的token)的K和V向量进行注意力计算,而这些历史K、V向量正是从KV缓存中高效读取的 8。
    • 计算完成后,新生成的K和V向量会被追加(append)到KV缓存中,以供后续token生成时使用 1。
    • 此阶段的计算量相对较小(矩阵-向量乘法,GEMV),无法充分利用GPU的计算单元。其性能瓶颈在于从GPU高带宽内存(HBM)中读取巨大且不断增长的KV缓存所需的时间,因此是内存带宽密集型(memory-bandwidth bound) 的 2。

下面的Mermaid图清晰地展示了Prefill和Decode阶段的数据流。

Prefill和Decode阶段的数据流
Prefill和Decode阶段的数据流

Prefill和Decode阶段的数据流

2.3 成本计算:KV缓存的内存足迹

KV缓存的内存占用大小可以通过一个精确的公式来计算 1。

总缓存大小(字节) = batch_size×sequence_length×num_layers×2×num_heads×head_dim×precision_in_bytes

公式各部分解析如下:

  • batch_size: 批处理大小,即同时处理的请求数。
  • sequence_length: 序列长度,包括prompt和已生成的token总数。
  • num_layers: 模型的层数,每一层都有独立的KV缓存。
  • 2: 代表K和V两个向量。
  • num_heads: 注意力头的数量。
  • head_dim: 每个注意力头中K、V向量的维度。通常,num_heads * head_dim 等于模型的隐藏层维度 hidden_size 2。
  • precision_in_bytes: 数据类型占用的字节数(例如,FP16/BF16为2字节,INT8为1字节)。

以下是一些具体模型的例子:

  • Llama 2 7B (FP16精度): 对于单个请求(batch_size=1),上下文长度为4096时,其KV缓存大小约为 1 * 4096 * 32 * 2 * 4096 * 2 字节,约等于2 GB 2。
  • Llama 2 13B (FP16精度): 每个token约需800 KB的缓存空间 12。当上下文长度为4096,批处理大小为8时,总缓存大小将达到约25 GB,这几乎与模型权重本身(约26 GB)相当 1。
  • Llama 3 70B: 每个token约需2.5 MB缓存,一个4k上下文的请求就需要10.5 GB的显存 11。

问题的根源在于,缓存大小与batch_size和sequence_length呈线性增长关系,这使得它在长上下文和高吞吐量场景下成为一个难以管理的庞然大物 2。

3. 核心挑战与系统级瓶颈

KV缓存虽然是性能优化的利器,但其巨大的内存消耗也带来了一系列严峻的挑战,这些挑战从硬件限制延伸到系统效率,乃至模型行为本身。

3.1 内存容量墙

现代GPU的显存容量是有限的,即便是顶级的NVIDIA H100也只有80 GB 12。KV缓存需要与模型权重共同分享这块宝贵的资源 2。对于一个70B参数的模型,仅FP16精度的权重就可能占用约140 GB,必须部署在多个GPU上 24。剩余的显存则需要容纳所有并发请求的KV缓存。

这种资源竞争直接导致了两个核心限制:

  1. 最大上下文长度(sequence_length)受限:对于单个请求,缓存大小决定了模型能处理的最大上下文长度。
  2. 最大批处理大小(batch_size)受限:对于多个请求,总缓存大小限制了系统能同时服务的并发用户数 1。

为了在有限的内存中运行,系统常常被迫减小批处理大小,但这会直接损害硬件利用率和成本效益,因为GPU的并行计算能力没有被充分发挥 6。这种两难处境形成了一个恶性循环:为了提升吞吐量,我们希望增大批处理大小;但增大批处理大小会使KV缓存膨胀,撞上内存容量墙,这又反过来迫使我们减小批处理大小,最终导致吞吐量下降和硬件闲置。这个根本性的矛盾是驱动系统设计者不断寻求优化的核心动力。

3.2 内存带宽瓶颈

如前所述,推理的Decode阶段是内存带宽密集型的 2。GPU的计算能力(以FLOPS衡量)增长速度远超其内存带宽(以GB/s衡量)的增长速度 22。在Decode阶段,模型为生成每一个新token,都必须从HBM中读取完整的、历史悠久的KV缓存 13。这个过程涉及大量的数据传输,其耗时远远超过了实际的计算耗时,导致强大的计算单元大部分时间处于等待状态 6。

这解释了为何在Decode阶段提升性能如此困难。只有两种途径:要么拥有更高的内存带宽(即升级硬件),要么传输更少的数据(即对KV缓存进行优化和压缩)6。后者正是所有KV缓存优化技术的核心目标。

3.3 长上下文模型的挑战

尽管现代LLM号称支持百万级别的超长上下文窗口,但它们对这些信息的有效利用能力却备受质疑 26。

  • “迷失在中间”(Lost in the Middle)问题:研究表明,许多LLM在处理长文本时表现出一种U型的性能曲线。它们能很好地回忆起位于上下文开头和结尾的信息,但对于埋藏在中间部分的信息,则常常会忽略或“遗忘”28。这并非简单的内存问题,而是注意力机制在处理长距离依赖时固有的局限性。
  • 上下文干扰与噪声:将冗长、未经筛选的对话历史全部喂给模型,会引入大量与当前任务无关的信息(即“噪声”),这会分散模型的“注意力”,导致其生成偏离主题或焦点模糊的回答 28。更多的上下文并不总是更好,有时甚至会引入“强干扰项”(hard negatives)——那些主题相关但信息错误的段落,从而混淆模型,降低性能 28。

3.4 系统级低效:内存碎片与过度预留

传统的推理系统在内存管理上也存在固有缺陷。

  • 过度预留(Over-reservation):系统通常会为每个请求预先分配一块连续的内存空间,其大小是基于该请求可能达到的最大序列长度来确定的 12。如果一个请求提前结束或生成的序列较短,那么大部分预留的内存空间将被闲置浪费,直到该请求完全处理完毕。这种现象被称为 内部碎片(internal fragmentation),浪费率可高达60%至80% 29。
  • 外部碎片(External Fragmentation):由于不同请求的生命周期和内存需求各不相同,GPU内存中会逐渐形成许多不连续的小块空闲空间。这些碎片虽然总量可能很大,但无法满足一个需要大块连续内存的新请求,从而导致内存利用率低下 29。

4. KV缓存优化技术分类

为了应对上述挑战,学术界和工业界发展出了一系列丰富的KV缓存优化技术。这些技术可以从模型、token和系统三个层面进行归类 3。

4.1 架构创新:改变注意力机制

这类方法从根本上修改模型架构,通常在预训练阶段实施,以减少KV缓存的生成量。

  • 分组查询注意力(GQA)与多查询注意力(MQA)
    • 原理:改变了标准多头注意力(MHA)中每个查询头(Query Head)都配有独立键/值头(K/V Head)的设计。GQA让多个查询头共享同一组K/V头,而MQA是其极端形式,所有查询头共享唯一的一对K/V头 1。
    • 影响:通过将注意力头的数量n_heads与K/V头的数量n_kv_heads解耦,将需要缓存的K/V向量数量减少了n_heads / n_kv_heads倍,从而在几乎不损失模型性能的前提下,显著缩小了KV缓存的体积。Llama-2-70B和Mistral-7B等模型均采用了此技术 1。
  • 滑动窗口注意力(SWA)
    • 原理:将注意力计算的范围限制在一个固定大小的近期token窗口内(例如,仅关注最近的4096个token),而不是整个上下文历史 1。
    • 影响:为每个序列的KV缓存大小设置了一个上限(即窗口大小),使得模型在理论上可以用固定的内存开销处理无限长的上下文。Mistral-7B是采用此技术的典型模型 6。一些高级变体,如StreamingLLM,还会额外保留序列最开始的几个“注意力池”(attention sink)token,以维持对全局信息的感知 6。

4.2 缓存内容压缩与管理

这类技术在推理时对已生成的KV缓存内容进行操作,通过移除或压缩信息来减小其体积,而无需改变模型架构。

  • 驱逐与剪枝(Sparsity)
    • 原理:在内存预算有限的情况下,根据特定策略丢弃“不重要”token的K/V对 10。
    • 策略
      • 静态策略:预先设定的固定规则。例如,仅保留最近的token(朴素滑动窗口),或保留最初和最近的token组合(如StreamingLLM)6。
      • 动态策略:基于运行时信息决策。一种常见的启发式方法是驱逐累积注意力分数最低的token,其依据是“重要性持久性假设”(Persistence of Importance Hypothesis),即过去不重要的token在未来也大概率不重要 6。H2O和Scissorhands是此方法的代表 6。FastGen则通过对模型进行分析,为不同的注意力头应用不同的驱逐模式 25。
    • 权衡:实现简单,压缩率高(可达80%)6,但风险在于可能永久丢失后续生成所需的关键信息,导致模型在长上下文任务上性能下降 25。
  • 合并与聚类
    • 原理:相比于粗暴地丢弃token,这种方法将语义相似的token合并成一个代表性向量,从而更优雅地保留信息。
    • 方法:Chelsea框架使用分块软匹配算法对token进行聚类和合并 25。ClusterKV在语义簇的粒度上进行token召回 13。SentenceKV则在句子层面操作,将句子表示压缩为紧凑的语义向量 37。
    • 权衡:比纯驱逐策略更能抵抗信息损失,但聚类/合并过程本身会引入额外的计算开销 36。
  • 量化(Quantization)
    • 原理:降低存储在缓存中的K和V向量的数值精度,例如从FP16(16位浮点数)降至INT8(8位整数)或FP8 6。
    • 方法:包括逐通道量化、用于处理非均匀数据分布的非均匀量化(NUQ),以及用于隔离异常值的密集-稀疏量化等 39。vLLM和TensorRT-LLM等框架已支持8位量化 38,而KIVI、KVQuant等前沿研究正尝试将精度进一步压缩至2-4位 15。
    • 权衡:是一种直接有效的内存缩减方法(例如,FP16到FP8可缩减一半)。8位量化对模型精度的影响通常可以忽略不计 38,但更激进的低比特量化(如2位)可能会导致性能下降 15,需要复杂的算法来处理异常值并保持生成质量 40。
  • 低秩分解(Low-Rank Decomposition)
    • 原理:利用隐藏维度中的冗余信息,将K和V向量投影到一个更低秩(low-rank)的空间中进行压缩。
    • 方法:Palu等工作将生成K、V的线性层分解为低秩矩阵,并缓存尺寸更小的中间状态 43。
    • 权衡:能有效减少内存占用,但可能需要对模型进行特定的修改或微调。

4.3 系统级内存管理

这类方法着眼于重构推理系统的内存组织方式,而非模型或缓存内容本身。

  • PagedAttention
    • 原理:受操作系统虚拟内存和分页机制的启发,该技术将KV缓存分割成多个不连续的物理内存块(“页”)1。系统维护一个块表(block table),将逻辑上的token位置映射到这些物理块。
    • 影响:几乎完全消除了内部和外部内存碎片,实现了接近最优的内存利用率(浪费低于4%,而传统方法为60-80%)30。它还催生了强大的“写时复制”(Copy-on-Write)内存共享机制,极大地降低了并行解码(如beam search)的内存开销 30。PagedAttention已成为vLLM、TensorRT-LLM等高性能推理引擎的事实标准 29。
  • 卸载(Offloading)
    • 原理:当GPU内存耗尽时,将部分或全部KV缓存卸载到容量更大但速度更慢的存储层,如CPU内存(DRAM)甚至固态硬盘(SSD)23。
    • 挑战:此举将性能瓶颈转移到了连接CPU和GPU的PCIe总线上,其带宽相对有限 23。简单的卸载操作会引入显著的I/O延迟。
    • 高级系统(如FreeKV, KVPR):采用“算法-系统协同设计”的思路。它们通过投机性检索(speculative retrieval)、双缓冲(double-buffering)等技术,将部分缓存数据的传输与另一部分缓存的重新计算过程重叠执行,从而有效隐藏I/O延迟 23。

下面的Mermaid图直观地展示了PagedAttention如何通过块表和写时复制机制实现内存共享。

PageAttention 内存优化原理
PageAttention 内存优化原理

PageAttention 内存优化原理

Note

PagedAttention 的主要创新是突破原内存预分配的限制,实现动态管理,从而提高内存使用效率。

下表对上述关键优化技术进行了系统性比较。

技术类别

核心技术

原理

实现层面

优点

缺点

架构创新

MQA / GQA

多个查询头共享K/V头,减少K/V向量总数。

模型架构 (预训练)

大幅减少KV缓存大小;对性能影响小;推理速度快。

需要重新训练或对模型进行深度改造,不适用于已有模型。

Sliding Window Attention (SWA)

注意力计算仅限于一个固定大小的局部窗口。

模型架构 (预训练)

KV缓存大小有固定上限,支持无限长上下文;内存占用可预测。

无法捕获窗口外的长距离依赖;可能丢失全局信息。

内容压缩

驱逐 (Eviction)

根据静态或动态策略(如注意力分数)丢弃不重要的token。

推理时 (Token级)

实现简单;压缩率高;无需修改模型。

有信息丢失风险,可能导致长上下文任务性能下降。

合并/聚类 (Merging/Clustering)

将相似的token合并为代表性向量,而非直接丢弃。

推理时 (Token级)

相比驱逐能更好地保留信息,鲁棒性更强。

合并/聚类过程本身会引入额外的计算开销。

量化 (Quantization)

降低K/V向量的数值精度(如FP16 -> INT8)。

推理时 (Token级)

直接减少内存占用;8位量化对精度影响小;易于集成。

激进的低比特量化可能损害模型精度;需要处理异常值。

低秩分解 (Low-Rank Decomposition)

利用隐藏维度冗余,将K/V向量投影到低维空间。

推理时 (Token级)

能有效压缩缓存,利用了不同于其他方法的维度。

可能需要模型微调或特定架构支持。

系统管理

PagedAttention

将KV缓存分块(页)存储在非连续内存中。

系统/框架

消除内存碎片,内存利用率极高;支持高效内存共享。

需要重写注意力核函数以支持非连续内存访问。

卸载 (Offloading)

将KV缓存转移到CPU内存或SSD。

系统/框架

极大扩展了可用缓存空间,支持超长上下文。

引入CPU-GPU通信瓶颈(PCIe带宽),可能增加延迟。

5. 框架集成与真实世界实现

理论上的优化技术最终需要通过推理框架落地才能发挥价值。本节将探讨vLLM、NVIDIA TensorRT-LLM和Hugging Face生态系统如何实现和暴露这些技术。

5.1 vLLM与PagedAttention

vLLM是一个完全围绕PagedAttention构建的高性能推理引擎 31。它的成功迫使竞争对手纷纷采纳类似的基于块的内存管理策略,从而在业界树立了新的标杆。

  • 架构深度解析
    • vLLM的核心是将KV缓存分割成固定大小的物理块(blocks)。一个名为KVCacheManager的组件使用BlockPool来管理这些物理块的分配和释放。对于每个推理请求,系统会维护一个块表(block table),记录其逻辑token序列到物理内存块的映射关系 30。
    • 这种非连续的内存布局要求vLLM必须使用定制化的CUDA核函数来执行注意力计算,因为标准实现无法处理分散在内存各处的数据。这是PagedAttention在工程上的一大权衡 29。
    • 此外,vLLM还实现了高效的前缀缓存(prefix caching)。它通过哈希算法识别不同请求之间的共同前缀,并直接复用这些前缀已经计算好的KV缓存块,从而避免了对相同prompt部分的重复计算 47。
  • 与外部缓存系统的集成:vLLM社区正积极探索将其KV缓存管理能力从单节点扩展到分布式环境。通过KV传输连接器框架(KV transfer connector framework)49 和标准化的 KVEvents API提案 50,vLLM未来有望实现与外部缓存服务(如Redis、RocksDB或自定义的L2缓存后端)的无缝对接 49。这标志着LLM推理正朝着分层、解耦的缓存体系演进,其中vLLM负责管理L1级(GPU内)缓存,并与共享的L2级(CPU/SSD/网络)缓存交互,这对于大规模、多租户的部署场景至关重要。

KV 传输连接器工作原理

vLLM正通过KV传输连接器框架将内存管理能力从单节点扩展到分布式环境。

该框架提供标准API与外部缓存后端交互,由GroupAwareKVCacheManager协调L1(本地)和L2(远程)缓存。开发者可实现连接器处理与外部存储通信,vLLM内置了RocksDB连接器。

连接器复用底层函数执行缓存存储和加载,API调用深度集成在高性能注意力核函数内部。

为使外部系统感知缓存状态,vLLM正标准化KVEvents事件模式。缓存块的创建、换出或复用会发出结构化事件,外部组件可订阅以构建全局缓存状态视图。

llmd-kv-cache-manager等工具利用此机制,监听缓存事件并将缓存块可用性更新至全局索引,使路由器能将请求导向缓存命中率高的节点,实现跨实例缓存复用。

VAST Data的VUA项目已提供插件,将KV缓存扩展至共享NVMe存储,实现更大规模上下文扩展。

KV Caches 调用与卸载原理
KV Caches 调用与卸载原理

KV Caches 调用与卸载原理

5.2 NVIDIA TensorRT-LLM

TensorRT-LLM是NVIDIA官方推出的、用于在自家GPU上实现极致性能的推理优化库 52。它在借鉴业界最佳实践的同时,深度集成了硬件层面的优化。

  • 针对NVIDIA硬件的优化
    • TensorRT-LLM支持包括Paged KV Cache、量化KV Cache(FP8/INT8)和用于滑动窗口注意力的循环缓冲区(Circular Buffer)在内的多种KV缓存优化策略 38。
    • 其一个显著特点是,如果KV缓存被量化为FP8,它可以选择在FP8精度下直接执行注意力计算,这能带来额外的吞吐量提升,是其他一些框架不具备的能力 38。
    • Executor API:精细化控制:TensorRT-LLM通过其Executor API为开发者提供了对缓存管理的深度、编程化控制 53。
    • 基于优先级的驱逐:用户可以为输入序列的不同token范围设置不同的保留优先级(例如,将系统提示符设置为最高优先级),从而影响默认的LRU(最近最少使用)驱逐策略,使其更符合特定工作负载的需求 53。
    • 事件感知的路由:API能够发出KVCacheEvent事件,让外部调度器可以实时感知多个推理服务实例的缓存状态。这使得实现智能的、缓存感知的请求路由成为可能,即将新请求导向缓存命中率最高的实例 53。
    • 卸载控制:API允许显式配置用于缓存卸载的主机内存(CPU DRAM)缓冲区,从而扩展可复用缓存池的大小 54。

5.3 Hugging Face生态(Transformers & TGI)

Hugging Face作为最流行的AI社区和工具提供商,其策略是提供易于使用、高度抽象的接口,以服务广泛的开发者群体。

  • Transformers库中的Cache抽象
    • transformers库通过一个灵活的Cache基类,为用户提供了多种开箱即用的缓存策略 55。
    • DynamicCache:默认的缓存实现,大小随生成过程动态增长 55。
    • StaticCache:预先分配固定大小的内存,消除了动态分配的开销,从而能够与torch.compile等JIT编译技术结合以获得更高速度,但需要提前知晓最大序列长度 57。
    • OffloadedCache:一种节省显存的策略,它将非当前计算层的KV缓存移至CPU内存,并通过异步预取来隐藏数据传输延迟 55。
    • QuantizedCache:支持quanto和HQQ等量化后端,可将缓存值量化为低精度格式以减少内存占用 55。
  • Text Generation Inference (TGI)
    • TGI是Hugging Face推出的生产级推理服务器 59。
    • 多后端支持:TGI并非一个单一的引擎,它支持多种后端,包括其自研的高性能CUDA后端、NVIDIA的TensorRT-LLM后端,甚至还有为CPU优化的llama.cpp后端 59。这允许用户在易用性和极致硬件性能之间做出权衡。
    • 前缀缓存与分块Prefill:TGI同样实现了优化的前缀缓存和分块prefill(chunked prefill)技术,以提升长prompt的处理性能,并在计算密集的prefill阶段和内存带宽密集的decode阶段之间实现更优的调度 61。

这种框架间的“竞合”关系推动了整个领域的发展。vLLM的PagedAttention以其系统设计的优雅和开源的姿态引领了潮流,而TensorRT-LLM则凭借其与NVIDIA硬件的深度绑定提供了无与伦比的底层控制力,Hugging Face则通过其强大的生态和易用性将这些高级技术普及给更广泛的开发者。

6. 结论与未来展望

KV缓存的演进历程,是从一个巧妙的计算加速器,转变为一个复杂的系统性瓶颈,再到催生一系列精妙优化技术的创新源泉。它完美诠释了在LLM推理领域中,计算、内存与系统设计之间永恒的权衡关系。

总结与回顾:本报告系统性地剖析了KV缓存的重要性、工作原理及其带来的内存容量和带宽瓶颈。我们梳理了从模型架构层面的GQA、SWA,到缓存内容层面的驱逐、合并、量化,再到系统层面的PagedAttention和Offloading等一系列优化技术。分析表明,没有一种技术是万能的,它们各自在性能、精度、实现复杂度和适用场景上做出了不同的取舍。

新兴趋势

  1. 算法-系统协同设计:未来的突破将越来越依赖于算法和系统层面的深度融合。像FreeKV和KVPR这样的先进方案已经证明,通过协同调度计算和数据移动,可以有效隐藏I/O延迟,实现单纯的算法或系统优化无法达到的性能高度 23。
  2. 语义缓存:缓存管理正从基于简单启发式规则(如新近度、注意力分数)向基于语义信息的方向发展。通过聚类、句子级向量化等技术,未来的缓存系统将能更智能地判断和保留上下文中的核心信息,这有望从根本上缓解“迷失在中间”等模型行为层面的问题 13。
  3. 标准化与互操作性:随着LLM服务走向大规模和分布式,对标准化API和解耦式缓存系统的需求日益迫切。行业正在推动统一的事件接口(如KVEvents)和分层缓存架构,这将催生一个更加模块化、可互操作的LLM推理生态系统 49。

Check

对实践者的建议:

为特定应用选择最合适的KV缓存优化策略,需要综合考量以下因素:

  • 工作负载特性:是长prompt、短生成,还是多轮对话?对首token延迟(TTFT)和吞吐量(tokens/sec)的敏感度如何?61。
  • 硬件资源:是在单张显存受限的GPU上部署,还是在拥有海量CPU内存和高速互联的分布式集群上?17。
  • 模型与框架:是否有能力修改或重新训练模型(可采用GQA),还是必须将现有模型视为黑盒(应优先考虑PagedAttention、量化等)?

最终,对KV缓存的持续优化,不仅是追求更高推理效率的技术竞赛,更是推动大型语言模型在更广泛、更复杂的现实世界场景中落地应用的关键所在。理解并驾驭KV缓存的复杂性,将是未来AI系统工程师和研究者的核心竞争力之一。

参考资料

  1. Techniques for KV Cache Optimization in Large Language Models, accessed July 20, 2025, https://www.omrimallis.com/posts/techniques-for-kv-cache-optimization/
  2. Mastering LLM Techniques: Inference Optimization | NVIDIA Technical Blog, accessed July 20, 2025, https://developer.nvidia.com/blog/mastering-llm-techniques-inference-optimization/
  3. A Survey on Large Language Model Acceleration based on KV Cache Management - arXiv, accessed July 20, 2025, https://arxiv.org/html/2412.19442v2
  4. LLM Transformer Model Visually Explained - Polo Club of Data Science, accessed July 20, 2025, https://poloclub.github.io/transformer-explainer/
  5. Introduction to Transformers and Attention Mechanisms | by Rakshit Kalra - Medium, accessed July 20, 2025, https://medium.com/@kalra.rakshit/introduction-to-transformers-and-attention-mechanisms-c29d252ea2c5
  6. LLM Inference Series: 4. KV caching, a deeper look | by Pierre Lienhart | Medium, accessed July 20, 2025, https://medium.com/@plienhar/llm-inference-series-4-kv-caching-a-deeper-look-4ba9a77746c8
  7. Transformers Key-Value Caching Explained - Neptune.ai, accessed July 20, 2025, https://neptune.ai/blog/transformers-key-value-caching
  8. KV Caching Explained: Optimizing Transformer Inference Efficiency, accessed July 20, 2025, https://huggingface.co/blog/not-lain/kv-caching
  9. Understanding and Coding the KV Cache in LLMs from Scratch - Sebastian Raschka, accessed July 20, 2025, https://sebastianraschka.com/blog/2025/coding-the-kv-cache-in-llms.html
  10. arxiv.org, accessed July 20, 2025, https://arxiv.org/html/2407.18003v4
  11. KV Caching in LLMs, explained visually - Daily Dose of Data Science, accessed July 20, 2025, https://www.dailydoseofds.com/p/kv-caching-in-llms-explained-visually/
  12. Key Value Cache | Continuum Labs, accessed July 20, 2025, https://training.continuumlabs.ai/inference/why-is-inference-important/key-value-cache
  13. ClusterKV: Manipulating LLM KV Cache in Semantic Space for Recallable Compression, accessed July 20, 2025, https://arxiv.org/html/2412.03213v2
  14. How Caching Helps Improve the LLM Inference? - Association of Data Scientists, accessed July 20, 2025, https://adasci.org/how-caching-helps-improve-the-llm-inference/
  15. KV Cache is huge and bottlenecks LLM inference. We quantize them to 2bit in a finetuning-free + plug-and-play fashion. - Reddit, accessed July 20, 2025, https://www.reddit.com/r/LocalLLaMA/comments/1ap3bkt/kv_cache_is_huge_and_bottlenecks_llm_inference_we/
  16. Reimagining Memory Access for LLM Inference: Compression-Aware Memory Controller Design - arXiv, accessed July 20, 2025, https://arxiv.org/html/2503.18869v2
  17. Pushing up to the Limit of Memory Bandwidth and Capacity Utilization for Efficient LLM Decoding on Embedded FPGA - arXiv, accessed July 20, 2025, https://arxiv.org/html/2502.10659v1
  18. How Transformers Work: A Detailed Exploration of Transformer Architecture - DataCamp, accessed July 20, 2025, https://www.datacamp.com/tutorial/how-transformers-work
  19. A Beginner's Guide to Self-Attention in Transformers | by Nacho Zobian | Medium, accessed July 20, 2025, https://medium.com/@nachozobian/a-beginners-guide-to-self-attention-in-transformers-baf71a971efd
  20. Simplifying transformer architecture: a beginner's guide to understanding AI magic - Compute with Hivenet, accessed July 20, 2025, https://compute.hivenet.com/post/simplifying-transformer-architecture-a-beginners-guide-to-understanding-ai-magic
  21. The Transformer Attention Mechanism - MachineLearningMastery.com, accessed July 20, 2025, https://machinelearningmastery.com/the-transformer-attention-mechanism/
  22. Is inferencing memory bandwidth limited? : r/LocalLLaMA - Reddit, accessed July 20, 2025, https://www.reddit.com/r/LocalLLaMA/comments/1brcnps/is_inferencing_memory_bandwidth_limited/
  23. KVPR: Efficient LLM Inference with I/O-Aware KV Cache Partial Recomputation - arXiv, accessed July 20, 2025, https://arxiv.org/html/2411.17089v2
  24. How an LLM Really Works: Costs, Infrastructure, and the Technical Choices Behind Big Language Models - Red Hot Cyber, accessed July 20, 2025, https://www.redhotcyber.com/en/post/how-an-llm-really-works-costs-infrastructure-and-the-technical-choices-behind-big-language-models/
  25. Efficient Long-Context LLM Inference via KV Cache Clustering - arXiv, accessed July 20, 2025, https://arxiv.org/html/2506.11418v1
  26. Your 1M+ Context Window LLM Is Less Powerful Than You Think | Towards Data Science, accessed July 20, 2025, https://towardsdatascience.com/your-1m-context-window-llm-is-less-powerful-than-you-think/
  27. Long-Context Windows in Large Language Models: Applications in Comprehension and Code | by Adnan Masood, PhD. | Medium, accessed July 20, 2025, https://medium.com/@adnanmasood/long-context-windows-in-large-language-models-applications-in-comprehension-and-code-03bf4027066f
  28. Context-Engineering Challenges & Best-Practices | by Ali Arsanjani | Jul, 2025 | Medium, accessed July 20, 2025, https://dr-arsanjani.medium.com/context-engineering-challenges-best-practices-8e4b5252f94f
  29. KV Cache Optimization: A Deep Dive into PagedAttention & FlashAttention | by M - Medium, accessed July 20, 2025, https://medium.com/foundation-models-deep-dive/kv-cache-guide-part-4-of-5-system-superpowers-framework-realities-kv-cache-in-action-6fb4fb575cf8
  30. vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention, accessed July 20, 2025, https://blog.vllm.ai/2023/06/20/vllm.html
  31. Introduction to vLLM and PagedAttention | Runpod Blog, accessed July 20, 2025, https://www.runpod.io/blog/introduction-to-vllm-and-pagedattention
  32. A Survey on Large Language Model Acceleration based on KV Cache Management - arXiv, accessed July 20, 2025, https://arxiv.org/pdf/2412.19442?
  33. Rethinking Key-Value Cache Compression Techniques for Large Language Model Serving - arXiv, accessed July 20, 2025, https://arxiv.org/pdf/2503.24000?
  34. model tells you what to discard: adaptive kv cache compression for llms - arXiv, accessed July 20, 2025, https://arxiv.org/pdf/2310.01801
  35. Model Tells You What to Discard: Adaptive KV Cache Compression for LLMs - arXiv, accessed July 20, 2025, https://arxiv.org/html/2310.01801v4
  36. [2506.11418] Efficient Long-Context LLM Inference via KV Cache Clustering - arXiv, accessed July 20, 2025, https://arxiv.org/abs/2506.11418
  37. SentenceKV: Efficient LLM Inference via Sentence-Level Semantic KV Caching - arXiv, accessed July 20, 2025, https://arxiv.org/html/2504.00970v1
  38. [vLLM vs TensorRT-LLM] #8. KV Cache Quantization - SqueezeBits, accessed July 20, 2025, https://blog.squeezebits.com/vllm-vs-tensorrtllm-8-kv-cache-quantization-35079
  39. SqueezeAILab/KVQuant: [NeurIPS 2024] KVQuant ... - GitHub, accessed July 20, 2025, https://github.com/SqueezeAILab/KVQuant
  40. PM-KVQ: Progressive Mixed-precision KV Cache Quantization for Long-CoT LLMs - arXiv, accessed July 20, 2025, https://arxiv.org/html/2505.18610v1
  41. Cache Me If You Must: Adaptive Key-Value Quantization for Large Language Models - arXiv, accessed July 20, 2025, https://arxiv.org/abs/2501.19392
  42. [2403.04643] QAQ: Quality Adaptive Quantization for LLM KV Cache - arXiv, accessed July 20, 2025, https://arxiv.org/abs/2403.04643
  43. Daily Papers - Hugging Face, accessed July 20, 2025, https://huggingface.co/papers?q=KV-cache
  44. vLLM and PagedAttention: A Comprehensive Overview | by Abonia Sojasingarayar, accessed July 20, 2025, https://medium.com/@abonia/vllm-and-pagedattention-a-comprehensive-overview-20046d8d0c61
  45. FreeKV: Boosting KV Cache Retrieval for Efficient LLM ... - arXiv, accessed July 20, 2025, https://arxiv.org/pdf/2505.13109
  46. An I/O Characterizing Study of Offloading LLM Models and KV Caches to NVMe SSD - Atlarge Research, accessed July 20, 2025, https://atlarge-research.com/pdfs/2025-cheops-llm.pdf
  47. Automatic Prefix Caching - vLLM, accessed July 20, 2025, https://docs.vllm.ai/en/stable/design/v1/prefix_caching.html
  48. vLLM Paged Attention, accessed July 20, 2025, https://docs.vllm.ai/en/v0.9.1/design/kernel/paged_attention.html
  49. [RFC]: KV Cache Offloading for Cross-Engine KV Reuse · Issue #14724 · vllm-project/vllm, accessed July 20, 2025, https://github.com/vllm-project/vllm/issues/14724
  50. [RFC]: KV-Cache Management Standardization for Interop #20492 - GitHub, accessed July 20, 2025, https://github.com/vllm-project/vllm/issues/20492
  51. llm-d/llm-d-kv-cache-manager - GitHub, accessed July 20, 2025, https://github.com/llm-d/llm-d-kv-cache-manager
  52. NVIDIA/TensorRT-LLM: TensorRT-LLM provides users with an easy-to-use Python API to define Large Language Models (LLMs) and support state-of-the-art optimizations to perform inference efficiently on NVIDIA GPUs. TensorRT-LLM also contains components to create Python and C++ runtimes that orchestrate the - GitHub, accessed July 20, 2025, https://github.com/NVIDIA/TensorRT-LLM
  53. Introducing New KV Cache Reuse Optimizations in NVIDIA TensorRT-LLM, accessed July 20, 2025, https://developer.nvidia.com/blog/introducing-new-kv-cache-reuse-optimizations-in-nvidia-tensorrt-llm/
  54. KV cache reuse — TensorRT-LLM - GitHub Pages, accessed July 20, 2025, https://nvidia.github.io/TensorRT-LLM/advanced/kv-cache-reuse.html
  55. KV cache strategies - Hugging Face, accessed July 20, 2025, https://huggingface.co/docs/transformers/kv_cache
  56. Caching - Hugging Face, accessed July 20, 2025, https://huggingface.co/docs/transformers/cache_explanation
  57. Best Practices for Generation with Cache - Hugging Face, accessed July 20, 2025, https://huggingface.co/docs/transformers/v4.44.0/kv_cache
  58. transformers/src/transformers/cache_utils.py at main · huggingface/transformers - GitHub, accessed July 20, 2025, https://github.com/huggingface/transformers/blob/main/src/transformers/cache_utils.py
  59. Multi-backend support - Hugging Face, accessed July 20, 2025, https://huggingface.co/docs/text-generation-inference/multi_backend_support
  60. Llamacpp Backend - Hugging Face, accessed July 20, 2025, https://huggingface.co/docs/text-generation-inference/backends/llamacpp
  61. TGI v3 overview - Hugging Face, accessed July 20, 2025, https://huggingface.co/docs/text-generation-inference/conceptual/chunking
  62. LayerKV: Optimizing Large Language Model Serving with Layer-wise KV Cache Management - arXiv, accessed July 20, 2025, https://arxiv.org/html/2410.00428v1

Notice:Human's prompt, Datasets by Gemini-2.5-Pro-DeepResearch

#KvCache卸载 #LLM内存优化

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王知鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言:LLM推理的隐形引擎
  • 2. KV缓存的工作机制
    • 2.1 自注意力机制:键(Key)与值(Value)的起源
    • 2.2 推理过程:Prefill与Decode两阶段
    • 2.3 成本计算:KV缓存的内存足迹
  • 3. 核心挑战与系统级瓶颈
    • 3.1 内存容量墙
    • 3.2 内存带宽瓶颈
    • 3.3 长上下文模型的挑战
    • 3.4 系统级低效:内存碎片与过度预留
  • 4. KV缓存优化技术分类
    • 4.1 架构创新:改变注意力机制
    • 4.2 缓存内容压缩与管理
    • 4.3 系统级内存管理
  • 5. 框架集成与真实世界实现
    • 5.1 vLLM与PagedAttention
    • 5.2 NVIDIA TensorRT-LLM
    • 5.3 Hugging Face生态(Transformers & TGI)
  • 6. 结论与未来展望
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档