研究から本番環境へ: Vertex の EAGLE-3 で OSS LLM を加速

要約: 推測デコードは LLM 推論を高速化しますが、従来の方法では非効率的な別のドラフト モデルが必要です。Vertex AI は EAGLE-3 を利用し、内部レイヤに小さなドラフト ヘッド(ターゲット モデルの 2 ~ 5%)を追加することで、トレーニングを簡素化し、デコード速度を約 2 ~ 3 倍に向上させています。この投稿では、Vertex AI で SGLang を使用して EAGLE-3 を大規模にトレーニングし、サービングするためのデータ クリーニング、エンベディング、トレーニング、サービングのパイプラインの概要を説明します。
所要時間: 10 分
LLM を扱うユーザーにとって、一度に 1 つのトークンというボトルネックはよくある課題です。標準の自己回帰生成は本質的にシーケンシャルです。これにより、計算ではなく、すべてのステップでメモリから大量のモデルの重みを読み取るのに必要な時間によって速度が制限される、従来のメモリバウンド プロセスが作成され、GPU コアの使用率が低下します。

この問題を解決するのが、投機的デコーディングです。この最適化手法では、ドラフト メカニズムを導入することで、大規模な LLM(ターゲット モデル)が一度に 1 つのトークンを生成する遅いシーケンシャル プロセスを高速化します。

このドラフト メカニズムは、複数の次のトークンを一度に迅速に提案します。大規模なターゲット モデルは、これらの提案を単一の並列バッチで検証します。独自の予測から最長一致プレフィックスを受け入れ、その新しいポイントから生成を続行します。

ただし、すべてのドラフト メカニズムが同じように作成されるわけではありません。従来のドラフト ターゲット アプローチでは、ドラフト作成者として別の小さな LLM モデルを使用します。つまり、より多くのサービング リソースをホストして管理する必要があるため、追加の費用が発生します。

ドラフト ターゲット アプローチを使用した例を示すフローチャート。「サンフランシスコは」というプロンプトは、次の 2 つのステップに導きます。1. 下書きモデルは、トークン(「a」、「city」、「in」)のシーケンシャル チェーンを生成します。2. ターゲット モデルは、予想されるドラフト トークン(トークンは「a」、「city」、「in」で、「in」トークンはモデルによって拒否されます)を検証して選択します。それ以外の場合は、新しいトークン(トークンは「a」、「city」、「known」)を生成します。2 つのステップの結果が収束し、「サンフランシスコは知られている都市です」という最終出力になります。

画像をクリックして拡大

そこで EAGLE-3(Extrapolative Attention Guided LEarning)の出番です。EAGLE-3 はより高度なアプローチです。別のモデル全体ではなく、非常に軽量な「ドラフト ヘッド」(ターゲット モデルのサイズの 2 ~ 5%)を内部レイヤに直接接続します。このヘッドは特徴レベルとトークンレベルの両方で動作し、ターゲット モデルの隠れ状態から特徴を取り込んで、将来のトークンのツリーを外挿して予測します。

その結果、2 つ目のモデルのトレーニングと実行のオーバーヘッドを排除しながら、投機的デコードのすべてのメリットを実現します。

EAGLE-3 のアプローチは、数十億ものパラメータを持つ別のドラフト モデルをトレーニングして維持するという複雑でリソースを大量に消費するタスクよりもはるかに効率的です。既存のモデルの一部として追加される軽量の「ドラフト ヘッド」(ターゲット モデルサイズの 2 ~ 5%)のみをトレーニングします。このよりシンプルで効率的なトレーニング プロセスにより、Llama 70B などのモデルでデコード パフォーマンスが 2 ~ 3 倍向上します(ワークロード タイプ(マルチターン、コード、長いコンテキストなど)によって異なります)。

EAGLE-3 アプローチの使用例を示すフローチャート。「サンフランシスコは」というプロンプトは、複数のレイヤを含む EAGLE-3 を使用したターゲット モデルに転送されます。エンベディング レイヤはデコーダと隠しレイヤに流れ込み、次に EAGLE-3 ヘッドに流れ込みます。EAGLE-3 ヘッドレイヤは、エンベディング レイヤに直接戻る 2 つのトークン チェーン(「a」、「city」、「in」と「a」、「city」、「known」)に分割されます。検証済みのトークン「a」、「city」、「known」は、最終的な出力「San Francisco is a city known」に流れ込みます。

