核心要点

  • 说清浪费点:自回归每步都要对全部历史算 Attention,历史 token 的 K/V 其实每步都一样,重算纯属浪费。

  • 讲清收益:缓存历史 K/V 后,每步只算新 token 的 Q,把单步从 O(n²) 降到 O(n),整段生成显著提速。

  • 点出代价:KV Cache 显存 ≈ 2 × layers × heads × seq_len × head_dim,随上下文线性增长,成为长序列瓶颈。

  • 会给优化方案:MQA/GQA 共享 K/V 头、PagedAttention 分页、KV 量化、Prefix caching 复用前缀。

简要回答

生成每个新 token 时,历史 token 的 K/V 不变,缓存它们可避免 O(n²) 重复计算,使每步增量成本接近 O(n);代价是显存随序列长度线性增长。

标准回答

自回归生成第 t 个 token 时,Attention 需要所有 1..t-1 位置的 K、V。无缓存则每步重算全部历史,浪费算力。KV Cache 存储每层已算过的 K/V 张量,新 token 只算自己的 Q 并与缓存做 Attention。代价:显存 ≈ 2 × layers × heads × seq_len × head_dim。优化:Multi-Query Attention 共享 K/V 头;PagedAttention 分页管理 KV 显存;量化 KV 降低带宽。

常见误区

⚠️ 常见踩坑

KV Cache 缓存的是 K 和 V,不缓存 Q——每步新 token 的 Q 仍要现算。另一个常见误解是「KV Cache 省显存」,恰恰相反:它是用显存换算力,长序列下 KV Cache 反而是显存主要占用,才需要 MQA/GQA、分页、量化来压。

追问

追问 1Prefill 和 Decode 阶段有何不同?

Prefill 并行处理整段 prompt,算力密集、可吃满 GPU;Decode 自回归逐 token 生成,内存带宽与 KV Cache 读写成为瓶颈,batch 小、延迟敏感。

追问 2长上下文下 KV Cache 瓶颈如何解决?

PagedAttention 分页管理 KV;MQA/GQA 减少 KV 头数;KV 量化;Prefix caching 复用相同前缀;滑动窗口/稀疏注意力;Prefill-Decode 分离部署。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。

🛠️ AI 工具

  • vLLM

    高吞吐 LLM 推理引擎,77,418+ stars。采用 PagedAttention 显存优化技术,吞吐量比 HuggingFace Transformers 高 24 倍,是生产环境部署大模型推理的首选方案,支持 OpenAI 兼容 API

  • LangChain

    最流行的 LLM 应用开发框架,137K+ stars。提供链式编排、RAG 检索增强生成、Agent 构建等核心能力,覆盖 Python 和 JavaScript 双语言生态,是构建 LLM 应用的基础设施

  • Ollama

    本地运行开源大语言模型的最简方案,支持 Llama、Qwen、DeepSeek 等主流模型,一键安装、自动下载模型、提供 OpenAI 兼容 API,是 AI 开发者本地部署的首选工具