flagos-ai/FlagAttention
A collection of memory efficient attention operators implemented in the Triton language.
FlagAttention – 高速でメモリ効率の高いAttentionカーネル
概要 – FlagAttentionは、Triton(高性能GPUカーネルを記述するための言語)で記述されたカスタムAttention演算子のコレクションを提供するPythonライブラリです。これらのカーネルは、一般的なFlashAttentionアルゴリズムと同じ機能を実装し、さらにスパース、ページングキャッシュ、区分的、量子化、再帰的Attentionなどの多くの特殊なバリエーションを追加しています。これらは、さまざまなアクセラレータ(NVIDIA GPU、AMD、Ascendなど)上で大規模言語モデルやその他のTransformerスタイルのネットワークを学習および推論するために設計されています。
主要な演算子ファミリー
| ファミリー | 一般的なユースケース | APIエントリーポイント | 勾配サポート | 成熟度 |
|---|---|---|---|---|
| FlashAttention | 標準的な密行列Attention (scaled-dot-product) | flag_attn.flash_attention |
順伝播 + 逆伝播 | 安定 |
| Piecewise Attention | トークン距離に基づく2つのQ/Kペアの切り替え (例: NLPE) | flag_attn.piecewise_attention |
順伝播 + 逆伝播 | 安定 |
| Split-KV FlashAttention | 長いKVデコーディング、低いクエリ並列度 | flag_attn.flash_attention_split_kv |
順伝播のみ | Alpha |
| Paged Attention | ページングされたKVキャッシュ上のシングルトークンクエリ (デコーダー専用モデルで一般的) | flag_attn.paged_attention |
順伝播のみ | Alpha |
| MiniMax M3 Sparse Attention | 128トークンページによるブロック・スパース・プリフィル/デコード | flag_attn.minimax_m3_* |
推論のみ | Alpha |
| Chunk GLA / GDN2 / KDA | 長いシーケンスのための再帰的ゲート線形またはデルタルールAttention | flag_attn.chunk_* |
順伝播 (+ GLAは逆伝播も) | Alpha |
| SageAttention | ブロックごとのINT8量子化Q/K (オプションのマスク付き) | flag_attn.sage_attention.forward |
順伝播のみ | Alpha |
| Parallel NSA | ネイティブ・スパースAttention + 圧縮 | flag_attn.parallel_nsa.parallel_nsa |
順伝播 + 逆伝播 | Alpha |
インストール (クイックガイド)
# Clone the repo
git clone https://github.com/flagos-ai/FlagAttention.git
cd FlagAttention
# Install the editable package with Triton and test extras
pip install -e "[triton,test]"
アクセラレータに対応したPyTorchビルド (例: torch==2.x+cu118) が既にインストールされている必要があります。 正しいビルドはGPUベンダーによって異なるため、このパッケージは特定のPyTorchホイールに依存しません。
最小限の使用例 – FlashAttention
import torch
from flag_attn import flash_attention
B, Hq, Hkv, M, N, D = 2, 16, 4, 2048, 4096, 128
q = torch.randn(B, Hq, M, D, device='cuda', dtype=torch.float16, requires_grad=True)
k = torch.randn(B, Hkv, N, D, device='cuda', dtype=torch.float16, requires_grad=True)
v = torch.randn(B, Hkv, N, D, device='cuda', dtype=torch.float16, requires_grad=True)
out = flash_attention(q, k, v, causal=True)
out.sum().backward() # gradient flow works
関数シグネチャはオリジナルのFlashAttention APIを反映しており、ドロップアウト、ログ正規化項の返却、合計Attention質量、Philox RNG状態のためのオプションフラグが追加されています。
演算子の使い分け
| シナリオ | 推奨演算子 |
|---|---|
| 単一GPUでの標準的な密行列学習または推論 | FlashAttention (安定) |
| 距離閾値後にAttention行列を切り替える必要がある場合 (例: 位置埋め込みのトリック) | Piecewise Attention (安定) |
| クエリが少ない非常に長いKVキャッシュ (デコーディング) | Split-KV FlashAttention (alpha) |
| ページングされたKVキャッシュを保持するデコーダー専用モデル (例: LLMサービング) | Paged Attention (alpha) |
| vLLMスタイルのトークン・スパース・デコーディングなどのブロック・スパースモデル | MiniMax M3 (alpha) |
| ストリーミングまたは非常に長いシーケンスのための再帰的線形Attention | Chunk GLA / GDN2 / KDA (alpha) |
| メモリ帯域幅を節約するためにブロックごとのINT8量子化を行いたい場合 | SageAttention (alpha) |
| オプションの圧縮を伴うネイティブ・スパースAttentionが必要な場合 | Parallel NSA (alpha) |
成熟度とテスト
- リポジトリは
conf/operators.yamlで演算子の成熟度を追跡しています。FlashAttention と Piecewise Attention のみが 安定 とマークされており、その他はすべて alpha であり、APIシグネチャが変更される可能性があります。 - 完全なpytestスイート (
pytest tests) がFP32 PyTorchリファレンスに対して数値精度を検証します。精度許容誤差はFP32誤差の約2倍で、小さな絶対マージンが設定されています。 - ベンチマークは
benchmark/に提供されており、ヘルパースクリプトtools/run_tests.pyまたは直接実行 (例:python benchmark/flash_benchmark.py) で実行できます。結果はFlagGemsプラットフォームと互換性のあるJSONとして出力されます。
サポートされているハードウェアとバックエンド
- プライマリ: NVIDIA CUDA GPU (Triton経由)。このライブラリには、AMD、Ascend、Enflame、MetaX、MThreads、Intelなどのベンダー固有のバックエンドも含まれています。バックエンドの選択は検出されたPyTorchデバイスに基づいて自動的に行われますが、すべての演算子がすべてのベンダーで実装されているわけではありません。詳細は
conf/operators.yamlおよびsrc/flag_attn/runtime/backendディレクトリを参照してください。 - CPU: パッケージをインポートしてメタデータを検査することはできますが、GPU互換のランタイムなしではカーネルを実行できません。
詳細情報
- ドキュメント – README自体に完全なAPIリファレンス、インストールノート、および
examples/下のサンプルスクリプトが含まれています。 - テストとベンチマーク – 具体的な使用パターンについては
tests/を、パフォーマンス数値についてはbenchmark/を参照してください。 - ベンダー固有の拡張 – 低レベルの実装については
src/flag_attn/runtime/backend/_<vendor>を参照してください。
まとめ
FlagAttentionは、研究者やエンジニアに幅広いTransformerワークロードのための高速でメモリを節約するAttentionカーネルを提供する、実用的な本番グレードのライブラリです。その安定したFlashAttentionおよびPiecewiseAttention APIは、学習ループ内のデフォルトのPyTorch Attentionを置き換えることができ、Alpha演算子は高度なLLMサービングや研究のために、ページングキャッシュ、ブロック・スパース・デコーディング、量子化カーネル、再帰的線形Attentionなどの実験的機能を提供します。
関連
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト