概要
- AI生成による CUDA-Cカーネル がPyTorchの最適化カーネルを上回る性能を実現
- CUTLASSやTriton などのライブラリやDSLを使用せず、純粋なCUDA-Cで開発
- KernelBench ベンチマークで多様なMLオペレータに対して高い最適化効果を確認
- 並列的なアイデア探索と自然言語推論による新しいカーネル最適化手法の紹介
- 今後の課題と展望として、FP16やFlash Attentionなど更なる性能向上を目指す
驚異的な高速AI生成カーネルの早期公開
- PyTorch標準カーネル と同等またはそれ以上の性能を示すAI生成CUDA-Cカーネルの実現
- 代表的な結果
- Matmul (FP32): torch.matmul比101.3% (4096x4096行列)
- Conv2D: torch.nn.Conv2D比179.9% ((100, 3, 224, 224)入力)
- Softmax: torch.softmax比111.8% ((4096, 65536)入力)
- LayerNorm: torch.nn.LayerNorm比484.4% ((16, 64, 256, 256)入力)
- Conv2D + ReLU + MaxPool: torch参照比290.1%
- Nvidia L40S GPU 上でベンチマークを実施、%性能=参照時間÷生成カーネル時間で算出
研究の背景と驚き
- 合成データ生成 を通じたカーネル生成モデルの訓練が当初の目的
- 予想外にテスト時の合成データ生成で 高性能なカーネル が生成
- 高度な最適化 やハードウェア機能を活用し、人間専門家の手書きカーネルに匹敵
- 本記事は新規手法の提案ではなく、 シンプルな設計 による驚きの成果の共有
- 5つの最適化カーネル と最適化過程、今後の展望を紹介
手法概要
- KernelBench (2024年12月リリース)のタスクセットアップを利用
- torchコードをもとにLLMがカスタムカーネルを生成し高速化を目指す
- 参照はデフォルトで FP32、許容誤差1e-02で低精度も許容
- 問題ごとにサイズを固定し、 サイズ特化最適化 を評価
- 参照コードと生成コードをランダム入力で 数値一致検証
- 一般的な最適化ループ
- モデルがカーネルを逐次修正し、 正しさと性能を検証 しながら改良
- アイデアの多様性不足や 局所最適化 への陥りやすさが課題
新しい最適化アプローチ
- 自然言語による最適化アイデア生成
- 各ステップで直接カーネルを生成せず、自然言語で 最適化アイデア を出力
- そのアイデアから新たなコードバリアントを実装
- 各ステップでの分岐探索
- 1ステップごとに複数の実装を生成し、 最良カーネルを次ラウンドのシード に
- 大規模並列探索 により多様な方向性を同時に模索
- 結果: 構造化された探索的最適化ループ を実現し、従来よりも新規性の高い最適化案を発見
最適化戦略の主なカテゴリ
- メモリアクセス最適化 :データ移動効率向上、帯域幅最大化
- 非同期処理・レイテンシ隠蔽 :計算とメモリアクセスの重畳
- データ型・精度最適化 :FP16/BF16利用による帯域幅削減
- 計算・命令最適化 :算術計算効率化、特殊命令活用
- 並列性・オキュパンシー向上 :SM上のアクティブワープ数最大化
- 制御フロー・ループ最適化 :ループや分岐のオーバーヘッド削減
Conv2Dカーネル最適化の例
- torch参照基準:1.41ms
- ラウンドごとの最適化案と性能推移
- CUDAカーネルへの単純置換、 7.02ms(20.1%)
- Read-onlyキャッシュ利用、 7.54ms(18.8%)
- FP16 Tensor-Core GEMM変換、 3.46ms(41.0%)
- cp.asyncによるダブルバッファリング、 3.67ms(38.7%)
- 既存の良好なGEMMカーネルをシードに、 3.46ms(41.0%)
- k_idx分解インデックスの共有メモリ事前計算、 1.91ms(74.9%)
- N次元GEMMインデックスの共有メモリキャッシュ、 1.37ms(103.6%)
- ワープ単位の共有メモリバッファによる出力並列化、 1.38ms(102.9%)
- 入力座標の共有メモリキャッシュ、 1.37ms(103.6%)
- Bフラグメントのソフトウェアパイプライン、 1.36ms(105.1%)
- N次元GEMM分解の出力アドレス計算再利用、 1.07ms(133.6%)
halfWMMAのhi/lo分解省略、 1.21ms(117.4%)- Kループのダブルバッファリング、 1.01ms(141.2%)
- half2によるベクトル化共有メモリ書き込み、 0.795ms(179.9%)
- 最終コードは高度なCUDA技術を駆使し、手書きが困難なレベル
考察と今後の展望
- 強力な 推論力 と 並列探索 の組み合わせが最適化を大きく前進
- AlphaEvolve や Gemini 2.5 Pro Deep Think の示す通り、賢い探索と分岐戦略で大規模再学習不要な場合も
- 本手法は 合成データ生成 の質向上にも寄与し、今後のモデル訓練にも有用
- 依然として課題も存在
- FP16 Matmul: torch.matmul比52%
- FP16 Flash Attention: torch.nn.functional.scaled_dot_product_attention比9%
- FP32 は近年のハードウェアで最適化が遅れがちで、FP16/BF16対応の最適化が今後の焦点
- 探索予算が限られる中でも着実に性能向上 を実現し、AIによるカーネル最適化の将来性に期待
まとめ
- AI生成カーネルが既存の専門家最適化カーネルに匹敵、もしくは凌駕
- 自然言語推論+並列分岐探索 による新しい最適化アプローチ
- 今後はFP16/Flash Attentionなどさらに難易度の高いカーネル最適化に挑戦予定
- AIによる自動カーネル生成と最適化の実用化 に向けた大きな一歩