LLM 架构 · 注意力机制

大模型注意力机制详解:
从 MHA / MQA / GQA / MLA 到 FlashAttention 与稀疏注意力

一次讲清注意力的两笔账(计算量与显存),以及四代 KV Cache 瘦身与三代算子加速

Transformer 之所以能撑起整个大模型时代,核心就一个算子:注意力(Attention)。但注意力也是大模型推理里最贵的一环——它的复杂度随序列长度平方增长,它的 KV Cache 能把显存吃光,它的访存模式决定了 GPU 到底在算还是在等数据。

本文从注意力的原理出发,讲清「两笔账」,再沿着两条主线展开:KV Cache 怎么瘦身(MHA → MQA → GQA → MLA)、注意力算子怎么加速(FlashAttention → 稀疏注意力 → 线性注意力)。

注意力是什么

一、注意力是什么:一次算清 QKV 与缩放点积

自注意力的全部内容就是这个公式:

Attention(Q, K, V) = softmax(QK^T / √d_k) · V

拆开看三步:

  1. 算相似度:Q(查询)与 K(键)做点积,得到每个 token 对其他所有 token 的「关注分数」矩阵 S = QKᵀ,形状 n × n
  2. 归一化:除以 √d_k 缩放(防止点积过大导致 softmax 梯度消失),再沿行做 softmax,得到注意力权重
  3. 加权求和:用权重对 V(值)加权求和,输出本 token 的新表示

多头注意力(MHA):把 Q/K/V 切成 h 个头,各自独立做一次注意力,再拼接、投影。多个头相当于在不同子空间并行捕捉不同关系(语法、指代、位置……)。

复杂度:O(n² · d)——序列长度翻倍,计算量翻 4 倍。这就是长上下文的第一道坎(百万 token 的全注意力需要 EB 级内存,远超单机)。

两笔账

二、注意力的两笔账:计算量与显存

1. 训练侧:注意力矩阵 n×n

训练时必须保存中间注意力矩阵(前向的 S、softmax 结果,反向要用),显存占用 O(n²) 量级。序列 32K、batch 一大,光注意力矩阵就能撑爆 80GB。

2. 推理侧:KV Cache 才是大头

推理时为了避免每个新 token 重算历史,引擎会把历史 token 的 K 和 V 缓存下来(这就是 KV Cache)。单请求每 token 的 KV Cache 大小:

KV Cache = 2 × n_kv_heads × d_head × n_layers × dtype_bytes

注意 n_kv_heads——KV 头数,正是四代注意力架构演进的主战场。

3. 推理两阶段:注意力的两种「贵法」

阶段干什么瓶颈注意力形态
Prefill一次性处理全部输入 prompt计算密集(大矩阵乘满算力)大 Q × 大 K,算力受限
Decode逐个生成 token访存密集(每步都要读全部 KV Cache)单 Q × 长 K,带宽受限

这解释了一个关键现象:推理越到后面越慢——Decode 每生成一个 token 都要把整个 KV Cache 从 HBM(显存)读一遍,GPU 算力利用率极低,全在等内存。所以KV Cache 的大小和访存效率,直接决定推理成本。

KV Cache 瘦身四代

三、KV Cache 瘦身四代:MHA → MQA → GQA → MLA

1. MHA(Multi-Head Attention):最标准的起点

每个注意力头都有独立的 Q、K、V。表达力最强,但 KV Cache 也最大:n_kv_heads = n_heads。

2. MQA(Multi-Query Attention):最激进的压缩

所有头共享一组 K、V,只保留多组 Q。KV Cache 直接缩到 1/n_heads(如 32 头模型缩到 1/32)。

3. GQA(Grouped-Query Attention):主流折中

把 Q 头分组,每组共享一组 K、V。既不像 MHA 那么占显存,也不像 MQA 那么伤质量。

4. MLA(Multi-Head Latent Attention):低秩压缩的极致

DeepSeek 提出的方案:不直接缓存 K、V,而是把输入压缩成一个低维潜向量(latent vector),推理时再解压回 K、V。

5. 四代对比一览

架构KV 头数KV Cache 相对大小表达能力代表模型
MHA= Q 头数100%最强原始 Transformer、Llama 1
MQA1~1/n_heads(最小)有损失PaLM、Falcon
GQA分组(如 1/4)中等接近 MHALlama 2/3、Qwen、Mistral
MLA潜向量压缩4%~14%不降反升DeepSeek-V2/V3/R1

从 MHA 到 MLA 这场演进,把 KV Cache 从「305 GB 级」一路压到「7.4 GB 级」——同一个模型、同一段上下文,显存开销差了两个数量级,这就是架构创新的价值。

选型建议:自己训模型优先 GQA(生态最成熟、质量可控);追极致成本与长上下文可评估 MLA;MQA 只在极端显存受限场景考虑。

FlashAttention

四、FlashAttention:把 O(n²) 显存打回 O(n)

1. 传统注意力的致命浪费

标准实现的流程是:S = QKᵀ → 写回 HBM → 读出来做 softmax → 写回 → 读出来乘 V。问题在于 n×n 的 S 矩阵必须落显存,而 HBM(显存)又大又慢,真正快的 SRAM(片上缓存)却只有几十 MB。

结果就是:算力没被 FLOPs 卡住,反而被数据搬运卡住。

2. FlashAttention 的三板斧

FlashAttention 是 IO 感知(IO-aware)的精确注意力——数学结果与标准注意力完全一致,但中间结果不落显存:

  1. Tiling(分块):把 Q、K、V 切成小块,逐块加载进 SRAM 计算
  2. 在线 Softmax(online softmax):传统 softmax 需要看到整行才能归一化,FlashAttention 用滑动统计量(running max / running sum)边算边修正,无需保存整行
  3. 反向重计算(recomputation):反向传播时丢弃的中间块不存,需要时重算,用少量算力换大量显存

3. 收益

一句话:FlashAttention 已经是现代大模型的标配算子,Llama、Falcon、MPT 等全部默认使用。

稀疏注意力与长上下文

五、稀疏注意力与长上下文

全注意力每个 token 都要看所有 token,而实际语言里大部分 token 对当前 token 并不重要。稀疏注意力就是「只算该算的那些」。

1. 三大经典模式

模式结构特点
滑动窗口(Sliding Window)每个 token 只看前后 W 个位置单层感受野小,但 L 层堆叠后有效感受野 = W × L(Mistral 7B 用 W=4096,32 层堆叠理论超 128K)
Longformer局部窗口 + 少量全局 token(如 [CLS])全局 token 充当信息枢纽
BigBird局部窗口 + 全局 token + 随机连接随机连接保证远距离可达

2. NSA / DSA:把稀疏变成「结构原则」

DeepSeek 的 NSA(Native Sparse Attention,原生稀疏注意力)代表最新一代思路,不再是「打补丁式稀疏」,而是把稀疏性写进架构:

核心挑战是减少访存而非单纯减少计算量——与 GPU 的 Tensor Core、内存层级深度耦合,需要算子级协同优化。

3. PageAttention:KV Cache 的「操作系统」

vLLM 的 PageAttention 借鉴操作系统虚拟内存分页思想,把 KV Cache 切成固定大小的 block,按需分配、非连续存储:

线性注意力与 Mamba

六、线性注意力与 Mamba:跳出 O(n²)

如果稀疏注意力是「少算一些」,线性注意力则是换一种算法。

1. 线性注意力(Linear Attention)

用核函数(kernel trick)重写注意力公式,把 softmax 换成可分解的核函数,从而改变计算顺序:

(QK^T)V  →  Q(K^TV)     # 先算 K^T V(d×d 小矩阵),复杂度降到 O(n)

2. Mamba / SSM(状态空间模型)

Mamba 基于选择性状态空间模型(Selective SSM / S6):用一个随输入动态更新的隐状态来传递信息,兼具 RNN 的线性复杂度与 Transformer 的建模能力。

3. 混合架构:成年人全都要

现实答案多半是混合:

落地要点

七、注意力的工程落地要点(八条)

  1. 先看 KV Cache,再看算力:推理慢多数是 Decode 访存瓶颈,先算清 KV Cache 单 token 大小
  2. 架构选型定基调:新训模型用 GQA 起步;极致长上下文评估 MLA;MQA 只在极端场景用
  3. FlashAttention 必开:现代推理/训练框架默认支持,确认版本(FA2/FA3)与 dtype(BF16/FP8)匹配
  4. KV Cache 量化:FP16 → FP8/INT8 可再省一半显存,注意精度损失与硬件支持
  5. 长上下文先评估稀疏:序列超 32K 时,滑窗/NSA 类稀疏注意力的收益远大于盲目堆显存
  6. PageAttention 提吞吐:高并发场景用分页管理消除碎片,同时天然支持前缀共享
  7. 前缀缓存吃红利:多请求共享 System Prompt 时,Prefix Cache 直接把 Attention 计算省掉
  8. 别忽视显存带宽:Decode 阶段就是「读 KV Cache 大赛」,HBM 带宽(而非算力)决定吞吐上限
总结

八、写在最后

注意力机制二十年没被替换,是因为它足够简单又足够强;而大模型这几年的架构创新,几乎都围绕降低注意力的两笔账展开:

看懂这两条主线,再看新出的架构(MLA、NSA、Mamba 混合),就能一眼判断它到底在解决哪个瓶颈。

关于向量云:大模型落地,把基础设施的复杂性留给我们

注意力算子调优、KV Cache 管理、长上下文部署,都是持续的基础设施工程。向量云(南京)科技有限公司依托字节跳动火山方舟官方授权,专注大模型应用落地:

向量云能力说明
官方授权接入火山方舟官方 API 与官方 Key 直连
低折扣 Token专属折扣价,用量越大越划算
独享接入点独立接入点,缓存与配额不被公共池挤占
缓存隔离降本上下文缓存红利稳定落袋
计费灵活按量计费、即用即扣、注册充值 10 元起
协议兼容OpenAI 兼容协议,业务代码几乎零改动

接入方式:注册后获取官方 API Key,把 base_url 指向向量云接入点即可直接调用火山方舟官方模型。

获取 API Key:https://ark.tokenrize.cn/ · 火山方舟官方 API 与 Key 直连,注册即用

一句话总结:注意力的两笔账——计算量与显存;两条主线——KV Cache 瘦身(MHA→MQA→GQA→MLA)与算子加速(FlashAttention→稀疏→线性)。看懂它们,就看懂了大模型架构演进的全部密码。

关于向量云
向量云(南京)科技有限公司

面向大模型应用落地的技术服务型企业,依托字节跳动火山方舟能力,为合作方提供低折扣模型 Token、可独立部署的运营支撑平台及全链路运营支持。

火山方舟官方授权 官方 API Key 独享接入点 缓存隔离降本 低折扣 Token 即用即扣 · 不设账期

常见问题(FAQ)

火山方舟官方 API 与官方 Key 直连 · 向量云 · 大模型注意力机制

Q1. 注意力机制的核心公式是什么?为什么复杂度是 O(n²)?

A. 核心公式是 Attention(Q,K,V) = softmax(QKᵀ/√d_k)·V。第一步 QKᵀ 得到一个 n×n 的相似度矩阵(n 为序列长度),所以计算与显存都随序列长度平方增长,这就是 O(n²)。序列翻倍,开销翻四倍,长上下文因此成为大模型的核心难题。

Q2. MHA、MQA、GQA、MLA 有什么区别?

A. 四者都是对 KV Cache 的不同权衡:MHA 每个头独立 KV,表达力最强但显存最大;MQA 所有头共享一组 KV,压缩最狠(1/n_heads)但质量有损;GQA 分组共享 KV,是质量与显存的最优折中,也是当今开源大模型默认选择;MLA 用低秩潜向量压缩 KV,KV Cache 仅为 MHA 的 4%~14% 且质量不降,代表是 DeepSeek-V2/V3/R1。

Q3. FlashAttention 为什么又快又省显存?

A. 它是 IO 感知的精确注意力(结果与标准注意力完全一致):① Tiling 分块,逐块加载进 SRAM;② 在线 Softmax 用滑动统计量边算边归一化,无需保存 n×n 矩阵;③ 反向重算代替存储中间结果。因此中间显存从 O(n²) 降到 O(n),速度提升 2~4 倍、内存省 5~20 倍。

Q4. 稀疏注意力有哪些主流模式?

A. 三类经典模式:滑窗注意力(每个 token 只看前后 W 个位置,L 层堆叠后有效感受野 W×L,Mistral 采用)、Longformer(局部窗口 + 全局 token)、BigBird(局部 + 全局 + 随机连接)。最新一代是 DeepSeek 的 NSA(原生稀疏注意力),通过「压缩 + 选择 + 滑动窗口 + 可学习门控」把稀疏从优化手段升级为结构原则。

Q5. 线性注意力和 Mamba 靠谱吗?会取代 Transformer 吗?

A. 线性注意力用核函数重写公式,把复杂度降到 O(n);Mamba 基于选择性状态空间模型,线性复杂度且推理显存恒定(无需 KV Cache)。二者在长序列上效率极高,但在需要精确检索的任务上召回精度仍不如全注意力。现实答案多是混合架构(如 Jamba、Kimi Linear):多数层用线性/稀疏,少数层保留全注意力。

Q6. 为什么推理时 Decode 阶段比 Prefill 慢?

A. Prefill 一次性处理全部 prompt,是大矩阵乘,计算密集、算力利用率高;Decode 每生成一个 token 都要把整个 KV Cache 从显存读一遍,属于访存密集,GPU 算力大量空转在等内存带宽。所以 Decode 的瓶颈是显存带宽,KV Cache 越大越慢——这也是 MLA、GQA 等架构压缩 KV 的根本动机。

Q7. 生产环境优化注意力,最该先做什么?

A. 四件事优先级最高:① 开启 FlashAttention(确认版本与精度匹配);② 架构层面确认使用 GQA/MLA 等 KV 压缩方案;③ KV Cache 量化(FP16→FP8/INT8);④ 用 PageAttention 分页管理 KV Cache 并叠加前缀缓存。前两项定架构,后两项提吞吐,收益通常最立竿见影。