注意力
- 传统Attention存在的问题
- 优化方向
- 变体有哪些
- 现在的主要变体集中在KV
- Multi-Query Attention
- Grouped-query Attention
- FlashAttention
传统Attention存在的问题
- 上下文约束
- 速度慢,显存占用大(因为注意力考虑整体信息,所以每一个位置都要和其他位置计算注意力分数)
优化方向
- 上下文长度
- 加速
- 减少显存占用
变体有哪些
- 稀疏注意力:引入稀疏偏差降低复杂性
- 线性化注意力:解开Attention矩阵和内核特征图,然后逆序计算,实现线性复杂度(不太了解)
- 改进多头
- 内存压缩
现在的主要变体集中在KV
现在的MQ-A、GQ-A、KV-cache本质上都是复用、缓存KV矩阵,用于缓解内存和内存墙(缓存大小不足,需要频繁访存)的,现在较少有人能讲清楚为什么要存储KV而不是QKV或者Q?
- 要从注意力机制的计算中寻找答案,以下为看图学的KV cache推理示意图:
- 显然,对于现在大模型中常用的单向注意力来说,Q只使用一次,但KV是随着句子的增长不断增加的,所以减少KV的使用变得十分重要。
Multi-Query Attention
- Multi-Query从多头注意力改进而来,多头本身是KQV多头,现在是用Q多头,KV单头。也就是说,在所有注意力头上共享KV。
- 优点:减少KV cache大小,减少显存占用,提高推理速度
- 使用它的模型:GLM2~,Falcon等
Grouped-query Attention
- 介于多头和多Q之间,复用N个KV,精度高一些。
- LLaMA2用的就是这个
FlashAttention
- 使用分块计算softmax
- 解决显存和缓存