A Survey of Efficient Attention Methods: Hardware-efficient, Sparse, Compact, and Linear Attention
Sparse Attention
注意力
其中
基于模式的方法(
)依赖于从经验观察中得出的预定义稀疏模式,其中 中 条目的位置遵循固定的几何形状(例如,滑动窗口形状)。 动态稀疏注意力(
)在运行时根据某些输入相关的函数自适应地计算稀疏掩码 (例如,如果 ,则 ,其中 是阈值, 可以是对 的平均池化)。
Sparse Attention. 稀疏注意力需要 FlashAttention 来提高效率,其稀疏模式需要与 FlashAttention 的块大小相匹配。实现稀疏 FlashAttention 的思路很直观:我们可以根据稀疏掩码
定义 1(稀疏 FlashAttention)。基于掩码的稀疏 FlashAttention 的计算规则定义如下:
其中
稀疏注意力的预备知识
LLM Prefilling 和 Decoding。如第 2.4.3 节所述,对于 LLM 的预填充(
减少 KV 存储。尽管大多数稀疏注意力方法可以减少解码阶段的
扩散 Transformer(DiT)。扩散
免训练属性。在表 4 中,免训练(
表 4 根据稀疏掩码
基于模式的稀疏注意力
基于模式的稀疏注意力方法使用预定义的几何模式来确定哪些 token 对之间应该计算注意力。这些方法通常是免训练的,可以直接应用于预训练模型。
StreamingLLM. 标准的密集注意力面临二次复杂度问题,并且在超出预训练长度时会失效,而简单的窗口注意力在初始 token 从 KV Cache 中被驱逐后会崩溃。StreamingLLM 识别了一个关键现象,称为注意力汇聚(
StreamingLLM 提出了一个简单而高效的框架,在保留注意力汇聚的 KV 状态的同时,维护最近 token 的滚动缓存。这种免训练方法能够在无限长度的序列上实现稳定的性能,同时将每个 token 的计算复杂度降低到
DiTFastAttn. DiTFastAttn 是一种训练后加速方法,通过三个维度解决 DiT 模型中的计算冗余问题:
空间维度:采用窗口注意力和残差缓存来减少冗余计算。在特定时间步
,同时计算完整注意力 和局部窗口注意力 。计算两者之间的差异作为"残差" 。然后在接下来的几个步骤 中,使用窗口注意力 和缓存的"残差" 来计算输出 。 时间维度:由于相邻时间步的注意力输出高度相似,缓存具有相似注意力输出的步骤序列中第一步的输出,并在后续步骤中重用它。
CFG 维度:无分类器引导(
)在每一步执行两次前向传递:一次有条件,一次无条件,其注意力输出通常高度相似。因此,将有条件传递的注意力输出重用于无条件传递,有效地将这些情况下的注意力计算减半。
SampleAttn. SampleAttn 为 LLM 预填充提出了一种免训练的自适应结构化稀疏注意力。SampleAttn 识别了两种稀疏模式:
- 局部窗口模式:捕获最近的上下文。
- 列条纹模式:表示关键的全局信息。
该方法通过为每个注意力头动态组合这两种结构化模式来近似完整注意力。为了捕获局部窗口模式,SampleAttn 关注固定百分比的相邻 token,允许窗口大小随序列长度缩放。为了在不计算整个注意力分数的情况下识别注意力图的关键列,SampleAttn 采用两阶段过程:首先采样一组查询 token 并计算与键 token 的部分注意力分数矩阵
SampleAttn 将预填充延迟降低了高达 2.42 倍,同时在基准测试中保持超过 99% 的基线准确性。
MoA. MoA(
MoA 将其形式化为对弹性规则的离线搜索,其中每个规则定义窗口长度如何通过关系
通过优化的窗口长度,MoA 相比 StreamingLLM 显著提高了 1.5-7.1 倍的检索准确性,并在保持最小性能下降的同时,相比 FlashAttention2 提高了 6.6-8.2 倍的解码吞吐量。
DuoAttention. DuoAttention 识别了 LLM 中的两种注意力头类型:
- 检索头(
):需要完整注意力来捕获全局相关上下文。 - 流式头(
):主要关注最近和初始 token(注意力汇聚),允许部分注意力和减少的 KV Cache。
为了区分注意力头类型并应用适当的掩码,DuoAttention 为每个头引入了一个可学习的门控
门控值通过最小化完整注意力模型和 DuoAttention 模型的最后隐藏状态之间的均方误差来优化,并对
DuoAttention 在长上下文设置中实现了高达 2.55 倍的预填充和 2.18 倍的解码加速,并将推理内存减少了 2.55 倍。
Sparse VideoGen. Sparse VideoGen 为视频扩散 Transformer 提出了一种免训练的稀疏注意力框架,旨在降低长视频序列上完整 3D 注意力的成本。给定输入
相应的稀疏注意力掩码定义为
由对角滑动窗口和第一帧汇聚组成 由多个倾斜条纹组成
分类通过轻量级在线分析算法实现。对于每个注意力头
在掩码分配后,Sparse VideoGen 对时间头应用静态布局转换,在选定的稀疏模式下实现高效计算。Sparse VideoGen 在视频生成任务上实现了高达 2.3 倍的加速。
Radial Attention. Radial Attention 引入了一种具有
该方法将注意力图划分为指数扩展的时间带,其中计算密度从对角线每步减半。在每个帧到帧的注意力块内,维护一个指数递减宽度的对角窗口。此外,稀疏注意力图的最小单元设置为
Radial Attention 还保证了类似 LoRA 的轻量级微调用于视频扩散模型的上下文扩展,因为它有效地保留了重要 token 关系的计算。该方法在不进行调优的情况下,将领先视频扩散 Transformer(例如 Wan 2.1、HunyuanVideo)的默认长度视频生成加速高达 1.9 倍,同时为长达 4 倍的视频生成带来高达 4.4 倍的训练成本降低和 3.7 倍的推理加速。
STA (Sliding Tile Attention). Sliding Tile Attention 通过克服传统 2D 和 3D 滑动窗口注意力机制的计算低效问题来加速视频扩散 Transformer。尽管滑动窗口注意力通过局部性强制减少了 FLOPs,但其 GPU 效率受到包含掩码和未掩码条目的混合注意力块的阻碍,这破坏了 FlashAttention 所需的块状计算模式。
Sliding Tile Attention 通过将注意力操作从 token 级别转移到 tile 级别来解决这一限制,将 3D 输入划分为固定大小的时空 tile,并确保每个注意力块要么完全密集,要么完全空。这种设计消除了掩码开销,并实现了高效的 GPU 执行。
基于 FlashAttention3 和 ThunderKittens 实现,Sliding Tile Attention 在注意力内核执行中实现了高达 10.45 倍的加速,在端到端推理中实现了 2.98 倍的加速。Sliding Tile Attention 支持免训练和微调配置:
- 免训练设置:使用小型提示集自动校准每层、每头的窗口大小,实现 58% 的稀疏性和 1.8 倍的端到端加速。
- 微调设置:可以优化固定的稀疏掩码以进一步提高吞吐量;例如,91% 的稀疏性产生 3.5 倍的加速,VBench 分数的下降可以忽略不计。
NeighborAttn (Neighborhood Attention). Neighborhood Attention 引入了一种像素级滑动窗口注意力,将每个查询的注意力范围局部化到其直接的空间邻居。与 Swin Transformer 采用非重叠窗口注意力并依赖移位窗口来扩大感受野不同,Neighborhood Attention 保留了平移等变性,并在不需要手动移位的情况下自然扩展感受野。
这种设计实现了线性时间和空间复杂度,同时保留了局部性偏差,从而弥合了卷积网络和自注意力架构之间的差距。为了实际部署,Neighborhood Attention 通过其 NATTEN 库使用自定义 CUDA 内核实现,与 Swin 注意力相比实现了高达 40% 的加速和 25% 的内存减少。
基于这种机制,Neighborhood Attention 在分类、检测和分割任务中表现出强大的性能,在可比的参数和计算预算下优于 Swin 和 ConvNeXt。
PAROAttn (Pattern-Aware Reorder Attention. PAROAttention 提出了一种简单而有效的模式感知 token 重排序技术,将多样化和分散的注意力值转换为统一的硬件友好的块状模式。它观察到看似多样化的视觉注意力图由多条"对角线"组成,所有这些都表示沿 3D 空间中特定维度的"局部聚合"。
例如,对于形状为
受到视觉注意力模式在不同条件下泛化的经验证据的启发,它采用静态稀疏方案,其中注意力模式是离线确定的。PAROAttention 遵循硬件-软件协同优化的概念,将视觉特征提取的局部性(数值局部性)与硬件计算的局部性(内存和计算局部性)对齐。它设计了一套全面的高效 CUDA 实现,以最小化开销并最大化效率。
Linear Attention
线性注意力通过分解 softmax 函数并利用矩阵乘法的组合性质,将复杂度从
其中
其中下标
然而,将所有历史信息压缩到固定大小的隐藏状态中不可避免地会导致信息丢失。引入遗忘门
这里为简单起见省略了核函数
线性注意力方法可以根据其隐藏状态更新方法进行分类。前三类依赖于
- 朴素线性注意力:没有门控的线性注意力,即
和 都固定为 - 带遗忘门的线性注意力:只有
固定为 ,而遗忘门 是预定义的或输入依赖的 - 同时带遗忘门和选择门的线性注意力:
和 都是预定义的或输入依赖的,而不是固定为
在这些模型中,每一步的隐藏状态