AI News HubLIVE
サイト内リライト2 分で読了

TileLangによる高性能GPUカーネルの設計:テンソルコアGEMM、融合Softmax、FlashAttention、自動チューニング

TileLangは、高性能GPUカーネルの設計を簡素化する高レベルPythonドメイン固有言語です。このチュートリアルでは、タイリングされたテンソルコアGEMM、融合ソフトマックス、FlashAttentionなどの複雑なワークロードを、コンパイラがスレッドマッピング、メモリレイアウト、低レベルCUDA命令生成を処理する方法で実装する手順を示します。

ソースMarkTechPost著者: Sana Hassan

TileLangは、TVM上に構築された高レベルPythonドメイン固有言語(DSL)であり、高性能GPUカーネルの設計とコンパイルを簡素化します。本チュートリアルでは、CUDA環境の確認から始め、再利用可能なベンチマークと数値検証ユーティリティを構築した後、ベクトル加算、タイリングされたテンソルコア行列乗算(GEMM)、スケジュール探索、融合GEMMエピローグ(バイアス加算とGELU活性化関数)、行方向ソフトマックス、FlashAttentionを段階的に実装します。各実装では、TileLangの共有メモリタイル、レジスタフラグメント、パイプラインドループ、並列反復プリミティブ、リダクション、テンソルコアGEMM演算子を直接使用し、スレッドマッピング、メモリレイアウト、同期、ベクトル化、低レベルCUDA命令生成などの複雑な詳細はコンパイラに任せます。さらに、PyTorchやcuBLASベースラインとの性能比較、生成されたCUDAソースの確認、メモリおよび計算スループットの評価、自動チューニングによるアーキテクチャ依存の最適カーネル構成の特定も行います。このチュートリアルでは、TileLangを使用すると約20行のPythonコードでcuBLASに近い性能の行列乗算カーネルを実現できることを強調しています。複数の演算(GEMM+bias+GELUなど)を融合することで、中間データのグローバルメモリ読み書きを削減し、効率が大幅に向上します。例えば、4096×4096×1024の行列において、融合カーネルはPyTorchの3ステップ実装と比較して約2倍の高速化を達成し、HBM帯域幅を大幅に節約します。行方向ソフトマックスカーネルは8192×1024の行列でメモリ帯域幅の限界に近いスループットを実現し、2パスのリダクションは完全にレジスタ内で行われます。FlashAttentionの実装には因果マスクのサポートが含まれており、オンラインソフトマックス更新アルゴリズムにより中間アテンション行列の保存を回避します。これは長いシーケンスのTransformerモデルにとって重要です。また、チュートリアルではタイルサイズ(128×128×32など)、パイプラインステージ数、スレッド数、L2スウィズルを手動で調整してスケジュール空間を探索する方法も示し、最適な設定はアーキテクチャと行列形状に依存することを指摘しています。最後に、TileLangの自動チューニング機能を紹介します。これにより、手動で複数の組み合わせを試すことなく、特定のGPUアーキテクチャ(SM 8.0や9.0など)に最適なタイルサイズ、ステージ数、スレッド数を自動的に探索し、ハードウェア限界に近い性能を達成できます。結論として、TileLangはGPUプログラミングに高レベルの抽象化を提供し、手動で大量のCUDAコードを書くことなく、コンパイラが面倒な低レベル操作を自動化しつつ、チューニングによる柔軟性も保持します。