# カーネルオートチューニング
## 定義
カーネルオートチューニングとは、オンライン推論サービスのように入力サイズ(系列長・バッチサイズ)がリクエストごとに変わる状況で、実行時に最適なカーネル実装(標準アテンション対 FlashAttention、GEMM のアルゴリズム変種、タイルサイズ)を選択・キャッシュする仕組みである。手順は一般に「①現在の入力次元を計測 → ②候補カーネルを列挙 → ③少数回のマイクロベンチマークで実測 → ④最良変種を選択 → ⑤ワークロード署名(バッチサイズ・系列長など)をキーにルックアップテーブルへキャッシュ → ⑥実行」という 6 段階からなり、データベースのクエリオプティマイザがクエリプランを選ぶのに類似する。占有率認識カーネル選択(occupancy-aware kernel selection)はこれと密接に関連し、CUDA Occupancy API で SM 上の同時実行スレッドブロック数を測定しながら、共有メモリ量・タイル幅・スレッドブロックサイズを調整する。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 19 Dynamic and Adaptive Inference Engine Optimizations]] §Kernel Autotuning for Transformer Self-Attention and MLP Paths, §Dynamic Shared-Memory Allocation and Occupancy-Aware Kernel Selection)
## 横断的知見
- (今後、他ソースとの突き合わせで蓄積する。現時点では単一ソースのみのため空。)
## 未解決の問い
- カーネルオートチューニングのオンライン探索コスト(マイクロベンチマークの実行時間)は、ウォームアップフェーズでの事前トリガーだけで実運用の分布シフト(新しいバッチサイズ・系列長の出現)を十分カバーできるか。書籍は「非同期ストリームでの裏側テスト」や「低トラフィック時のみ実施」を提案するが定量評価はない。
- CUTLASS・OpenAI Triton の実行時オートチューナーと、cuBLASLt の初回遭遇時オートチューニング(以降固定)は、動的ワークロードに対する適応速度でどの程度異なるか。
- ホットスワップ可能なカーネル実装(ランタイムカーネルパッチ、モンキーパッチ・`torch.compile`・NVRTC)とオートチューニングのループを閉じた「自己最適化カーネル選択」は、書籍では概念的に述べられるのみで具体的な収束性・安全性の評価がない。多腕バンディット等の探索アルゴリズムを用いた場合の後悔(regret)はどの程度か。
## 関連
- 概念: [[並列化戦略]] / [[動的精度切り替え]] / [[Persistent Kernel]]
- ソース: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 19 Dynamic and Adaptive Inference Engine Optimizations]]
- エンティティ: [[wiki/entities/AI Systems Performance Engineering|AI Systems Performance Engineering]]
## 出典
- [[@2025__OReilly__AI Systems Performance Engineering - Chapter 19 Dynamic and Adaptive Inference Engine Optimizations]](§Kernel Autotuning for Transformer Self-Attention and MLP Paths: FlashAttention対標準カーネルの系列長依存切り替え、Table 19-3のタイルサイズ対占有率対スループット、6段階のオートチューニング手順。§Dynamic Shared-Memory Allocation and Occupancy-Aware Kernel Selection: 共有メモリ carveout、CUDA Occupancy API)