架构与关键技术 进阶 约 22 分钟 更新 2026-10-02

高效注意力与长上下文:KV 缓存、GQA/MQA 与 FlashAttention

学习状态:
未学

一句话定义

长上下文工程围绕注意力的两大瓶颈展开:推理端用 KV 缓存及 GQA/MQA 压缩其显存,训练端用 FlashAttention 改写内存访问模式,使百万词元级窗口在工程上可行。

为什么重要

上下文窗口是 LLM 的「工作内存」,其长度与成本直接决定应用形态(长文档分析、代码库理解、超长对话)。这套技术是 2023 年以来各家窗口竞赛(2K → 128K 及更长)的底层支撑,也是读懂推理成本与部署选型(详见推理部署专题站)的必备知识。

前置知识

核心概念

原理与机制

生成第 t 个词只需历史 K/V + 当前 Q:缓存历史避免 O(T²) 重算,但缓存体积 = 层数 × 2 × T × d × batch × 精度字节,长窗下成为显存第一大户——MQA/GQA 通过共享 K/V 头直接把常数缩小 4 至 8 倍(典型配置)。FlashAttention 的洞察:注意力慢在 HBM 显存往返而非浮点运算;把 Q/K/V 分块装入高速 SRAM、用递推方式计算 softmax 归一化,一次遍历完成,兼顾速度与精确性。

公式或模型

KV 缓存体积与 GQA 压缩比:

M_KV = 2 · L · T · d_model · batch · bytes
GQA: M_KV' = M_KV · (G / h),G 为 K/V 组数

图示

无缓存: 每生成一词 → 对 1..t 全部重算 K,V,Q  (O(T²) 每步)
有缓存: 只算新词 q_t,与缓存 K,V 做注意力     (O(T) 每步)
MQA/GQA: h 组 Q 头共享 1 或 G 组 K,V → 缓存同比缩小

直观类比

KV 缓存像「会议纪要」:不必每次发言都重放全场录音(重算),翻纪要即可(缓存);GQA 像把逐人记录合并成「小组纪要」,记录本变薄;FlashAttention 像「改变做菜顺序」——食材一样,但不再频繁在厨房与储藏室之间往返,全部在小台面上完成(显存分层优化)。

实例或案例

主流开源模型普遍采用 GQA(如 LLaMA 2 70B 起用 GQA;7B 级 MQA/GQA 混用),同等显存可服务更长窗口与更大批量;FlashAttention 已内置于主流训练与推理框架,成为不可见但无处不在的默认项。窗口竞赛从 4K 到 128K 及以上,均是本节技术叠加 kp-012 位置方案的成果。

常见误区

与其他知识点的关系

自测题

  1. KV 缓存把每步生成复杂度从多少降到多少?
    答案要点:从对全部历史重算(每步 O(T²) 累计)降为增量 O(T) 每步;代价是 O(T) 显存。
  2. GQA 与 MQA 的差别及取舍?
    答案要点:MQA 全部 Q 头共享 1 组 K/V(压缩最大、质量略降);GQA 分组共享(折中),现为主流。
  3. FlashAttention 快在哪一层?
    答案要点:不减少浮点计算量(近似精确),而是分块驻留高速缓存、减少 HBM 读写与中间矩阵落盘。

延伸阅读