コード生成の次は、生成したコードを小さく速くする段階です。
Meta AIの研究では、LLVMのアセンブリ中間表現(IR)を大量に学習した7BパラメータのLLMが、コンパイラ標準の最適化設定を上回る結果を出しています。命令数を3.0%削減し、生成コードの91%がコンパイル可能、70%がコンパイラ出力と完全一致しました。数千回の試行コンパイルなしで、従来の機械学習ベースラインを上回った点が注目されます。
この記事でわかること
- MetaのLLMコンパイラ最適化研究の仕組みと評価結果
- パス順序予測と補助学習タスクが性能に与える影響
- コード生成AIの次の段階としての低レベル最適化の意義
コンパイラ最適化にLLMを当てる背景
https://arxiv.org/abs/2309.07062
LLM(大規模言語モデル)は、PythonやC++のコード補完や生成に広く使われています。一方、コンパイラ最適化への応用は、ChatGPTがレジスタ指定程度の微修正にとどまるなど、未開拓の領域でした。
コンパイラ最適化は、命令の並べ替えや不要な処理の除去など、数千のルールとヒューリスティックが絡み合う複雑な処理です。LLVMの最適化パイプラインだけでも100万行超のC++コードで構成されています。従来の機械学習アプローチは、プログラムを数値特徴量やグラフに変換する過程で情報が欠落し、汎化にも課題がありました。
Meta AIのChris Cumminsらは、テキストそのものを入出力とするLLMなら、ソースコードを欠落なく表現できると考え、LLVM IRの最適化に挑戦しました。論文「Large Language Models for Compiler Optimization」(arXiv:2309.07062)に成果がまとめられています。
何を学習させたのか
研究の対象は、LLVMの最適化パス順序の選択です。コンパイラは122種類の最適化パスを組み合わせてコードを変換しますが、どの順序で適用するかで命令数や実行速度が大きく変わります。探索空間はおよそ10の18乗通りに及びます。
モデルはLLaMa 2と同じ7Bパラメータのトランスフォーマーアーキテクチャを、ランダム初期化から一から学習しました。訓練データは100万件のLLVM IR関数で、手書きのC/C++コードとコンパイラテスト用の合成コードから抽出されています。合計3億7300万トークンです。
各関数について、オートチューナーが平均3万7424回コンパイルして最適なパス順序を探索し、その結果を教師データにしました。オートチューナー単体では命令数を5.8%削減できますが、訓練データ生成だけで9016 CPU日を要しています。
モデルの入出力と補助タスク
モデルへの入力は、最適化前のLLVM IRです。出力は3つあります。
- 最適化パスのリスト
- 最適化前後の命令数
- 最適化後のIRコードそのもの
本番運用では、パスリストだけをコンパイラに渡して実行します。生成されたIRコードをそのまま信頼する必要はなく、コンパイラの変換パスを経由するため、意味の正しさが保証されます。論文の著者も、3.0%の改善はパス順序の予測によるものであり、生成コードの直接利用ではないと説明しています。
補助タスクとして最適化後コードの生成を学習させると、パス順序の予測精度が16%向上しました。IRの意味を深く理解させることが、最適化判断の質を高めています。
数値が示す性能
10万件のテストプログラムでの大規模評価結果は次のとおりです。
| 手法 | 追加コンパイル回数 | -Oz比の改善率 |
|---|---|---|
| オートチューナー | 約25億回 | 5.03% |
| 本研究のLLM | 0回 | 3.01% |
| AutoPhase(強化学習) | 約450万回 | -3.85% |
| Coreset-NVP(GNN) | 約44万回 | -1.88% |
LLMは追加コンパイルなしで、数千回の試行を要する従来手法を上回りました。オートチューナーの成果の約60%に相当する改善を、推論1回で達成しています。
「-Ozバックアップ」を加えると、LLMが-Oz以外のパスを予測した場合に標準設定も試し、より良い方を選びます。この場合、追加コンパイルは5721回で済み、改善率は3.52%に上がります。
補助タスクとして生成した最適化コードの品質も注目に値します。テストセット10万件のうち、90.3%がコンパイル可能で、68.4%がコンパイラ出力と文字単位で完全一致しました。論文の要約で示された91%と70%は、検証セットでのピーク性能に相当します。
コード生成の先にある最適化
この研究が示すのは、AIがコードを書くだけでなく、書いたコードを小さくする段階に入りつつあることです。X上では「コード生成の次は、人間が触る前にAIが圧縮・最適化する」という文脈で再注目されています。
Metaはこの研究を発展させ、2024年にCode Llamaをベースとした「LLM Compiler」を公開しました。5460億トークンのLLVM IRとアセンブリで事前学習し、コードサイズ最適化と逆アセンブルに特化した基盤モデルです。CC 2025でも発表され、コミュニティによるダウンロードは25万回を超えています。
ただし、現時点でLLMが直接IRを書き換える方式は限界も明確です。数値計算の誤り、データフロー解析の失敗、ループ削除の安全性判断ミスなど、意味的に正しくない最適化が残ります。710件のテストケースでは、LLMのパス予測がオートチューナーを上回る例も見つかっていますが、改善幅は小さいのが実情です。
開発者にとっての意味
コンパイラ最適化は、組み込み機器やモバイルアプリ、ファームウェアなど、バイナリサイズが重要な領域で直結する技術です。LLMがパス順序を1回の推論で予測できれば、ビルドパイプラインへの組み込みコストを大幅に下げられます。
現状は研究段階であり、商用コンパイラにそのまま組み込まれたわけではありません。一方、LLVMという業界標準の上で、再現可能な数値とオープンな論文として公開されている点は、今後のコンパイラ支援ツール開発の土台になります。コード生成AIの普及とともに、最適化支援への関心も高まる流れです。