💡

文章摘要

KV Cache 是 LLM 推理的核心瓶颈——它占用 60-80% 的 GPU 显存并随序列长度线性增长。本文从 Transformer 注意力机制的 KV Cache 原理出发,系统讲解 PagedAttention 的分页管理、KV Cache 量化(FP8/INT8)、动态驱逐与压缩、Prefix Caching、三级存储层次(GPU HBM → CPU DRAM → NVMe SSD),以及 vLLM/SGLang/TensorRT-LLM 三大引擎的工程实现对比。

1为什么 KV Cache 是 LLM 推理的第一瓶颈

Transformer 的自回归生成需要为每个已生成的 token 保存 Key 和 Value 向量,避免重复计算历史 token 的注意力。这个缓存就是 KV Cache——它让 LLM 推理从 O(n²) 的重复计算降到 O(n) 的增量计算,代价是显存占用随序列长度线性增长

KV Cache 的显存占用可以用一个公式估算:KV 大小 = 2 × 层数 × KV 头数 × 头维度 × 序列长度 × 批大小 × 精度字节数。以 Llama 3.1 70B 为例(80 层、8 个 KV 头、128 维),在 FP16 精度下服务一个 128K 上下文的请求,单个用户的 KV Cache 就需要约 40 GB——这已经超过了一张 H100 80GB 显存的一半。

问题的本质是:KV Cache 的大小由序列长度和并发数决定,而 GPU 显存是固定的。当上下文从 4K 扩展到 128K 甚至 1M,KV Cache 从"可以忽略"变成"不可能放下"。据 GMI Cloud 2026 年的工程报告(2026-04-13),未优化的 LLM 推理系统通常浪费 60-80% 的 GPU 显存在碎片化和冗余的 KV Cache 存储上。

三大挑战构成了 KV Cache 管理的核心难题:内部碎片(预分配连续内存导致的浪费)、外部碎片(释放后留下的不连续空洞无法复用)、动态增长(序列长度不可预测,无法提前规划内存布局)。这三个问题在传统内存管理方案中几乎无解——直到 PagedAttention 的出现。

图表加载中…

💡 一句话理解

KV Cache 占用的显存通常超过模型参数本身——它是长上下文推理的真正成本瓶颈,而非模型权重。

⚠️ 常见踩坑

不要混淆 KV Cache 和模型参数缓存(如 CUDA context)。KV Cache 是运行时动态增长的,每请求独立,这才是显存管理的难点。

2PagedAttention:借鉴操作系统虚拟内存的分页革命

PagedAttention 由 Kwon et al. 在 2023 年 SOSP 论文中提出,是 vLLM 的核心创新。它的思想极其优雅:KV Cache 的内存管理类比操作系统的虚拟内存分页机制——不再为每个请求分配一大块连续显存,而是将 KV Cache 切分为固定大小的 KV Block(通常 16 个 token 一个 block),通过 Block Table 进行间接寻址。

工作原理:每个请求维护一个逻辑 block 序列(类似虚拟页号),KV Cache Manager 维护一个全局空闲 block 池(类似物理页帧)。当请求需要存储新的 KV 向量时,从空闲池分配一个物理 block 并更新 block table 的映射。请求结束后,其占用的 block 归还空闲池——没有碎片,没有预分配浪费

核心收益:据 PagedAttention 原论文(SOSP 2023),vLLM 在相同硬件上将 LLM 推理吞吐量提升了 2-4 倍KV Cache 显存浪费从 60-80% 降至 4% 以下。这相当于用同样的 GPU 服务 3-4 倍的并发用户。

PagedAttention 的计算侧同样精心设计。传统 attention 假设 KV 存储在连续 buffer 中,PagedAttention 移除了这个假设——它通过 block table 追踪每个请求的 KV block 物理位置,在计算 attention 时按 block 粒度读取数据。虽然引入了间接寻址开销,但通过 CUDA kernel 优化(如 coalesced memory access),实际性能损失可忽略。

Copy-on-Write 机制PagedAttention 还借鉴了操作系统的写时复制技术,允许多个请求共享同一份 KV Cache。这在 beam search、parallel sampling 等场景中特别有效——多个候选序列共享前缀的 KV Cache,只在分叉点创建新 block。

图表加载中…

💡 一句话理解

PagedAttention 的本质是将 KV Cache 的内存管理问题转化为经典的虚拟内存问题,用分页+间接寻址消除了碎片。

⚠️ 常见踩坑

PagedAttention 解决的是显存碎片问题,不减少单个请求的 KV Cache 总量。要减少总量,需要结合量化、压缩等技术(见后续章节)。

