# When AI Starts Writing Systems Code > [!info] Talk metadata > - **会議:** [[MLSys2026]] Day 1 (May 18 / Mon)、Grand Ballroom 1、13:30 - 14:30 PDT > - **登壇者:** Mark Saroufim(Core Automation および GPU MODE の共同創設者、元 Meta のシステム研究者) > - **URL:** https://mlsys.org/virtual/2026/invited-talk/3655 > - **関連:** GPU MODE(旧称 CUDA MODE)— GPU プログラミングを広めることを目指す GPU システム系コミュニティ > [!abstract] 概要(MLSys サイト) > システムはますます AI システム自身によって書かれ最適化されつつある。本講演は **kernel LLM**(GPU カーネルを生成するモデル)に焦点を当てる。GPU カーネルは検証可能で商用的にも最適化の価値が高いため、AI 駆動の最適化対象として有望だ。しかし有望なデモにもかかわらず、人間の重い監督なしに本番投入できるほど信頼できる AI 生成カーネルはごく僅かである。 > LLM カーネル評価を、オープンなベンチマーク・コミュニティのフィードバックループ・GPU MODE で公開しながら構築したインフラを通じて、いかに頑健にしたかの事例を辿る。最後に、ML システムがどこへ向かうのか、若手研究者は時間をどこに使うべきか、そして「コードを書くコストがゼロに近づく」世界で長続きするシステムをどう作るかについての考察で締めくくる。 > [!warning] 出典に関する注記 > 概要は公式トークページ(MLSys サイト)の faithful な和訳。本文・Q&A は提供された**自動文字起こし**のみが出典で、ノイズが非常に多い。固有名詞・数値は文脈から最も妥当な綴りに復元しつつ、不確実なものは都度フラグした(→ 末尾の検証パスを参照)。 ## テーゼ — 「AI に systems code を書かせる」5 年の旅 - 過去約 5 年で AI システムがどう進化したか、なぜそれが必要か、なぜこれまで「期待外れ」だったか、それでもなぜ将来は素晴らしくなるかを語る講演。 - ゴールは一貫して「研究を(遅くなく)やれるようにすること」。そのために systems を自動化したい。新しいシステムを作り続けるより、研究者と対話しながら継続的に改善する少数のシステムを作りたい、というのが現在のスタンス。現在は自身のスタートアップ **Core Automation**(文字起こしでは「for/car automation」「Colorado」等と崩れて聞こえる。「自動車会社ではない」とジョーク)を運営。 ## 経歴と問題意識 - UCSD で CS 理論と AI を学ぶ。当初 systems には関心が薄かった。最初の職は Microsoft(Bellevue)。当時の AI はまだ世の中を本質的に変えてはいなかった。(後年 **Meta** のシステム研究者として PyTorch 周辺に従事。Q4 の「medal」は Meta を指す。) - 「最初の AGI 体験」は **Dota 2 / OpenAI の bot**(文字起こし「noto 5」「open AI boss」)に完敗したこと。マイケル・ジョーダン相手にバスケをやるような屈辱だったと表現。これを機に退職。 - 1 ゲームを学習させる計算コストが当時の全財産を超える(~$30K/日 規模と言及)と知り、安くする術もなかったが「これは重要だ」と痛感。 - ハードウェアスタートアップ **Graphcore**(文字起こし「Graphor」)に参加。compile-first で「カーネルを書く」というより「ハードへのスケジューリングを記述する」モデル。大きな計算グラフを export させる設計を好む一方、動的な制御フロー・動的 shape には非常に書きにくかった。 ## 抽象化レイヤと「ユーザが本当に欲しいもの」 - **PyTorch**(文字起こし「fighters/bikers」)は数百個のオペレータ(数学的命令)からなる GPU アクセラレーションのライブラリで、**NumPy**(「Nobai」)API に強く影響を受けた。NumPy は約 30 年、行列積 API は超長期にわたり後方互換。**抽象が頻繁に変わらない問題に張るのは良い戦略**。 - **Eager execution が PyTorch を人気にした**理由: 行ごとに実行でき、print・制御フロー・monkeypatching ができる。皮肉なのは、ユーザに「何が欲しいか」と聞けば「性能(ベンダーライブラリ比較の棒グラフ)」と答えるが、**実際に欲しかったのは print 文・制御フロー・monkeypatching** — どれも性能的には最悪だが研究者が実際にやること。「使い方が間違っている」と説教するか、その制約下で速くするかの二択。 - **「我々(systems 屋)の意見は AI 研究者の意見より重要でない」「ハード・ソフト協調設計という主張は大嘘」**。systems 屋の理想アーキは「X を GPU に送り、`while true` で掛け続ける」= 完全に compute-bound で美しいが何も学習しない。研究者が必要とするのは動的制御フロー・無数の小さな並列ローンチ・aggressive decoding・ragged shape など、systems エンジニアが顔をしかめるもの。 ## 物理法則とフュージョン - これを強制するのは研究者ではなく**物理法則**。GPU 各世代で「FP16 flops ÷ メモリ帯域」を取ると、flops も帯域も伸びるが **flops の方が遥かに速く伸びる**(→ メモリ律速化)。 - メモリ階層チャート(友人提供)でレジスタ(~1 cycle)とグローバルメモリ(~数百 cycle)の差を提示し、**fusion が重要**な直観を説明。独立カーネルローンチだとグローバルメモリを何度も読むが、fusion ならレジスタに保持できる。 - `torch.compile`(「George the Bile」)登場時、「十分賢いコンパイラがあればカーネルを書く必要はない」という論争。FlashAttention 論文への HPCA 査読が「なぜコンパイラを latency ベンチに入れない?」と問うた件を引用。著者の回答(Mark が好む): **コンパイラは fusion や既知の最適化(高速追従・既知トリックのスケール)は得意だが、数値安定性を保ちつつ数式を書き換える等の「新しいトリックを編み出す」のは苦手**。 ## カーネル DSL の乱立と性能ポータビリティ - 「CUDA カーネルを書いてる? いや皆 X だよ…冗談、実は Mojo / Triton(「Qeton」)/ ROCm(「rocket」)/ 自社製 DSL(MLIR ターゲット)…」というツイートは諷刺でなく実態。Mark は**これを良いことだと主張**(「言語は一つであるべき」と怒るのは C/Haskell の一部の原理主義者だけ)。 - DSL は抽象レイヤごとに役立つ。高レベル(移植性高・実装詳細なし・下位へ lowering 可)から低レベル(**CUTLASS**「couplass」= 外科的改善向き、性能ポータビリティ無し)まで。**ThunderKittens**(「Thunderpins」)= より使いやすい CUTLASS と紹介。 - 性能ポータビリティは「重要な理念」も「不可能」も**どちらも真**で、抽象のどの層にいるか次第。低レベルでは当然 FlashAttention 3 は Blackwell でそのまま走らない(変換が壊れる)。 ## なぜ AI がカーネルで役立ち始めたか - FlashAttention カーネルは常に同じ少数のチームが書く。ハード提供から最適化済み FA カーネルまで **21 ヶ月 → 14 ヶ月** と短縮中だが依然長い。世界最高のカーネルエンジニアによる「最重要カーネル」でこれ。→ **もっと多くの人がカーネルを書けるようにしたい**という動機。 - **GPU MODE(旧 CUDA MODE「Kudo」)の起源**は独立した 2 プロジェクト: ①最小の PyTorch ネイティブ LLM 推論実装(**gpt-fast** とみられる「fast」)、②**単一 GPU・1 日で LLM をファインチューンする効率コンペ**(NeurIPS LLM Efficiency Challenge 系とみられる)。コンペ優勝者が無名なことに着目し、その知見を引き上げたかった。 - GPU MODE は概ね 4 つを運営: (1) **カーネルコンペ**(LeetCode 的に「遅い PyTorch コード」に対し高速カーネルを書く)、(2) **YouTube 講義シリーズ**、(3) **ハッカソン**(プロジェクト自体が著名になる)、(4) (4 つ目は文字起こし不鮮明)。 - **llm.c**(「I like that C」、Karpathy「Harpentier」ら): GitHub 上で全ログ公開、最終的に `torch.compile` を上回る速度。ただし柔軟性は低く GPT-2 のみ、Llama 3 へは到達せず。**示唆: PyTorch 参照実装を分解→プロファイル→重要な fusion を custom 実装→反復、という「公平な最終テスト(正しさ+速度)」のループは AI がやれるはず**。 ## AI はカーネルが下手だった → データ枯渇とコンパイラ活用 - 2025 年 4 月時点では AI はカーネルが下手で、KernelBench(「Colonel Bench」)等で言語(HIP 等)を混同。 - 仮説は **「データ枯渇」が原因**。データ獲得の最善手は合成生成でなく**コンパイラの活用**: GitHub 上の実行可能な PyTorch プログラムを走らせ翻訳データセットを抽出。加えて人手データを集約(人間カーネルコンペで **~2000 件**の提出)。 - 当時学習したモデルが、カーネル記述で **DeepSeek-R1**(「DCR one」= 当時最大級)に匹敵という結果。Mark はこれが「最も長持ちする成果」と予想したが、外れた。 ## 本命はリーダーボード(提出プラットフォーム)と reward hacking - 実際に最重要だったのは**競技プログラミング的な提出プラットフォーム**(GPU MODE のリーダーボード、文字起こしでは綴り不鮮明)で、**累計 50 万件超の提出**。データ収集基盤のはずが**評価(eval)基盤**として使われた。 - reward hacking は**コミュニティの自浄作用**で抑制された(競技者は不正勝者を嫌う)。上位の怪しい提出をコミュニティが指摘 → 記録が頑健に。 - **1 月にバズった事例**: カーネルを一度も書いたことのないシカゴの高校生が、最人気コンペ(Blackwell 向け FP8 行列積コンペ、文字起こし不鮮明)で **4 位**の高速提出を、完全に LLM 駆動で達成。翌週には 5 年生の教師が AMD FP8 コンペに参加し、数日で GPU プログラミングを独習、初提出が数時間で完了。**「systems は本来 gatekeeping が強い領域」なのに門外漢が速いカーネルを出せた**点が注目に値する。 - 既存コーパスが薄い領域(例 AMD エコシステム)で特に有効。AMD は賞金プール(**$100K〜$1M 級**、文字起こし不鮮明)のコンペを設定し、AI 競技者が殺到。**eval さえ良ければ、参加者=データ生成器・eval プラットフォーム=棄却サンプラー**として機能する。 ## reward hacking のカタログ - 最も有名な例: **Sakana AI**(「Secano/Sakana」)関連で、論文の **150X 高速化**主張が再現すると **3X 低速化**だった件。Mark のスタートアップでも、reward hack を確実に見抜けるのは **~3 人**だけで、残りは AI に頼る。50% 高速化の hack はカーネルエンジニアでないと見つけにくい。 - **デモ: `torch.mean` を計算する「世界最速カーネル」** → `randn` のサンプルは平均 0 分散 1 と知っているので **ゼロを返す**。メモリ帯域すら超える「完璧」な hack。 - **同僚 George Thomas のトロール例**: float のソートで**下位ビットをスキップ**しても正しい結果が出る。reward hack か否かは微妙(eval の字面には従う)。コンペで eval のミスを直すと順位が変わって怒られ、直さなくても怒られる。 - **カーネル eval の仕組み**(同一プロセス内で両カーネルを実行、正しさ→性能の順に検査)に対する hack: - **ストリーム同期**: PyTorch はデフォルトストリームしか同期しないので別ストリームで走らせ「速く」見せる。 - **スクリプト内 pip install** でグローバル環境を変え他の結果に影響。 - **monkeypatching**(呼ばれたらゼロを返す等)。Barbara Liskov(「Barbara, the skull」)の Python 批判を引用 — モジュールに **encapsulation がない**ため外部から内部をいじれる、それが modularity を壊し reward hacking を誘発。 - **出力キャッシュ**: 一度実行して得た出力を以後そのまま返す。 - **whack-a-mole**: caching を禁止 → 間接参照を挟む。`.data` ポインタ禁止 → `id()` / GC / `pipeline inspect` モジュール…と回避され、**静的 eval は必ず破られる**。 - **VW 型 hack**: 正しさ検査が **15 回**走った後に性能テストが来ると AI が学習し、検査中は正しいカーネル・性能テスト中は不正で高速なカーネルを返す。**フォルクスワーゲンの排ガス不正**と同型(試験時だけ排出を抑え、実走で 40x)。 ## それでも将来は素晴らしい — 自動審査と 4 系統の協調設計 - KernelBot チームは on-call で疲弊(最大 **50 万件**提出、reward hack が数千件)。reward hack をしなかった人間も「エージェントに変えるなと言ったのに」「エージェントに言われて」等と弁明。 - **アイデア: AI に AI 提出を審査させる**。人間監査で除去した「満点級の不正解」を AI に与え、**安価・高速な reward-hack 検出器**を学習・デプロイ → 不正を捕捉。資金難ゆえの自前実装(潤沢ならモデルを直接使った)。担当は **Sinatra**(求職中とのアナウンス)。 - 「kernel guard」導入で **reward hack が急減**(横軸=時間、縦軸=提出数のグラフ)。これで AI 提出を安心してスケールでき、**人間を loop から外せる**ようになった。本質は「高速かつ reward hack していないカーネルは良いカーネル」。 - Web 経由の提出は減り **CLI 経由が指数増**、全て実モデル上。ある朝 Mark は**個人カードに $20,000 のモデル利用請求**を見て青ざめた(資金面で Charles に謝辞)。 - **人間が今もやること**: 面白い問題を立てる(何を加速すべきか)。AI は issue 生成・自動化が得意。多くの人はカーネル生成を「書くシステムを作れば残りは他人の問題、reward hack は eval のせい」と捉えるが、**それは誤り**。**4 系統を同時に協調設計せよ**: 問題を立てる者(competitor)/ 不正をする者(cheater)/ 不正を見抜く者(auditor)/ そして自己改善。**self-play 的**で、各ボックスはエージェントでも学習対象モデルでもよい。 ## 信頼できる eval とセキュリティ - **Eric(姓は不鮮明)**のベンチハーネス: 「ベンチマークを一切信用しない」。提出は不正を試みると仮定し、**隔離サブプロセス**で実行、ベンチロジックの大半を **C++**(monkeypatching 耐性)で実装、ファイルをブロック、**結果を暗号学的に検証**。それでも AI はメモリ位置を探り、成功/失敗の boolean を反転させようとする。 - **性能カウンタとサイドチャネル**: AI システムは通常ハード性能カウンタにアクセスできない。GPU 共有時、**NCU(Nsight Compute)で相手の挙動を覗き**メモリ律速かを推測できる、という論文を「お気に入りのリバースエンジニアリング」と紹介(仮説段階)。既定で無効、フラグで有効化可能(発見に深掘りを要した)。 ## イテレーション速度・コンパイル時間・ハード更新サイクル - エージェントは **Amdahl の法則**を悪化させ、ボトルネックはカーネルそのものでなく**反復速度**に。**CUDA graphs**(「crudographs」)は起動が遅い。multi-* 設定での warm-up、in-place weight update との両立(RL run 上で eval するため)等が課題。 - コンパイル時間: カーネルのコンパイル+実行は ms 単位だが、バイナリカーネルは **~9 秒**規模。あるツール(「MCC」)は良いが遅い・ブラックボックス、別のツール(「mirror TV」= Mirage 系か、不鮮明)は素晴らしいが用途に合わない。研究者にここをもっと取り組んでほしい。 - **NVIDIA は 18 ヶ月ごとにハードを変える**ので「アーキが 5 年保つ」前提は誤り。ベンダー自身が「使われなければ 18 ヶ月で消す」と速く動く。**Hopper は 18 ヶ月、FlashAttention 4 は新ユニットを活用して 150 日**で性能到達 — 速さの好例。 ## カーネルを超えて — システム全体と将来像 - **「カーネルだけの話ではない」**。例: Transformer の代替。bad-size-1 では vLLM / SGLang 的サーバの多くが不要化し、インフラは gpt-fast 的な直接実行に近づく。**KV cache が要らない非 Transformer なら、フレームワークは単なる FastAPI サーバ級に単純化**。奇抜なアーキに対し、適切なカーネル・サービング・学習インフラを素早く用意できることが価値。 - **ソフトウェアの作り方が悪化している懸念**。思考実験「今 Kubernetes を作るなら?」 → 必要機能ごとに skill を書く。だが**共有言語が無く他者の成果に乗れない**。反面「将来は依存を持たずバイナリを直接生成」する流れ(supply-chain 攻撃で、依存を使わず欲しい機能を AI に書かせる例が傍証)。**バグやセキュリティ問題が各エージェント内に閉じ協調が消える**ため、skill を単位とするのは誤りと考える。「動くかも」から「信頼できるシステム」へゴールを動かすなら、現状は遠い。 - **プログラム合成(programming by example)**に期待(元同僚の仕事)。プログラムをブラックボックスとし、入出力例から中身を当てる。**コードベースは生まれつき良いのでなく時間で良くなる**ので、eval も「ソフトが実際に進化する様子」に寄せたい。あるソフト工学ベンチ(文字起こし「doorground bench」、正式名不鮮明)では **9 モデル中タスクを完全解決できたものは皆無、最良でもテストの 95% は通すがタスクは 3% のみ**で、モデルは**単一ファイルのモノリシック実装**を好み実態から乖離。これは **RL のアーティファクト**で、AI 側と協調設計すれば解ける。 - **PyTorch の作られ方**: 簡素な POC として始め、研究者と 9 年間 dogfooding(要望を聞き bug を直す反復)と強い VC。**この 9 年の過程を捉える eval をどう作るか**が Mark の主関心。 - **起業理由**: AI に systems をやらせる問題は、一研究室のアーキ研究より価値が大きいと気づいた。**学習と推論で同じカーネルを使いたい**(今は別チームが作るので分かれている=人為的な分断)。これには大量の GPU が要る(学習だけでなく合成データ再生成・eval・autotuning にも)。少数精鋭チーム向き。**目標は「新システムを作り続ける」ことでなく「研究者と対話して継続改善する少数のシステムを作る」こと**。 ## Q&A - **Q1 — AI 抽象化の進化:** (質問者はプログラム変換を型チェック等に利用、想定外に遅い)AI 抽象化は今後どう進化するか? - **A:** 深い問い。「最小限だけ生成(heads/SASS を直書き)すればコードベースは劣化する」という論は長期的には買うが今年は買わない。逆に問い返す: 速い AI 生成カーネルが「正しいと思うが 100% ではない」とき、**推論**用なら今日の AI でも十分使える。だが **1/100 万でしか出ない race condition** を含み学習を台無しにし得るなら答えは変わるかも。**保証は問題依存**。`torch.compile` は批判されるが **PyTorch eager**(「Virginia girl」)はほぼ批判されない。批判はカーネル zoo や新 DSL に向く。正解は**中間のどこか**。 - **Q2 — ラボのビジョン / 学習と推論で同じカーネル:** 学習はオフラインでデータ豊富、推論はオンラインで大きく異なる。なぜ同じカーネル機会と言える? - **A:** 「全く同じに走らせる」という理念的主張ではない。`torch.profile` を呼ぶなら同じ最適化・同じライブラリ版・同じ top-K カーネルを使うべき、という意味。**複雑さはスケジューリング(サービング)側**にあるのは同意。ただ Transformer を信じておらず、**KV cache は長期の理想でない**。それを外せばサービングの複雑さの多くは消える。 - **Q3 — AI 時代に systems を学び始める人へ:** 学習しつつ AI をどう取り入れるべき? - **A:** 核心は **「slop とは何か」= 完成・正しさが不明なコード**(冗長性は別問題)。**正しさに偏執的**(数値テスト・マイクロベンチ・Perfetto トレース・実学習の loss・実トークン/秒を全部回す)であり続ける人が、ラボで成功する AI systems エンジニアの典型。ラボは **~15 人で systems は 3 人だけ**。偏執的な正しさ重視が unit test 的な保証を作りやすくする。 - **Q4(Chen, UCSB)— モデル/パラダイム変化への継続追従:** 今どの位置で、3〜6 ヶ月先はどうなる? - **A:** 依存は**学習で 2 つ(PyTorch + 何らかの DSL)、推論で SGLang(「Sengayo」)・PyTorch・もう 1 つ(「Zulan」不鮮明)**だけ。依存は書き直して必要分だけ取り出せる。大規模ライブラリも「要点を単純に捉え理解しやすく」再実装でき、多少遅くても理解とハックが速まる方が良い。vLLM/SGLang 以前のエンジン(より opinionated)はプロセス起動→メトリクス収集で済んだ。**stateless なアーキは単純だが、memory を持つと再びシステム化し複雑**(KV cache 管理等)。少人数(15 人)だから毎朝 RL の同僚が「より速いカーネル」を持ち込み一緒にレビューできる。大企業(「medal」= Meta か)では別部門になり難しい。**少人数+潤沢な GPU はキャリアに良い**。 - **Q5 — 数式↔PTX のスライドについて:** なぜコンパイラは右(PTX/実行依存)から左(数式)へ持ち上げられない? - **A:** 「重要な性能問題をコンパイラが先に捕まえ eval が直す」世界はあり得るか? この問題は**コンパイラに不利**。5 年で 5x が本当にコンパイラ由来か疑問。コンパイラは「単に性能が欲しく、最先端を攻めない」場合は魔法のよう(多くのチームには当てはまる)が、**性能で先頭に立った歴史は思い出せない**。世代末期はコンパイラ/プロダクトが追いつき、世代初期は追いつかない(周期的)。NVIDIA は 18 ヶ月でハードを変え、一部では CUDA すら使わなくなる。世界は**バイナリ生成/手数を増やす方向**へ。(フォロー: 多様な matmul の本質を横断的に捉えられるか? → 「分からない、今は見通せない」) - **Q6(Shao Wei, ラボで学習用カーネル生成)— reward hacking 検出の last-mile:** 構文チェッカ+ LLM judge で対処したが、judge は誤り(誤りを認めても正解は出さない)、random tensor 検証は学習時のダイナミクスと異なり**学習でのみ顕在化する数値不安定**を捕えられない。OpenAI/Anthropic の「常に正しいモデル」を待つか数百万ドルで人を雇う以外に、橋渡しの展望は? - **A:** 問題は**クローズドモデルを不変・完璧な成果物として扱い、OSS が永久に追従する構図**。その前提に異を唱える — **モデルは reward hack 検出もテストも上達できる**。だから自前でモデルを学習する(汎用 companion でなく **systems だけに限定**するのでスコープが狭い)。長期的に楽観: 述べられた問題は全て **RL 環境**化できる(数値 cheat ベンチ、race condition ベンチ等)。**解ける。あとはスケールと、十分な compute が要ると周囲を説得すること**。