Attention 升级面
来源:AiGC面试宝典 作者:宁静致远 日期:2023年09月29日 13:26
1 传统 Attention 存在哪些问题?
- 上下文长度约束问题:受限于计算资源和显存,模型能处理的输入序列长度有上限;
- 速度慢、内存占用大:标准 Attention 的计算复杂度和空间复杂度都是 O(n²),序列越长开销越大。
📝通俗解释:传统 Attention 就像一个需要同时记住所有朋友说过的话的人。当朋友很少时还好,但如果朋友很多(输入序列很长),这个人就会很累(计算慢),需要很大的脑子来记所有内容(内存占用大)。
2 Attention 优化方向
- 提升上下文长度:突破序列长度的限制,支持更长的输入;
- 加速、减少内存占用:降低计算复杂度和显存消耗。
📝通俗解释:优化方向就像想办法让这个人既能记住更多朋友说的话,又不需要那么大的脑子。主要有两种思路:一是让这个人变得更聪明(算法改进),二是给这个人更好的工具(硬件利用)。
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 Attention | Multi-Query Attention |
|---|---|---|
| Query | 每个头独立 | 每个头独立 |
| Key | 每个头独立 | 所有头共享 |
| Value | 每个头独立 | 所有头共享 |
各模型参数对比:
| 模型 | n_heads | head_dim | FFN中间维度 | 隐藏维度 h |
|---|---|---|---|---|
| LLaMA | 32 | 128 | 11008 | 4096 |
| Baichuan | 32 | 128 | 11008 | 4096 |
| ChatGLM-6B | 32 | 128 | 4h=16384 | 4096 |
| ChatGLM2-6B | 32 | 128 | 13696 | 4096 |
| Bloom | 32 | 128 | 4h=16384 | 4096 |
| Falcon | 71 | 64 | 4h=18176 | 4544 |
细节说明: 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。这些技术共同的目标是:在保持模型效果的前提下,减少计算和内存开销,提升训练和推理效率。