3KV Cache 量化:FP8/INT8 将显存减半的工程实践

KV Cache 量化是将 KV 向量从高精度(FP16/BF16)转换为低精度存储的技术。与模型权重量化不同,KV Cache 量化运行时动态进行的——每次 attention 计算后将结果量化为低精度存入 cache,读取时再反量化回高精度参与计算。

FP8 KV Cache 是 2025-2026 年的主流方案。在 NVIDIA Hopper 架构(H100/H200)上,FP8 有原生硬件支持,量化/反量化几乎零开销。vLLM 只需一行配置即可启用:kv_cache_dtype="fp8"。据 Zylos Research 2026 年报告(2026-01),FP8 KV Cache 相比 FP16 可节省 约 50% 显存,推理速度提升 30-33%,且在大多数任务上精度损失可忽略。

INT8 KV Cache 提供更激进的压缩(75% 显存节省),但需要更精细的校准。主要挑战是 KV 向量中的 outlier(异常值)——少量极大或极小的值在低精度量化时会产生显著误差。2025 年末的研究热点之一就是 outlier 处理技术,包括 per-channel 量化、动态范围校准、以及 KVQuant 的自适应精度分配。

TurboQuant 是 Google Research 在 ICLR 2026 发表的最新成果。据 MarkTechPost 2026 年报道(2026-04-29),TurboQuant 通过两阶段流水线实现无偏内积估计:PolarQuant 阶段对 KV 向量施加随机正交旋转,将方差均匀分布到所有坐标;QJL 校正阶段对量化残差进行 1-bit 修正。在 3-bit 精度下实现 6 倍显存压缩8 倍 attention 加速,接近信息论极限的 2.7 倍以内。

KVQuant 是面向超长上下文的自适应量化方案。它的核心思想是:不同通道(channel)的 KV 向量具有不同的数值分布,因此应该为每个通道独立计算量化参数。KVQuant 支持 sub-4-bit 精度,并在长达 1000 万 token 的上下文长度下验证了精度。对于生产环境中工作负载稳定的场景,KVQuant 的校准成本可以摊分到多次推理中。

精度-成本权衡的选择取决于工作负载:聊天场景(短上下文)可以用 INT4 KV Cache 大幅节省显存;长上下文推理(128K+)建议 FP8 作为基线;对精度敏感的代码/数学任务可能需要保持 FP16 KV。一个实用的决策框架是:先用 FP8 跑基准测试,如果精度损失在可接受范围内就保持 FP8;如果显存仍然不够,再尝试 INT8 + outlier 处理;只有在显存极度紧张时才考虑 INT4。

💡 一句话理解

FP8 KV Cache 是 2026 年每个团队都应该启用的'免费'优化——H100 原生支持,50% 显存节省,几乎无精度损失。

⚠️ 常见踩坑

INT4/INT8 KV Cache 的 outlier 问题在长上下文场景会放大——超过 128K token 时,建议先做 A/B 测试验证精度。

4注意力层架构优化:GQA、MQA 与 MLA

PagedAttention量化是服务层优化,而 GQA/MQA/MLA 是模型架构层的优化——它们在训练时就被设计进去,从根本上减少 KV Cache 的大小。

Multi-Query Attention(MQA) 由 Shazeer 在 2019 年提出,核心思想是所有注意力头共享同一组 KV 向量。传统 MHA(Multi-Head Attention)中,每个头有独立的 Q/K/V 投影;MQA 中只有 Q 是多头的,K 和 V 是单头的。这将 KV Cache 缩小到原来的 1/头数(如 Llama 2 70B 有 64 个头,MQA 将 KV Cache 缩小 64 倍)。代价是模型表达能力下降。

Grouped-Query Attention(GQA) 是 MQA 和 MHA 的折中方案,由 Ainslie et al. 在 2023 年提出。它将多个 query 头分组共享一组 KV 向量。例如 32 个 query 头分为 8 组,每组共享 1 组 KV——KV Cache 缩小 4 倍,同时保留大部分表达能力。Llama 3 全系列采用 GQA(8 组 KV),已成为 2024-2026 年的默认架构选择。

Multi-head Latent Attention(MLA) 是 DeepSeek-V2/V3 的创新。据 MarkTechPost 报道(2026-04-29),MLA 通过低秩联合压缩KV Cache 压缩到原来的 6.7%(93.3% 压缩率)。具体做法是将 K 和 V 投影到一个低维潜在空间,在 attention 计算时再解压恢复。DeepSeek-V2 在保持与 GPT-4 相当的性能下,通过 MLA 大幅降低了推理成本。

