Transformer 架构 高级

推理加速:KV Cache、GQA 与长上下文

理解大模型推理为什么慢、KV Cache 如何加速、GQA/MQA 如何省显存,以及流式输出首字延迟的来源。

自回归生成:一步一token

解码器模型逐词生成:每生成一个词,都要把"全部已有序列"再算一遍注意力。没有优化的话,生成 n 个词的注意力计算量是 O(n²) 级 —— 流式输出时你也确实看到 token 一个个蹦出来。

KV Cache:用显存换时间

关键观察:已生成词的 K、V 向量永远不变,没必要重算。把它们缓存起来,每步只需计算新词的 Q/K/V:

  • 每步注意力从 O(n²·d) 降到 O(n·d);
  • 代价:显存占用随序列长度线性增长 —— 这就是长对话/长文档占显存的原因;
  • 对话中途修改了早期消息(如编辑历史),缓存失效必须重算。

MQA / GQA:给 KV Cache 减肥

标准多头注意力里每个头都有独立 K/V,缓存体积 = 层数 × 头数 × 长度 × 维度。优化思路:

  • MQA(多查询注意力):所有头共享一组 K/V,缓存直降 h 倍,但质量略降;
  • GQA(分组查询注意力):折中方案,若干头共享一组 K/V —— LLaMA-2/3 等现代模型的主流选择。

长上下文的代价链

128K 窗口听起来美好,但注意力计算 O(n²)、KV Cache 线性膨胀、RoPE 外推精度下降,三者决定了"长上下文又慢又贵"。应用层的对策正是本站讲过的:RAG 只送最相关的片段,而不是把整个知识库塞给模型;Memory 用窗口/摘要策略裁剪历史。

理解推理成本结构,你才能真正看懂"为什么流式首字要 1 秒""为什么长对话越聊越慢"—— 优化的空间都在架构里。

📝 课后练习

quiz-1 KV Cache 优化的核心观察是?