什么是 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
- 引入量化、淘汰、压缩或不兼容复用时,可能改变输出语义
常见用途
- 加速生产推理服务器中的 LLM 文本生成
- 按驻留 Token 规划并发请求的容量和准入上限
- 在多轮对话与长文档负载中复用已授权的兼容前缀
- 通过分页、低精度或内存层级 Offload 缓解 GPU 压力
- 在推理变更中监控 TTFT、TPOT、淘汰、传输和质量
示例
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、租户隔离、权限和留存必须全部兼容。