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
  • 项目
  • 项目
  • 项目