コード生成の次は、生成したコードを小さく速くする段階です。

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の普及とともに、最適化支援への関心も高まる流れです。