画像をクリックして拡大

しかし、この合理化された EAGLE-3 アプローチを論文からスケーリングされた本番環境対応のクラウド サービスに移行するには、エンジニアリング上の大きな課題があります。この投稿では、Google の技術パイプライン、主な課題、そしてその過程で得られた貴重な教訓を紹介します。

課題 1: データの準備

EAGLE-3 ヘッドをトレーニングする必要があります。まず、一般的な公開データセットを取得します。これらのデータセットのほとんどには、次のような課題があります。

  • 厳格な利用規約: これらのデータセットは、元のプロバイダと競合するモデルの開発に使用できないモデルを使用して生成されます。
  • PII の汚染: これらのデータセットの一部には、名前、場所、財務識別子など、重要な PII が含まれています。
  • 品質保証なし: 一部のデータセットは、一般的な「デモ」ユースケースではうまく機能しますが、実際の顧客の特殊なワークロードでは最適に機能しません。

このデータをそのまま使用することはできません。

レッスン 1: 合成データ生成パイプラインを構築する

解決策の 1 つは、合成データ生成パイプラインを構築することです。お客様のユースケースに応じて、品質だけでなく、さまざまなワークロードに対してお客様の本番環境トラフィックに最も適したデータセットを選択します。次に、これらのデータセットからユーザー プロンプトのみを抽出し、厳格な DLP(データ損失防止)と PII フィルタリングを適用できます。これらのクリーンなプロンプトは、チャット テンプレートを適用してトークン化し、ターゲット モデル(Llama 3.3 70B)を使用してレスポンスを収集します。

このアプローチでは、準拠性とクリーンさを備えているだけでなく、モデルの実際の出力分布にうまく一致するターゲット生成データが提供されます。これは、ドラフト ヘッドのトレーニングに最適です。

合成データ生成パイプラインを示す線形フローチャート。ユーザー プロンプトは、クリーニングとフィルタリングが行われた元データから抽出されます。クリーンなプロンプトは、チャット テンプレートとトークナイザーを使用してトークン化されます。トークン化されたプロンプトは、ターゲット モデルと組み合わせてレスポンスを生成するために使用されます。ターゲット モデルは、生成されたレスポンス トークンを返します。

画像をクリックして拡大

課題 2: トレーニング パイプラインのエンジニアリング

もう 1 つの重要な決定は、EAGLE-3 ヘッドにトレーニング データを供給する方法です。2 つの異なるパスがあります。エンベディングが「オンザフライで生成」されるオンライン トレーニングと、エンベディングが「トレーニング前に生成」されるオフライン トレーニングです。

今回のケースでは、オンライン トレーニングよりも必要なハードウェアがはるかに少ないため、オフライン トレーニング アプローチを選択しました。このプロセスでは、EAGLE-3 ヘッドをトレーニングする前に、すべての特徴とエンベディングを事前に計算します。これらは GCS に保存され、軽量の EAGLE-3 ヘッドのトレーニング データになります。データが揃えば、トレーニング自体は高速です。EAGLE-3 ヘッドのサイズが小さいため、元のデータセットを使用した初期トレーニングには、単一のホストで約 1 日かかりました。ただし、データセットをスケーリングするにつれて、トレーニング時間も比例して増加し、現在では数日間に及んでいます。

トレーニング パイプラインを示す線形フローチャート。トークン化されたプロンプトと生成されたレスポンス トークンを使用して、ターゲット モデルで特徴とエンベディングを生成します。これにより、トークンと特徴が返されます。これらのトークンと特徴は、Draft モデルで EAGLE ヘッドをトレーニングするために使用されます。トレーニングされた EAGLE ヘッドが返されます。

画像をクリックして拡大

このプロセスから、無視できない 2 つの教訓が得られました。

レッスン 2: チャット テンプレートは必須

指示チューニング モデルのトレーニング中に、チャット テンプレートが正しくないと EAGLE-3 のパフォーマンスが大きく変動することがわかりました。ターゲット モデルの特定のチャット テンプレート(Llama 3)を 特徴とエンベディングを生成する前に、生のテキストを連結するだけでは、エンベディングが正しくなくなり、ヘッドが間違った分布を予測するように学習します。

レッスン 3: マスクに注意する

トレーニング中、モデルにはプロンプトとレスポンスの両方の表現が入力されます。ただし、EAGLE-3 ヘッドはレスポンス表現の予測のみを学習する必要があります。損失関数でプロンプト部分を手動でマスクする必要があります。そうしないと、ヘッドはすでに与えられたプロンプトを予測することを学習するのに容量を浪費し、パフォーマンスが低下します。

損失マスクの例を示す図。「サンフランシスコは有名な都市です」というフレーズは、すでに認識されているトークン(「サン」、「フランシスコ」、「は」)と、予測する必要があるトークン(「有名な」、「都市」、「です」)の 2 つの部分に分割されます。損失マスクでは、すでに認識されているトークンは 0 で表され、予測する必要があるトークンは 1 で表されます。

画像をクリックして拡大

課題 3: サービングとスケーリング

トレーニング済みの EAGLE-3 ヘッドを使用して、サービングフェーズに進みました。このフェーズでは、スケーリングに関する大きな課題が生じました。主な学習内容は次のとおりです。

レッスン 4: サービング フレームワークが重要

SGLang チームと緊密に連携することで、EAGLE-3 を最高のパフォーマンスで本番環境に導入することに成功しました。技術的な理由は、SGLang が重要なツリー アテンション カーネルを実装しているためです。この特別なカーネルは、EAGLE-3 が可能性の「ドラフト ツリー」(単なる単純なチェーンではない)を生成するため、非常に重要です。SGLang のカーネルは、これらの分岐パスをすべて 1 つのステップで並行して検証するように特別に設計されています。これがないと、パフォーマンスを最大限に引き出すことができません。

レッスン 5: CPU が GPU のボトルネックにならないようにする

EAGLE-3 で LLM を高速化した後でも、別のパフォーマンスの壁に直面する可能性があります。それは CPU です。GPU で LLM 推論を実行する場合、最適化されていないソフトウェアは、カーネルの起動やメタデータの管理などの CPU オーバーヘッドに膨大な時間を費やします。通常の同期スケジューラでは、GPU がステップ(下書きなど)を実行し、CPU が簿記処理を行い、次の検証ステップを開始する間、アイドル状態になります。これらの同期バブルが積み重なり、貴重な GPU 時間が大量に無駄になります。

通常の同期スケジューラの例。各ステップは、各ステップで費やされた時間とともに順番に表示されます。下書き(10 ミリ秒)、確認(15 ミリ秒)、延長(10 ミリ秒)、CPU の同期(5 ミリ秒)、下書き(10 ミリ秒)、確認(15 ミリ秒)。同期 CPU ステップは、CPU オーバーヘッドに費やされた最適化されていない時間を示すために、異なる色でハイライト表示されます。

画像をクリックして拡大

この問題は、SGLang の Zero-Overhead Overlap Scheduler を使用することで解決しました。このスケジューラは、投機的デコードのマルチステップの Draft -> Verify -> Draft Extend ワークフロー用に特別に調整されています。重要なのは、計算を重複させることです。GPU が現在の検証ステップの実行でビジー状態になっている間、CPU はすでに並行して動作し、次の下書きステップと下書き拡張ステップのカーネルを起動しています。これは、GPU の次のジョブが常に準備されていることを保証することで、アイドル バブルを排除します。FutureMap は、GPU がまだ動作している間に CPU が次のバッチを準備できるスマートなデータ構造です。

ゼロオーバーヘッド オーバーラップ スケジューラの例。ほとんどの手順と時間は前の画像と同じですが、同期 CPU の手順の代わりに、書き込みと読み取りの手順が同時に行われ、それぞれが 0.1 ミリ秒で完了することを示す小さな手順があります。

画像をクリックして拡大

この CPU オーバーヘッドを排除することで、オーバーラップ スケジューラは全体で 10 ~ 20% の高速化を実現します。優れたモデルだけでは不十分であり、それに追いつくことができるランタイムが必要であることを証明しています。

ベンチマークの結果

この旅は価値がありましたか?もちろんです