架构选择的工程影响:GQA 对现有推理引擎完全兼容(只需调整 KV head 数);MLA 需要推理引擎的特定支持(vLLM 0.7+ 已支持)。MQA 适合对延迟极度敏感的场景但精度牺牲较大。

图表加载中…

💡 一句话理解

GQA 是 2026 年新建模的默认选择——它在 KV Cache 大小和模型能力之间取得了最佳平衡。

⚠️ 常见踩坑

MLA 的 93.3% 压缩率是 DeepSeek-V2 的数据,不同模型的实际压缩率取决于低秩维度的选择。

5动态驱逐与 Prefix Caching:智能复用 KV Cache

KV Cache 驱逐解决的是"显存不够时该丢弃哪些 KV"的问题。与 CPU 页面的 LRU 驱逐不同,KV Cache 驱逐需要考虑注意力权重——被当前 token 高度关注的历史 token 不能丢弃,否则生成质量会急剧下降。

基于注意力分数的驱逐是最直观的方案:为每个 KV block 维护一个累积注意力分数(该 block 中的 token 被 attend 的总次数),当显存不足时驱逐分数最低的 block。SnapKV(2024)和 H2O(2023)是这一方向的代表工作。PagedEviction(2025)进一步简化了实现——它在 block 粒度进行驱逐,不需要修改 CUDA kernel,可以直接在 vLLMPagedAttention 之上叠加。

Prefix Caching 是 2025-2026 年最具实际价值的优化。核心思想:如果多个请求共享相同的前缀(如系统 promptfew-shot examples),它们的 KV Cache 可以复用而非重复计算

vLLMAutomatic Prefix Caching(APC) 通过 hash 匹配 KV block 的内容来实现:每个 block 的内容(token 序列)计算 hash,新请求到来时查找 hash 表,如果命中则直接复用已有 block 的 KV 数据,跳过 prefill 计算。SGLangRadixAttention 更进一步,用基数树(Radix Tree)管理所有请求的 KV Cache,支持任意前缀的匹配和复用。

Prefix Caching 的实际收益取决于工作负载的特征:系统 prompt 较长且固定的场景(如客服机器人、代码助手)命中率可达 80%+,prefill 延迟降低 50-70%;纯随机对话场景命中率接近 0%,收益有限。据 DigitalApplied 2026 工程指南(2026),Prefix Caching 是"高杠杆应用层优化"——在适合的场景下效果极其显著。

Chunked Prefill 是另一个重要的优化技术。当处理长上下文请求时,prefill 阶段需要一次性处理所有输入 token,这会占用大量 GPU 显存并阻塞其他请求。Chunked Prefill 将长输入切分为多个 chunk,每个 chunk 单独处理,允许在 chunk 之间插入其他请求的 decode 步骤。这显著降低了 prefill 的显存峰值,提高了多请求并发时的整体吞吐量。vLLMSGLang 都支持 Chunked Prefill,对于 128K+ 上下文的场景效果尤为明显。

💡 一句话理解

Prefix Caching 在系统 prompt 固定的场景下是'免费'的性能提升——同样的 prefill 只需计算一次。

⚠️ 常见踩坑

Prefix Caching 的 hash 匹配有开销,在短上下文、高变动的场景下可能得不偿失。建议先测量命中率再决定是否启用。

6三级存储层次:GPU HBM → CPU DRAM → NVMe SSD

当单个请求的 KV Cache 超过 GPU 显存容量时,必须将部分数据卸载到更慢但更大的存储层。这形成了三级存储层次:GPU HBM(最快、最小、最贵)→ CPU DRAM(中等速度、较大)→ NVMe SSD(最慢、最大、最便宜)。

CPU 卸载是最简单的方案:当 GPU 显存不足时,将冷的 KV block 通过 PCIe 传输到 CPU 内存。当这些 block 再次被 attention 计算需要时,再传回 GPU。NVIDIA 的统一内存(Unified Memory)可以自动管理这个过程,但性能不如手动管理。LMCache 是 2025 年出现的多层缓存系统,支持 GPU → CPU DRAM → 本地磁盘的三级调度,对重复上下文可实现 3-10 倍延迟降低和跨实例缓存共享。

NVMe 卸载是 2026 年的新前沿。据 Spheron 2026 年技术博客(2026),在 H100 上服务 Llama 3.1 70B 的 128K 上下文请求,8 个并发用户需要约 320 GB KV Cache——是 H100 HBM(80GB)的 4 倍。唯一的解决方案是将冷的 KV block 卸载到 NVMe SSD。NVIDIA 在 CES 2026 发布的 ICMSP(Intelligent Compute & Memory Subsystem Platform) 通过 cuFile GPU-Direct NVMe 和 BlueField-4 DPU 实现了 GPU 到 NVMe 的直接数据传输,绕过 CPU 瓶颈。

