什么是 KV Cache?

KV Cache(键值缓存)是按层保存仍需参与 Attention 的历史 Token Key 和 Value 张量的推理状态,使自回归解码能够复用它们,而不必为整段前缀重复计算投影。

快速了解

全称Key-Value Cache(键值缓存)
创建时间作为自回归 Transformer 增量解码中的 Attention 状态使用;具体实现从 2017 年 Transformer 架构后持续演进

工作原理

在 Prefill 阶段,因果 Transformer 为 Prompt Token 在各 Attention Layer 创建 K/V;在 Decode 阶段,模型为最新 Token 计算 Q/K/V,读取保留的 K/V,再追加新状态。缓存消除了历史投影的重复计算,但标准 Attention 的工作量和读取量仍随保留序列增长。基础 Decoder-only 容量可按 2 × 层数 × KV 头数 × Head Dimension × 每元素字节数 × 驻留 Token 槽位估算。GQA/MQA、Sliding Window、量化、分页、前缀共享、Offload、推测分支和实现布局会改变物理分配。跨请求复用还必须保证模型、Tokenizer、Adapter、Template、模态、Dtype 与 Trust Scope 兼容。

主要特点

  • 在每个 Attention Layer 中分别保存保留 Token 的 Key 和 Value 张量
  • 消除历史投影的重复计算,但 Attention 仍需读取保留缓存
  • 逻辑容量随层数、KV 头数、Head Dimension、Dtype 和驻留 Token 增长
  • 可采用 Dynamic、Static、Paged、Sliding、Offloaded、Quantized 或共享前缀布局
  • 跨请求复用 Block 前必须验证完整的 Cache Compatibility Identity
  • 引入量化、淘汰、压缩或不兼容复用时,可能改变输出语义

常见用途

  1. 加速生产推理服务器中的 LLM 文本生成
  2. 按驻留 Token 规划并发请求的容量和准入上限
  3. 在多轮对话与长文档负载中复用已授权的兼容前缀
  4. 通过分页、低精度或内存层级 Offload 缓解 GPU 压力
  5. 在推理变更中监控 TTFT、TPOT、淘汰、传输和质量

示例

loading...
Loading code...

常见问题

什么是 Transformer 模型中的 KV Cache?

KV Cache 是保存保留 Token Key 和 Value 张量的逐层推理状态。自回归 Decode 时,最新 Token 产生新 Query 并追加新 K/V,历史 K/V 直接复用。Query 与 Attention Score 不缓存,因为每个位置都会产生新 Query,进而形成新的分数向量。

KV Cache 如何影响内存使用?

基础 Decoder-only 布局可按 batch_size × sequence_length × n_layers × 2(K 与 V)× n_kv_heads × head_dim × bytes_per_element 估算。GQA/MQA 模型应使用 KV 头数量,而不是 Query 头数量。公式不含权重、激活、临时工作区、分配器碎片、分页元数据和实现特定布局,因此必须使用实际部署的模型权重版本与推理引擎进行测量校验。

什么是多查询注意力和分组查询注意力?

MQA 让 Query 头共享一个 Key-Value 头,GQA 则让多组 Query 共享较少的 KV 头。相对同维度、同 Dtype 的完整多头注意力,缓存缩减比例约为 Query 头数除以 KV 头数。质量取舍属于训练后的具体架构和负载,不能保证影响始终很小。

KV Cache 可以量化以节省内存吗?

可以,但前提是实际使用的模型权重、推理引擎和硬件 Kernel 支持目标缓存数据类型。按照名义位宽计算会高估实际节省,因为缩放参数、填充、元数据和存储布局都有开销;质量与延迟影响取决于模型、层敏感度、校准和负载,应同时测试显存、吞吐和任务质量。

什么是前缀缓存?它与 KV Cache 有什么关系?

Prefix Cache 会跨请求复用兼容 Token 前缀的 K/V Block。它可以减少重复 Prefill 和 TTFT,不会降低新输出 Token 的 Decode 工作量。收益取决于复用 Token 数、局部性与淘汰;模型、Tokenizer、Adapter、Template、模态、Dtype、租户隔离、权限和留存必须全部兼容。

相关术语

相关文章