トレーニング済みの EAGLE-3 ヘッドを、Llama 4 Scout 17B Instruct を使用した SGLang で非投機的ベースラインと比較しました。当社のベンチマークでは、ワークロードのタイプに応じて、デコード レイテンシが 2 ~ 3 倍高速化し、スループットが大幅に向上しています。

包括的なノートブックを使用して、詳細を確認し、ご自身でベンチマークを実施してください。

指標 1: 出力トークンあたりの時間(TPOT)の中央値

出力トークンあたりの時間(TPOT)と同時実行性を示す折れ線グラフ。低いほど良いことを示すメモが記載されています。Y 軸は中央値の TPOT(ミリ秒単位)を表し、X 軸は最大同時実行数を表します。グラフには、ベースラインの結果と EAGLE の結果を表す 2 つの線が示されています。ベースラインの結果は、EAGLE の結果よりも常に高いスコアを示しています。どちらの線もグラフの左下隅付近から始まり、最大同時実行数の増加とともに右上がりの傾向を示しています。ベースラインの結果は、グラフの端に向かって急激に上昇しています。

画像をクリックして拡大

このグラフは、EAGLE-3 のレイテンシ パフォーマンスが優れていることを示しています。出力トークンあたりの時間(TPOT)グラフは、テストされたすべての同時実行レベルで、EAGLE-3 アクセラレータ モデル(緑色の線)がベースライン(青色の線)よりも一貫して低い(速い)レイテンシを実現していることを示しています。

指標 2: 出力スループット

トークン スループットと同時実行性を示す折れ線グラフ。値が大きいほど優れていることを示す注釈が付いています。Y 軸は 1 秒あたりのトークン数でスループットを表し、X 軸は最大同時実行数を表します。グラフには、ベースラインの結果と EAGLE の結果を表す 2 つの線が示されています。EAGLE の結果は、ベースラインの結果よりも一貫して高いスコアを示しています。両方の線は左下隅から始まり、最大同時実行数が増加するにつれて上昇傾向にあります。EAGLE の結果は、ベースラインの結果よりもスムーズで大幅な割合で上昇傾向にあります。

画像をクリックして拡大

このグラフは、EAGLE-3 のスループットの優位性をさらに示しています。トークン スループットと同時実行数のグラフを見ると、EAGLE-3 アクセラレータ モデル(緑色の線)がベースライン モデル(青色の線)を常に大幅に上回っていることがわかります。

同様の観察結果は大規模なモデルにも当てはまりますが、他のパフォーマンス指標と比較して、最初のトークンまでの時間(TTFT)の増加が見られる可能性があることに注意してください。また、次の例に示すように、これらのパフォーマンスはタスクによって異なります。

Vertex AI を使用してトレーニングされたベースライン モデルと EAGLE-3 アクセラレート モデルのカテゴリ間の出力速度を比較した棒グラフ。すべてのカテゴリ(コード、チャット、長いコンテキスト、数学、多言語)で、EAGLE-3 モデルの出力速度はベースライン モデルよりも大幅に高くなっています。

画像をクリックして拡大

まとめ: さあ、あなたの番です

EAGLE-3 は単なる研究コンセプトではなく、デコード レイテンシを 2 倍に短縮できる本番環境対応のパターンです。ただし、スケーリングを実現するには、エンジニアリングの真の努力が必要です。このテクノロジーをユーザーに確実にデプロイするには、次のことを行う必要があります。

  1. コンプライアンスに準拠した合成データ パイプラインを構築します。
  2. チャット テンプレートと損失マスクを正しく処理し、大規模なデータセットでモデルをトレーニングします。

Vertex AI では、このプロセス全体がすでに合理化されており、LLM ベースのアプリケーションをスケーリングするように設計された最適化されたコンテナとインフラストラクチャが提供されています。ご利用にあたっては、以下の参考資料をご覧ください。

ご精読ありがとうございました

Vertex AI に関するご意見やご質問をお待ちしております。

謝辞

本プロジェクトを通じて貴重なサポートを提供してくれた SGLang チーム(Ying Sheng、Lianmin Zheng、Yineng Zhang、Xinyuan Tong、Liangsheng Yin)と SGLang/SpecForge チーム(Shenggui Li、Yikai Zhu)に心から感謝いたします。彼らの寛大な支援と深い技術的洞察は、このプロジェクトの成功に不可欠でした。