Flash Linear Attention 通过提供线性复杂度替代方案,使 Transformer 模型能够处理比以前长数个数量级的序列。
graph LR
subgraph 标准注意力 O(n^2)
A1[Q: n x d] --> A2[K^T: d x n]
A2 --> A3[S = QK^T: n x n]
A3 --> A4[Softmax: n x n]
A4 --> A5[V: n x d]
A5 --> A6[输出: n x d]
end
subgraph 线性注意力 O(n)
B1[Q: n x d] --> B3[phi(Q): n x d']
B2[K: n x d] --> B4[phi(K): d' x n]
B3 --> B5[KV 缓存 = phi(K)^T V: d' x d]
B5 --> B6[输出 = phi(Q) x KV 缓存]
B4 --> B5
B1 --> B7[替代: 状态空间公式]
B7 --> B6
end
| 变体 | 关键想法 | 与 Softmax 的质量比较 | 加速比 (32K) |
|---|---|---|---|
| 线性注意力 | 基于核的近似 | 轻微退化 | 10 倍以上 |
| Retention | 基于衰减的序列压缩 | 可比 | 15 倍以上 |
| GLA(门控线性注意力) | 带选择性状态的门控变体 | 近乎相同 | 8 倍以上 |
| Mamba-2 | 注意力的状态空间对偶 | 可比 | 20 倍以上 |
| 序列长度 | 标准注意力 (GPU 内存) | 线性注意力 (GPU 内存) | 加速比 |
|---|---|---|---|
| 8K | 8 GB | 2 GB | 3 倍 |
| 32K | 128 GB | 8 GB | 15 倍 |
| 128K | 大多数 GPU 内存不足 | 32 GB | 50 倍以上 |
| 步骤 | 操作 | 代码示例 |
|---|---|---|
| 安装 | pip install | pip install flash-linear-attention |
| 替换注意力 | 导入线性变体 | from fla.layers import LinearAttention |
| 配置模型 | 更新 transformer 配置 | attention_type = "linear" |
常见问题
什么是 Flash Linear Attention? 为 Transformer 模型提供高效 CUDA 线性注意力机制实现的开源库。
线性注意力与标准注意力有何不同? 标准注意力有 O(n^2) 复杂度,而线性注意力通过核函数将其降低到 O(n)。
提供哪些性能提升? 在长序列下速度提升 10-50 倍,内存大幅节省。
哪些模型可以受益? 任何处理长序列的 Transformer 模型。
与现有实现兼容吗? 是的,设计为标准注意力模块的即插即用替代方案。
延伸阅读
- Flash Linear Attention GitHub 仓库 – 源代码、文档和基准测试
- 线性注意力调查 (ArXiv) – 高效注意力机制的全面调查
- Retentive Networks (RetNet) 论文 – Microsoft 的基于保留的线性注意力方法
- 高效 Transformer 调查 (ArXiv) – 高效 Transformer 架构概述
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!