工程权衡:GPU HBM 的带宽约 3.35 TB/s(H100),CPU DRAM 通过 PCIe 5.0 约 64 GB/s,NVMe SSD 约 7-14 GB/s。每下降一级,延迟增加约 50-100 倍。因此三级层次的关键是准确预测哪些 KV block 即将被访问——这本质上是一个预取(prefetch)问题,与 CPU cache line 预取的思想一致。

图表加载中…

💡 一句话理解

三级存储层次让'单 GPU 服务 10 倍更多用户'成为可能——代价是冷数据访问的延迟增加。

⚠️ 常见踩坑

NVMe 卸载的延迟代价极高(约 100 倍于 GPU HBM),只适合低频访问的历史 KV。频繁的 GPU-NVMe 传输会完全摧毁推理性能。

72026 前沿:推理感知压缩与潜在空间压缩

KV Cache 压缩正在从通用量化走向推理感知。传统量化对所有 token 一视同仁,但不同 token 对最终输出的贡献差异巨大——attention sink token(通常是第一个 token)承载了不成比例的注意力权重,而中间的填充 token 可以被激进压缩甚至丢弃。

TriAttention(2025)是推理感知压缩的代表工作。据 MarkTechPost 报道(2026-04-29),TriAttention 将 KV token 分为三类(sink token、高注意力 token、低注意力 token),对每类采用不同的压缩策略。在 AIME 2025 数学推理任务上实现了 10.7 倍内存压缩且保持匹配精度。

Attention Matching 代表了更激进的方向——潜在空间压缩。它不再存储原始 KV 向量,而是训练一个小型压缩网络将 KV 信息编码到低维潜在向量中。据报道可实现 50 倍压缩比,但需要额外的训练成本和压缩/解压延迟。

K=V(KV 共享) 是另一个有趣的思路:在某些注意力层中,Key 和 Value 可以共享同一个投影矩阵,将 KV Cache 直接减半。这在部分模型(如某些 BERT 变体)中已有应用,但在自回归 LLM 中的效果仍在探索中。

KV Sharding 解决的是分布式推理中的 KV Cache 问题:在张量并行中,KV Cache 需要在多个 GPU 间分片存储和通信。合理的分片策略可以减少跨 GPU 通信开销,是大规模部署的关键工程问题。

KV Token Pruning(KV 令牌剪枝) 是 2026 年另一个活跃的研究方向。与量化不同,剪枝直接丢弃不重要的 KV 对——通过评估每个 token 对后续生成的贡献度,选择性地保留"关键 token"。Scissorhands(2023)和 Pyramid-Infer(2024)是早期代表。2026 年的新进展是将剪枝与推理感知结合:根据当前生成任务动态调整剪枝策略,在数学推理任务上保留更多中间步骤 token,在对话任务上保留更多语义关键 token。

组合策略是实际部署的最佳实践。单一技术(如仅用 FP8 量化)的收益有限,但多种技术叠加可以产生复合效果:PagedAttention + FP8 KV + GQA + Prefix Caching 的组合可以将长上下文推理成本降低 4-40 倍——这是从"1M 上下文只是营销口号"到"1M 上下文真正可用于生产"的差距。

💡 一句话理解

推理感知压缩是 2026 年的研究热点——它证明了'不是所有 token 都同等重要',可以针对性地分配压缩预算。

⚠️ 常见踩坑

潜在空间压缩(50 倍)目前仍需额外训练,且压缩/解压延迟可能抵消显存节省的收益。生产环境慎用。

8工程实战:vLLM/SGLang/TensorRT-LLM 三大引擎对比

选择推理引擎KV Cache 优化的最终落地环节。2026 年的三大引擎各有特色:

vLLMPagedAttention 的原生实现,也是生产部署的默认选择。它的 KV Cache 管理最成熟:支持 PagedAttention、Automatic Prefix Caching、FP8/INT8 KV Cache、CPU 卸载。vLLM 0.7+ 支持 MLA 架构。配置简单,社区活跃。据 Zylos Research(2026-01),vLLM 在生产部署中占据主导地位。

SGLang 的核心创新是 RadixAttention——用基数树管理所有请求的 KV Cache,支持更灵活的 prefix 匹配和复用。在需要复杂 prompt 组合的场景(如 multi-turn 对话、RAG 系统)中,SGLangKV Cache 复用效率可能超过 vLLM 的 APC。SGLang 在吞吐量基准测试中经常领先。

