flagos-ai/FlagAttention
A collection of memory efficient attention operators implemented in the Triton language.
解决的问题
FlagAttention 提供了内存高效的注意力运算符,相比标准的 CUDA 实现(如 FlashAttention)更易于修改和自定义。它解决了语言建模中对非标准注意力机制的需求,例如需要针对注意力分数计算、KV 缓存布局或推理路径进行项目特定的定制。
工作原理
使用 Triton 语言实现,该项目通过分块(tiling)和重新计算(re-computation)避免生成完整的注意力分数矩阵,从而显著降低内存占用和内存流量。它提供了多个专用运算符:
- flash_attention:支持 MQA/GQA 和 dropout 的 Triton 版 FlashAttention v2 实现。
- piecewise_attention:用于非线性化位置嵌入(NLPE)的扩展,使用两组查询和键,基于距离阈值计算注意力分数。
- flash_attention_split_kv:专为长 KV 序列设计的分块 KV 快速解码运算符。
- paged_attention:用于推理期间分页 KV 缓存管理的运算符。
适用人群
适用于需要高性能注意力运算符但又需要比现成库更高的灵活性的 AI 研究人员和开发者,或希望对注意力分数应用自定义变换的用户。
亮点
- 基于 Triton:相比原始 CUDA 代码更易于理解与修改。
- 内存高效:通过分块和重新计算减少内存流量和占用。
- 可自定义:特别支持非标准运算符,如用于 NLPE 的分段注意力(piecewise attention)。
- 硬件支持:已在 Nvidia Ampere GPU(A100、RTX-3090)和 Iluvatar CoreX GPU 上完成测试。
- 功能全面:支持 float16、bfloat16、因果/非因果模式以及 MQA/GQA。
相关
- 项目
- Dispatch
- 项目
- 项目
- 项目