返回文章列表

显存里的隐形巨兽:KV Cache 优化技术全景拆解

为什么 100 万 token 上下文的推理常常"显存先于算力告急"?从 MQA/GQA 的注意力头共享,到 DeepSeek MLA 的潜空间压缩,再到 PagedAttention 的分页管理与 KIVI 的低比特量化,本文按四条技术路线拆解 KV Cache 这一长上下文时代最硬的瓶颈。

8 分钟阅读

一个反直觉的事实

训练大模型最怕算力不够,推理大模型却常常先被显存卡死。这个反直觉现象的根源,就是本文的主角——KV Cache。它不参与训练,却决定了一次推理能承载多长的上下文、多高的并发。

KV Cache 是什么:把历史"记账"下来

标准 Transformer 自回归解码时,每生成一个 token,都要让该 token 的 Query 与之前所有 token 的 Key、Value 做注意力计算。如果不做缓存,每步都要重新计算全部历史 token 的 K/V,复杂度随序列长度平方级增长。KV Cache 的做法是:把已生成 token 的 Key 和 Value 存在显存里,后续步骤直接复用。

代价是显存消耗随序列长度线性增长且相当可观:KV Cache 占用 ≈ 2(K 与 V)× 层数 × 头数 × 头维度 × 序列长度 × 字节数。以 70B 模型、8K 上下文为例,KV Cache 可达数十 GB,往往比模型权重本身还大。长上下文(百万 token 级)推理时,KV Cache 会耗尽显存,导致 Batch Size 退化为 1,吞吐量断崖式下跌。业界因此把 KV Cache 称为长上下文时代的"内存墙"。

围绕这堵墙,业界形成了四条主流优化路线。

路线一:注意力头共享(MQA / GQA)

思路最直接:既然 KV Cache 大小与 KV 头数量成正比,那就减少 KV 头的数量

  • MQA(Multi-Query Attention):所有 Query 头共享同一组 Key/Value 头,KV Cache 直接缩小到约 1/N(N 为头数)。
  • GQA(Grouped Query Attention):折中方案,将 Query 头分组,每组共享一个 KV 头。Llama 2 70B 采用 GQA 后,推理吞吐量比 MHA 版本提升约 2.5 倍,同时质量损失可忽略。

GQA 的论文(Ainslie et al., 2023)证明,从已训练好的 MHA 检查点可以微调得到 GQA,而无需从头训练,这使得 GQA 成为当今开源模型的事实标准之一。

来源:GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints(arXiv:2305.13245)

路线二:潜空间压缩(DeepSeek MLA)

GQA 只是减少头的数量,而 DeepSeek-V2 提出的 MLA(Multi-head Latent Attention) 更进一步:把 Key、Value 连同 Query 一起投影到一个低维潜空间,推理时只需缓存低维的潜向量,而非完整的 K/V。

  • 传统 MHA 缓存维度 = 2 × n_kv_h × d_h;MLA 缓存维度 = d_c(潜维度),通常远小于前者。
  • DeepSeek-V2 官方报告显示,MLA 将 KV Cache 占用降低约 93.3%,显著提升长上下文下的吞吐上限。
  • 该设计在 DeepSeek-V3 中延续,成为其低成本推理优势的架构基础之一。

MLA 的意义在于:它把"压缩 KV Cache"从工程技巧上升为架构设计,从源头决定了显存占用上限。

来源:DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model(arXiv:2405.04434)

路线三:显存分页管理(PagedAttention / vLLM)

前面两条路线从"减少数据量"入手,PagedAttention 则从"管理方式"入手。它的灵感来自操作系统虚拟内存:传统方案为每个序列预分配连续显存块,内部碎片和外部碎片都很严重,实测显存浪费可达 60% 以上。

PagedAttention 将 KV Cache 切成固定大小的块(block),用块表(block table)映射逻辑块到物理块,按需分配:

  • 消除内部碎片:只在需要时分配块。
  • 支持块级共享:并行采样(beam search / parallel sampling)时多个序列可共享公共前缀的 KV 块。
  • 实测可将吞吐量提升 2–4 倍,并让显存利用率接近上限。

vLLM 将这一思路工程化,如今已是推理服务的事实标准组件。

来源:Efficient Memory Management for Large Language Model Serving with PagedAttention(SOSP 2023, arXiv:2309.06180)

路线四:低比特量化(KIVI 与更激进的方向)

KV Cache 是数值分布相对稳定的张量,这为量化提供了空间。KIVI 提出免调优的非对称 2-bit 量化:对 Key 的通道进行分组量化、对 Value 按 token 流式量化,配合每块去量化,几乎不损失精度。

  • KIVI 可将 KV Cache 压缩至原来的约 1/4,实测在长上下文任务中保持与原精度相当的效果,同时显存占用大幅下降。
  • 更激进的方向是 1-bit / 2-bit 感知训练量化,以及结合稀疏化只保留关键 token 的 KV。

量化路线与 MQA/MLA 正交,可叠加使用,是当前显存优化的最后一层"杠杆"。

来源:KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache(arXiv:2402.02750)

四条路线的对比

优化路线核心机制代表工作效果量级适用层
头共享减少 KV 头数量GQA / MQAKV 降至 1/N模型架构
潜空间压缩缓存低维潜向量DeepSeek MLAKV 降约 93%模型架构
分页管理消除显存碎片PagedAttention吞吐提升 2–4 倍推理系统
低比特量化降低存储位宽KIVIKV 压缩约 4 倍推理系统

四条路线分属"架构"与"系统"两个层面,彼此互补:架构层决定 KV Cache 的理论下限,系统层决定能否逼近这个下限。

观察与反思

把这几份资料放在一起看,能读出三层信息。

第一层:瓶颈转移了。 当模型参数量级、训练算力被反复强调时,推理侧的 KV Cache 内存墙其实更早、更频繁地制约用户体验——长上下文承诺得再漂亮,显存放不下就等于没有。注意力机制的进步不再只围绕"效果",而是越来越多地围绕"显存账本"。

第二层:压缩是架构红利,也是工程竞赛。 GQA 和 MLA 把优化前移到架构设计,属于"出生即带红利";PagedAttention 与量化则属于"后天补课"。两者缺一不可:架构再省,没有分页和量化,碎片与位宽仍会浪费掉大部分收益。这也是为什么头部推理服务普遍采用"MLA/ GQA + 量化 + 分页"的组合拳。

第三层:未来仍不乐观。 即便四条路线全开,百万 token 级上下文 + 高并发的组合对显存的要求依然苛刻。MLA 之后的下一站,可能是把 KV 缓存搬出显存(分层存储)、或让注意力摆脱显式缓存(线性注意力/SSM 回归)。KV Cache 这个"隐形巨兽"大概率还会继续改写推理系统的设计规则。

(内容由AI生成,仅供参考)