推理与部署

KV Cache 是什么?怎么加速推理?显存占用怎么算?

91学AI·2026/7/26·14 阅读

考察点

这道题是推理优化的入门必考题,面试官想确认你是否真的理解自回归解码的计算过程,而不是只会背"缓存 Key 和 Value"一句话。核心看三点:能不能讲清没有 KV Cache 时慢在哪、会不会手推显存占用公式、知不知道 KV Cache 带来的新问题(显存墙)和对应的优化方向。追问通常会往 MQA/GQA、PagedAttention、量化 KV Cache 上走。

参考答案

为什么需要 KV Cache

Decoder-only 模型生成是逐 token 的:每生成一个新 token,都要把它和前面所有 token 一起做注意力。如果每步都从头算,第 t 步要对长度为 t 的序列重算所有层的 K、V,整体复杂度是 O(n²) 的矩阵运算里还套着大量重复的投影计算,绝大多数 FLOPs 都浪费在重复算上。

注意力里有个关键观察:位置 i 的 K、V 只由 token i 自己和模型权重决定(经过前面的层归一化和逐层前传),跟后面生成什么没关系。所以每算出一个 token 的 K、V 就存下来,下一步只需要对新 token 一个位置算 Q、K、V,再让它跟缓存里全部历史 K、V 做注意力。这样每步的注意力从 O(t²) 降到 O(t),这就是 KV Cache。代价是显存:这是典型的空间换时间。

这也是为什么推理天然分成两个阶段:Prefill 阶段一次性处理 prompt,并行算完并把整段 KV 写入缓存,是计算密集(compute-bound);Decode 阶段每步只处理一个 token,算力吃不满,瓶颈在从 HBM 读权重和读 KV Cache,是显存带宽密集(memory-bound)。理解这个二分是后面聊 PD 分离、投机采样的基础。

显存占用怎么算

单 token 的 KV Cache 大小:

2(K 和 V)× 层数 L × hidden_size H × 每元素字节数

以 LLaMA-7B 为例:L=32,H=4096,fp16 每元素 2 字节:

2 × 32 × 4096 × 2 B = 512 KB / token

一条 2048 token 的序列就是约 1 GB,batch 32 就是 32 GB——和 7B 模型 fp16 权重本身的 14 GB 比,KV Cache 在大 batch 长上下文场景下才是真正的显存大头。面试时把这个推导过程说出来,比直接报数字加分得多。

注意这是 MHA(每个 head 独立 KV)的算法。实际要按模型的 KV head 数算,通用公式是 2 × L × (kv_heads × head_dim) × bytes。LLaMA-2-70B 用了 GQA,kv_heads 从 64 降到 8,KV Cache 直接缩到 1/8。

省显存的常见手段

  • MQA/GQA:所有 Q head 共享一组(MQA)或几组(GQA)KV head,Cache 成倍缩小,是目前主流模型的标配(LLaMA-2/3、Qwen 都用 GQA),代价是轻微掉点。
  • KV Cache 量化:把 KV 压到 int8 甚至 int4,vLLM、TensorRT-LLM 都支持,长上下文场景收益大,要注意对 attention 分布敏感的任务可能掉精度。
  • PagedAttention:不减少单 token 大小,而是解决连续分配造成的碎片浪费,vLLM 的方案,属于另一个考点。
  • 滑窗注意力:Mistral 的 SWA 只保留最近 W 个 token 的 KV,Cache 从 O(n) 变 O(W)。

工程上的坑

实际部署时 KV Cache 管理比公式复杂:请求长度参差不齐,预留最大长度会浪费,动态扩又涉及显存拷贝;多轮对话里 system prompt 的 KV 可以跨请求复用(prefix caching / RadixAttention),命中率高时省的是实打实的 prefill 算力。这些点主动提一句,能体现你不是纸上谈兵。

可能的追问

  • MQA 和 GQA 有什么区别,为什么 GQA 更常用? MQA 只留一组 KV head,压缩最狠但掉点明显;GQA 分几组,是质量和显存的折中,主流模型都用 GQA。
  • Prefill 和 Decode 为什么瓶颈不同? Prefill 一次处理整个 prompt,GEMM 够大能打满算力;Decode 每步一个 token,算术强度极低,时间花在搬权重和读 KV 上,带宽说了算。
  • KV Cache 量化为什么 K 比 V 更难量化? K 常有 outlier 通道且参与点积,误差直接放大到 attention score;V 只被加权求和,容忍度高。常见做法是对 K 做 per-channel 量化。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.