Skip to content

Attention 升级面

来源:AiGC面试宝典 作者:宁静致远 日期:2023年09月29日 13:26


1 传统 Attention 存在哪些问题?

  1. 上下文长度约束问题:受限于计算资源和显存,模型能处理的输入序列长度有上限;
  2. 速度慢、内存占用大:标准 Attention 的计算复杂度和空间复杂度都是 O(n²),序列越长开销越大。

📝通俗解释:传统 Attention 就像一个需要同时记住所有朋友说过的话的人。当朋友很少时还好,但如果朋友很多(输入序列很长),这个人就会很累(计算慢),需要很大的脑子来记所有内容(内存占用大)。


2 Attention 优化方向

  1. 提升上下文长度:突破序列长度的限制,支持更长的输入;
  2. 加速、减少内存占用:降低计算复杂度和显存消耗。

📝通俗解释:优化方向就像想办法让这个人既能记住更多朋友说的话,又不需要那么大的脑子。主要有两种思路:一是让这个人变得更聪明(算法改进),二是给这个人更好的工具(硬件利用)。


3 Attention 变体有哪些?

  • 稀疏 Attention:将稀疏偏差引入 Attention 机制,降低计算复杂度;
  • 线性化 Attention:解开 Attention 矩阵与内核特征图,以相反顺序计算,实现线性复杂度;
  • 原型和内存压缩:减少查询或键值记忆对的数量,减小 Attention 矩阵大小;
  • 低阶 Self-Attention:捕获 Self-Attention 的低阶属性进行优化;
  • Attention 与先验:用先验 Attention 分布来补充或替代标准 Attention;
  • 改进多头机制:探索不同的替代多头机制。

📝通俗解释:

  • 稀疏 Attention:就像看书时只重点关注关键词,而不是逐字逐句阅读
  • 线性化 Attention:换一种计算方式,让计算量从平方级别变成线性级别
  • 原型和内存压缩:像用摘要代替全文,减少需要记忆的内容
  • 低阶近似:用更简单的方式近似复杂的计算过程

4 Multi-Query Attention 篇

4.1 Multi-head Attention 存在什么问题?

  • 训练过程:不会显著影响训练速度,但会引起非常细微的模型效果损失;
  • 推理过程:需要反复加载巨大的 KV cache,导致内存开销大,性能受内存限制。

📝通俗解释:Multi-head Attention 在推理时,每个注意力头都需要独立的 Key 和 Value,就像每个部门都要保存一份完整的公司资料。当模型很大、注意力头很多时,这些"资料"会占用大量内存,成为推理的瓶颈。

4.2 介绍一下 Multi-Query Attention?

Multi-Query Attention 在所有注意力头上共享 Key 和 Value

架构示意:
输入 Q, K, V
  ├── Q → 独立的 Linear 层(每个头一份)
  ├── K → 共享的 Linear 层(所有头共用)
  └── V → 共享的 Linear 层(所有头共用)

Scaled Dot-Product Attention

Concat + Linear → 输出

📝通俗解释:就像公司只有一个公共资料库,所有部门(注意力头)都共享同一份 Key 和 Value,而不是每个部门都保存一份。这样大大减少了需要存储的"资料"量。

4.3 对比一下 Multi-head Attention 和 Multi-Query Attention?

特性Multi-head AttentionMulti-Query Attention
Query每个头独立每个头独立
Key每个头独立所有头共享
Value每个头独立所有头共享

各模型参数对比:

模型n_headshead_dimFFN中间维度隐藏维度 h
LLaMA32128110084096
Baichuan32128110084096
ChatGLM-6B321284h=163844096
ChatGLM2-6B32128136964096
Bloom321284h=163844096
Falcon71644h=181764544

细节说明: Falcon、PaLM、ChatGLM2 都使用了 Multi-Query Attention,但实现上有细微差别:

  • Falcon:将隐藏维度从 4096 增大到 4544,以保持参数量一致,多余参数量分给 Attention 和 FFN;
  • ChatGLM2:将 FFN 中间维度从 11008 增大到 13696,多余参数分给 FFN 块。

📝通俗解释:Multi-head 就像每个部门都有自己的专用资料库,Multi-Query 则是所有部门共用一个资料库。共用资料库当然更快更省空间,但可能有些部门会觉得不太方便(模型效果略有损失)。

4.4 Multi-Query Attention 这样做的好处是什么?

减少 KV cache 的大小,减少显存占用,提升推理速度。

📝通俗解释:想象一下,推理时需要反复查阅"资料"(KV cache)。如果每个头都有一套资料,查阅时就要搬运很多份;如果所有头共用一套,搬运一次就够了,自然更快、更省内存。

4.5 有哪些模型使用 Multi-Query Attention?

  • 代表模型:PaLM、ChatGLM2、Falcon 等

📝通俗解释:这些大模型都采用了 Multi-Query Attention 来优化推理性能,特别是 Falcon 还结合了并行 Transformer Block 等其他优化技术。


5 Grouped-query Attention

5.1 什么是 Grouped-query Attention?

Grouped-query Attention 介于 Multi-head 和 Multi-query 之间,多个 Query 共享一组 Key 和 Value

  • Multi-head:N 个 Query,N 个 Key-Value 对
  • Multi-query:N 个 Query,1 个 Key-Value 对
  • Grouped-query:N 个 Query,G 个 Key-Value 对(G < N)

📝通俗解释:这是"中庸之道"。Multi-head 太占地方,Multi-query 太省地方(效果可能差一些),Grouped-query 则是大家分小组,每组共享资料,既省地方效果又不会太差。

5.2 有哪些大模型使用 Grouped-query Attention?

  • ChatGLM2
  • LLaMA2-34B/70B

📝通俗解释:这些模型选择了 Grouped-query 作为平衡点,在推理效率和模型效果之间取得较好的折中。


6 FlashAttention

  • 核心:用分块 Softmax 等价替代传统 Softmax
  • 优点:节约 HBM(显存),高效利用 SRAM(高速缓存),省显存,提速度
  • 代表模型:Meta 的 LLaMA、阿联酋的 Falcon 都使用了 Flash Attention
  • 关键词:HBM、SRAM、分块 Softmax、重计算、Kernel 融合

📝通俗解释:FlashAttention 就像一个聪明的图书管理员。他不把整个图书馆(整个 Attention 矩阵)一次加载到内存里,而是分批处理,每次只处理一小部分。这样既不用占用太大地方,又能快速完成任务。


7 并行 Transformer Block

并行公式替换了串行公式,提升 15% 的训练速度

  • 在 8B 参数量规模:会有轻微的模型效果损失
  • 在 62B 参数量规模:不会损失模型效果
  • 代表模型:Falcon、PaLM 都使用了该技术加速训练

三种 Block 结构对比:

(1) GPT Block(串行)
Input → Multi-Head Attention → Add & Norm → MLP → Add & Norm → Output

(2) LLaMA Block(Pre-Norm + SwiGLU)
Input → Norm → Multi-Head Attention → Add → Norm → SwiGLU → Add → Output

(3) Falcon Block(并行)
Input → Norm → [Multi-Query Attention + MLP 并行] → Add → Dropout → Add → Output

📝通俗解释:串行就是先做 Attention 再做 MLP,并行就是同时做这两件事。就像做饭时,可以一边炒菜一边煮饭,同时进行当然更快。Falcon 模型采用了这种并行结构来加速训练。


📝总结:本文介绍了 Attention 机制的多种优化技术,从 Multi-Query Attention 到 Grouped-query Attention,再到 FlashAttention 和并行 Transformer Block。这些技术共同的目标是:在保持模型效果的前提下,减少计算和内存开销,提升训练和推理效率。

基于 MIT 许可发布