FlashQLA: CP-/Bwd フレンドリーな融合線形注意カーネル(GDN 用)

Qwen は FlashQLA をリリースしました。これは Gated Delta Network (GDN) レイヤーの最適化を目的とした高性能線形注意カーネルライブラリです。TileLang 上に構築されており、NVIDIA Hopper GPU 上の FLA Triton カーネルに比べて前方で 2〜3 倍、後方で 2 倍の速度向上を実現し、特に事前学習やエッジ側エージェント推論で効果を発揮します。

GDN チャンク化プリフィルの最適化

FlashQLA は、元の FLA 実装で見られる Gated Delta Network (GDN) のチャンク化プリフィルプロセスにおける 2 つの主要な効率ボトルネックに対処します。

  1. メモリバウンドカーネル: 標準フローは中間変数 ($W, U, S$) を高帯域幅メモリ (HBM) に何度も読み書きし、かなりのオーバーヘッドを生み出します。
  2. GPU 利用率の低さ: State Space Model (SSM) の状態が再帰的であるため、同時に実行できるスレッドブロック数が batch_size * num_heads に制限されます。モデルが小さい、バッチが小さい、または Tensor Parallelism (TP) を使用しているシナリオでは、GPU の Streaming Multiprocessor (SM) がアイドル状態になります。

これらの相反する課題を解決するため、FlashQLA は小バッチシナリオで失敗する完全融合カーネルを回避し、代わりに前方計算を 2 つの融合カーネルに分割し、その間に Context Parallelism (CP) 前処理ステップを挿入します。

主な技術的イノベーション

ゲート駆動自動カード内コンテキスト並列化 (AutoCP)

FlashQLA は、TP、長シーケンス、ヘッド数が少ない設定下で SM の利用率を向上させる自動カード内 CP メカニズムを実装しています。最適な並列度 ($L = \lambda \sqrt{N}$) を決定するために数式モデルを使用し、ここで $N$ はチャンク数、$L$ は CP ランクあたりのチャンク数です。

さらにオーバーヘッドを削減するため、FlashQLA は GDN ゲートの指数減衰特性を利用します。ゲート $\alpha_i \in (0,1)$ を持つヘッドでは、過去状態の影響が指数的に減衰します。FlashQLA は「ウォームアップ」プロセス(通常 6〜8 チャンク)を用いて状態誤差をノイズフロア以下に下げ、コストの高い補正項 $M$ 行列計算を省略し、正確なサブシーケンス $S_0$ を直接取得します。

TileLang ワープ特化カーネル

FlashQLA は TileLang を利用してワープグループ特化カーネルを実装します。このアーキテクチャは同一 SM 内に 1 つのプロデューサー・ワープグループと 3 つのコンシューマー・ワープグループを配置し、共有メモリでデータをやり取りし、mbarriers で同期します。

  • 前方パス: 3 つのコンシューマー・ワープグループがそれぞれ $V'$, $S$, $O$ を計算し、ピンポン構造で計算とメモリトラフィックをオーバーラップさせます。
  • CP 前処理: 単一の融合カーネルが元の $M$ と $S$ の計算、および軽量なスライディングウィンドウ・ウォームアップ手法の両方を処理します。
  • 後方パス: FlashQLA は bwd_dv, bwd_dhu, bwd_dqkwg, bwd_wy を単一カーネルに融合します。オンチップリソースの制約により、メモリトラフィックを隠すために長い計算チェーンに依存し、マルチステージパイプラインは使用しません。

パフォーマンスベンチマーク

NVIDIA H200 GPU 上で FLA Triton および FlashInfer ベースラインと比較したベンチマーク結果は、特に Tensor Parallelism (TP) の度合いが高まるほど大幅な性能向上を示しています。

モデル / TP シーケンス長 $h_{qk}$ $h_v$ FlashQLA FlashInfer FLA vs FLA vs FI
397B/122B TP8 1x32768 2 8 0.310ms 1.653ms 2.95×
397B/122B TP4 1x32768 4 16 0.486ms 1.654ms 2.57×
27B TP2 1x32768 8 24 0.659ms 1.616ms 2.37×
2B/0.8B TP1 1x32768 16 16 0.493ms 1.640ms 2.60×

実装と要件

FlashQLA は、FLA のシグネチャと互換性のある高レベル API と、前方・後方パス用の低レベルエントリポイントを提供します。

システム要件:

  • ハードウェア: NVIDIA SM90 (Hopper)
  • ソフトウェア: CUDA 12.8+, PyTorch 2.8+

コードとベンチマークは github.com/QwenLM/FlashQLA で入手可能です。

Sources