TensorRT-LLM 是 NVIDIA 官方的高性能推理引擎,与 CUDA 生态深度绑定。它的 KV Cache 管理通过 In-flight Batching(连续批处理)实现动态调度,配合 NVIDIA 硬件(FlashAttention-3、FP8 原生支持)可以达到最高单请求吞吐量。但灵活性不如 vLLM/SGLang,配置复杂度更高。

选型建议:通用场景选 vLLM(成熟稳定);复杂 prompt 组合选 SGLangRadixAttention 优势);纯 NVIDIA 生态且追求极致性能选 TensorRT-LLM。三者都支持 PagedAttention 和 FP8 KV Cache——启用 FP8 KV 是任何引擎的第一步优化

性能参考数据(据 Zylos Research 2026 报告):PagedAttention 吞吐量提升 2-4 倍;FP8 vs FP16 速度提升 30-33%;连续批处理吞吐量提升最高 23 倍;FlashAttention-3 在 H100 上达到 840 TFLOPS(85% 利用率)。

部署配置的最佳实践:无论选择哪个引擎,以下配置顺序可以最大化收益。第一步,启用 FP8 KV Cache——这是一行配置的改变,在 H100 上几乎零精度损失但节省约一半显存。第二步,确认 PagedAttention 已启用(vLLM 默认启用,TensorRT-LLM 通过 In-flight Batching 实现)。第三步,评估工作负载的 prompt 复用率,如果系统 prompt 固定且较长,启用 Prefix Caching。第四步,根据上下文长度决定是否配置 CPU 或 NVMe 卸载——对于 32K 以下的场景通常不需要;对于 128K 以上的场景,建议预留 40-60% 的 GPU 显存给 KV Cache,其余通过卸载扩展。

特性vLLMSGLangTensorRT-LLM

PagedAttention

✅ 原生支持

✅ 支持

✅ In-flight Batching

Prefix Caching

✅ APC(hash 匹配)

✅ RadixAttention(基数树)

✅ 有限支持

FP8 KV Cache

✅ 一行配置

✅ 支持

✅ 原生优化

MLA 支持

✅ v0.7+

✅ 支持

✅ 支持

CPU/NVMe 卸载

✅ 支持

✅ LMCache 集成

✅ NVIDIA ICMSP

社区生态

⭐⭐⭐ 最活跃

⭐⭐ 快速增长

⭐⭐ NVIDIA 官方

适用场景

通用生产部署

复杂 prompt 组合

纯 NVIDIA 高性能

💡 一句话理解

2026 年推理引擎选型的第一步:启用 FP8 KV Cache + PagedAttention,这两项组合可以'免费'获得 2-3 倍吞吐量提升。

⚠️ 常见踩坑

引擎选型不要只看峰值吞吐量——要看你的实际工作负载(上下文长度分布、并发模式、prompt 复用率)下的有效吞吐。

9总结:KV Cache 优化的决策框架

KV Cache 优化不是单一技术的选择,而是分层决策

第一层:架构选型——在模型设计阶段选择 GQA/MQA/MLA,这是最根本的显存节省(2-8 倍),且无需运行时开销。

第二层:内存管理——PagedAttention 解决碎片化,Prefix Caching 解决重复计算。这两项是任何生产部署的标配。

第三层:精度压缩——FP8/INT8 KV 量化在几乎无损的情况下将显存减半。启用成本极低,收益确定。

第四层:容量扩展——CPU/NVMe 卸载和三级存储层次,用于超长上下文场景(128K+ token)。

第五层:智能压缩——推理感知压缩、token 剪枝等前沿技术,适合对成本极度敏感的场景。

实际部署建议从第一层和第二层开始,逐步叠加第三层。第四、五层仅在长上下文成为瓶颈时再考虑。记住:KV Cache 优化是 LLM 推理 ROI 最高的投资方向——同样的 GPU,优化后可能多服务 2-4 倍用户。

量化收益参考:以 Llama 3 70B、32K 上下文、batch=8 为例,纯 FP16 KV Cache 约需 40GB 显存;启用 GQA(8:1)后降至约 10GB;叠加 FP8 量化后约 5GB;配合 PagedAttention 可将有效 batch 再提升 2-3 倍。这些数字解释了为什么 2026 年推理成本持续下降——主要驱动力来自 KV Cache 工程优化,而非模型架构本身的突破。

💡 一句话理解

快速评估你的 KV Cache 瓶颈:用 nvidia-smi 观察推理时显存占用。如果 KV Cache 占比超过 60%,PagedAttention + FP8 应该是最优先的优化组合。长上下文场景下,Prefix Caching 的命中率直接决定成本上限。

🎯 相关面试题

巩固本篇知识点,备战 AI 岗位面试。