键值缓存

KV Cache (Key-Value Cache)

KV Cache 是大模型推理阶段为历史 Token 的 Key 和 Value 张量建立的缓存机制,让每个新 Token 无需重新计算整个历史序列,是推理加速、长上下文运行的底层基础。

详细解释

键值缓存(Key-Value Cache,KV Cache) 是大模型推理速度从”不能用”到”能用”的决定性优化,所有商用大模型 API 底层都在用。

原理回顾:Self-Attention 中每个 Token 会投影出 Query、Key、Value 三组向量。生成第 N 个输出 Token 时,新 Token 的 Q 只需要和历史所有 Token 的 K、V 比权重即可,历史 K、V 其实没有变化。如果不缓存它们,每次生成都要重新把”输入+已生成”所有 Token 过一遍模型,复杂度 O(N²),生成 1000 字回答等于做 50 万次重复计算。

KV Cache 就是把这些历史 K、V 一次性算完后留在 GPU 显存里,每次只追加 1 个新 Token 的 KV,复杂度降到线性。

两个阶段怎么用 KV Cache

Prefill + Decode 配对使用:

  • Prefill 阶段:处理完整 Prompt,创建整段输入的 KV Cache(写入显存)
  • Decode 阶段:每生成 1 个新 Token,读取历史 Cache 的 KV 做注意力,再追加新 Token 的 KV 到 Cache 末尾

KV Cache 显存账(长度越长越夸张)

公式:KV 显存 ≈ 2 × 层数 × KV头数 × 头维 × 序列长度 × 字节数(FP16=2字节)

以 70B 级 128K 上下文为例:KV Cache 可占 40GB+ 显存,差不多是模型权重的 1/3;1M 上下文时,KV Cache 体积能超过模型权重本身——这就是为什么 2024 年后所有长上下文模型都切换到了 GQA/MLA 架构压缩 KV。

唯元智创(Weimeta)在推理网关层提供了”KV 预热 + 前缀复用”的商业级调度,适合 RAG 和多轮对话类需要反复带长前缀的业务场景。

常见问题

为什么长上下文模型推理比短的贵那么多?
主要两块成本:1) Prefill 处理长 Prompt 的算力;2) Decode 阶段每生成一个 Token 都要读完整段 KV Cache,越长越耗显存带宽 + 时间。所以长上下文模型收费通常按长度阶梯加价。