HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

AMD GPU上のvLLMにおける投機的デコーディング

Speculative Decoding in vLLM on AMD GPUs (vllm.ai)

132 pointsby ankitg1248 コメント

要約

vLLMは、投機的デコーディングという手法を用いて、AMD GPU上での大規模言語モデル(LLM)の推論スループットを向上させる実験結果を共有しています。投機的デコーディングは、ドラフトコンポーネントが候補トークンを生成し、ターゲットモデルがそれらを検証することで、単一のターゲットモデルパスで複数のトークンを処理することを可能にします。この技術は、モデルファミリー、ドラフト手法、ワークロードによって効果が異なります。

全文翻訳

vLLMにおけるAMD GPU上でのスペキュラティブ・デコーディング

TL;DR: スペキュラティブ・デコーディングにより、vLLMはターゲットモデルの1回のパスで複数のドラフトトークンを検証できます。私たちの実験では、その出力トークンスループットへの影響は、ドラフト手法や提案長によって異なり、モデルファミリー、ドラフトチェックポイント、ワークロード、および受け入れ動作にも依存しました。


はじめに

大規模言語モデル(LLM)は幅広いアプリケーションをサポートしますが、それらを大規模に提供するには慎重な最適化が必要です。標準的な自己回帰デコーディングは、ほとんどのLLMサービングシステムで使用されるベースラインです。モデルは1つのトークンを生成し、それをシーケンスに追加し、更新されたシーケンスを使用して次のトークンを生成します。このプロセスはシンプルで信頼性がありますが、出力トークンは厳密な左から右の順序で生成されなければならないため、サービングループは依然として一度に1つのコミットされたトークンを進めます。

スペキュラティブ・デコーディング [1] は、ドラフトと検証のメカニズムを通じてこのベースラインを拡張します。軽量なドラフトコンポーネントが候補となる将来のトークンを提案し、ターゲットモデルがそれらの候補をコミット前に検証します。複数のドラフトトークンが受け入れられると、システムはターゲットモデルの出力動作を維持しながら、1回のターゲットモデル検証ステップで複数の出力トークンをコミットできます。

この記事では、vLLMにおけるスペキュラティブ・デコーディングの仕組みを探り、テスト環境からの測定結果を共有します。まず、自己回帰デコーディングのベースラインとドラフト・検証プロセスをレビューします。次に、ネイティブMTP、Gemma 4 MTP、EAGLE-3、DFlash、DSparkの5つのスペキュラティブ・ドラフティングアプローチを検討します。これらの手法は、ドラフトコンポーネントがターゲットモデルからどのように情報を受け取るか、および候補トークンが逐次的、自己回帰的、並列、またはハイブリッドアプローチで生成されるかにおいて異なります。最後に、テスト環境でこれらの手法を有効にする方法、ROCm™オープンソフトウェアプラットフォームを使用したAMD Instinct™ MI300XおよびMI355X GPUでの実験からの測定値、および実践的なチューニングとオブザーバビリティの考慮事項について説明します。


自己回帰デコーディングのベースライン

標準的な自己回帰デコーディングでは、各デコードステップは1つの新しいトークンを生成してコミットします。たとえば、4つの出力トークンを生成するには、4つの逐次デコードステップが必要です。

ステップ1:コンテキスト → モデル → T1

ステップ2:コンテキスト + T1 → モデル → T2

ステップ3:コンテキスト + T1 T2 → モデル → T3

ステップ4:コンテキスト + T1 T2 T3 → モデル → T4

各ステップの後、生成されたトークンはシーケンスに追加され、次のステップの入力の一部となります。これによりデコーディングループは単純になりますが、出力トークンごとに1回のモデルデコードステップが必要になります。長い生成中に、このトークンごとのループはレイテンシを支配し、サービングスループットを制限する可能性があります。

したがって、スペキュラティブ・デコーディングの鍵となる質問は次のようになります。

元のモデルの出力動作を維持しながら、生成が一度に1つのトークンだけ進む頻度を減らすことはできますか?

スペキュラティブ・デコーディングは、提案と検証を分離することでこれに対処します。まずドラフトコンポーネントが複数の候補となる将来のトークンを提案します。次に、元のモデルがターゲットモデルとしてそれらの候補を検証します。


スペキュラティブ・デコーディングのコアアイデア

スペキュラティブ・デコーディングは元のモデルを置き換えるものではありません。代わりに、元のモデルをターゲットモデルとして維持し、最終的な出力の責任を負わせ、その前に高速な提案ステージを追加します。

プロセスは2つの部分からなります。

  • ドラフト(下書き):複数の候補となる将来のトークンを提案します。
  • 検証:ターゲットモデルを使用してそれらの候補をチェックします。

図1に示すように、各スペキュラティブ・デコーディングラウンド中に、軽量なドラフトコンポーネントが1つ以上の将来のトークンを提案します。これらのトークンは候補にすぎず、すぐにコミットされるわけではありません。次にターゲットモデルが、1回の検証パスで候補トークンシーケンスを評価します。

検証は左から右に進みます。各ドラフトトークンは、対応する位置でのターゲットモデルの結果を使用してチェックされます。受け入れられたトークンは出力シーケンスにコミットされます。ドラフトトークンが拒否されると、同じ提案からの後続の候補はもはや受け入れられません。

ドラフトトークンが拒否された場合、ターゲットモデルが次のトークンを提供します。残りのドラフトトークンは破棄され、更新されたシーケンスから生成が続行されます。

概念的には、標準的な自己回帰デコーディングは次のように進みます。

ターゲットモデル → T1

ターゲットモデル → T2

ターゲットモデル → T3

ターゲットモデル → T4

スペキュラティブ・デコーディングは代わりに、複数の候補位置をまとめて評価できるようにします。

ドラフトが T1 T2 T3 T4 を提案

モデルが検証 ✓ ✓ ✗ 停止

コミット T1 T2 置換トークン

これにより、複数の候補が受け入れられた場合にターゲットモデルのデコーディングラウンド数を減らすことができます。ドラフトコンポーネントがターゲットモデルによって受け入れられるトークンを生成すると、1回のターゲットモデル検証ステップで複数の出力トークンをコミットできます。提案が拒否された場合、ターゲット側の結果が生成の続行方法を決定します。

[画像]

シンプルな受け入れ/拒否の例

図2は、1回のスペキュラティブ・デコーディングラウンドの例を示しています。緑色のボックスは検証を通過したドラフトトークン、赤色のボックスは最初に拒否されたドラフトトークン、灰色のボックスは破棄された後続のドラフトトークンです。出力の青色のトークンは、ドラフト提案からではなく、ターゲットモデルから来ています。

[画像]

現在のプロンプトが次のようなものだと仮定します。

今日の天気は

ドラフトコンポーネントは将来のいくつかのトークンを提案します。

晴れて暖かく外

ターゲットモデルは左から右にドラフトトークンを検証します。

ドラフトが提案 sunny and warm outside

モデルが検証 ✓ ✓ ✗ 停止

コミット sunny and clear

最初の2つのドラフトトークン、sunnyとandは受け入れられます。3番目の位置で、ドラフトはwarmを提案しますが、ターゲットモデルはclearを選択します。残りの候補outsideは、最初の拒否された位置の後に続くため破棄されます。

したがって、次のデコーディングラウンドは次から続行されます。

今日の天気は晴れてクリアです


ドラフト手法の仕組み

すべてのスペキュラティブ・デコーディング手法は同じ全体的なドラフト・検証プロセスに従いますが、ドラフトコンポーネントの設計方法とターゲットモデルとの連携方法が異なります。

主な違いは次のとおりです。

  • ターゲットモデルから受け取る情報の種類。
  • この情報がドラフトプロセスにどのように組み込まれるか。
  • 候補トークンが逐次的または並列に生成されるかどうか。

これらの違いに基づいて、この記事で議論されているドラフト手法は、3つの広範なカテゴリに分類できます。ネイティブMTPモジュール、個別のMTPドラフター、および専用のターゲット条件付きドラフトネットワーク。

  • ネイティブMTPモジュール: ターゲットモデルアーキテクチャに直接組み込まれています。モデルネイティブの補助予測パスを使用します。候補トークンを逐次的に生成します。
  • 個別のMTPドラフター: 特定のターゲットモデルとペアになった個別のチェックポイントを使用します。推論中にターゲットモデルの活性化と共有KVキャッシュ情報を使用します。候補トークンを逐次的に生成します。
  • 専用のターゲット条件付きドラフトネットワーク: 特定のターゲットモデル用にトレーニングされた専用のスペキュレーターモデル(EAGLE-3、DFlash、DSparkなど)を使用します。EAGLE-3はターゲットモデルの隠れ状態から自己回帰的にドラフトし、DFlashはターゲットモデルの隠れ状態から並列ブロックをドラフトし、DSparkは軽量な因果補正と信頼度ベースのプレフィックス選択を追加します。

これらのカテゴリはターゲットモデルファミリーではなく、ドラフトコンポーネントのアーキテクチャを記述します。ターゲットモデルは、ネイティブMTPをサポートするだけでなく、個別にトレーニングされたEAGLE-3、DFlash、またはDSparkドラフトモデルを持つこともできます。

ドラフトコンポーネントは完全に単独で動作するわけではありません。手法によっては、ドラフトコンポーネントが以下を受け取ることがあります。

  • ターゲットモデルからの隠れ表現。
  • 選択された複数のターゲットレイヤーからの隠れ状態。
  • ターゲットモデルのKVキャッシュ。
  • 複数のターゲットモデル表現を組み合わせたものから生成された特徴。

次のセクションでは、各手法がこの情報をどのように使用し、候補トークンをどのように生成するかを説明します。

ネイティブMTP

Multi-Token Prediction(MTP)は、直接的な次のトークン以外の将来のトークンを予測するための、モデルネイティブなメカニズムのファミリーを指します。vLLMでは、ターゲットモデルに互換性のある補助予測コンポーネントが含まれている場合に、ネイティブMTPが利用可能になります [2]。正確なMTPアーキテクチャはモデルファミリーによって異なりますが、各実装は将来のトークンを提案するための補助パスを提供します。

最初のスペキュラティブステップでは、MTPコンポーネントはターゲットモデルからの隠れ表現と現在のトークンからの情報を組み合わせて、最初のドラフトトークンを予測します。後続のステップでは、新しくドラフトされたトークンと、前のMTPステップによって生成された隠れ状態が、次の候補を予測するために使用されます。設定された候補数が提案された後、ターゲットモデルはそれらを1回の検証パスでまとめて評価します。

最初のドラフトトークン

ターゲットモデルの隠れ表現

↓

MTPコンポーネント

↓

ドラフトトークン1 + 更新された隠れ状態

↓

後続のドラフトトークン

前のMTP隠れ状態 + 最新のドラフトトークン

↓

MTPコンポーネント

↓

次のドラフトトークン + 更新された隠れ状態

↓

設定されたドラフトシーケンス完了

↓

ターゲットモデルが提案されたすべてのトークンをまとめて1回の検証パスで評価

多くのネイティブMTP実装は同様のパターンに従います。ターゲットモデルまたは前のMTP予測からの隠れ表現は、シフトされた入力トークンまたは最新のドラフトトークンの埋め込みと組み合わされます。

ターゲットモデルまたは前のMTP隠れ表現

シフトされた入力トークンまたは最新のドラフトトークン埋め込み

↓

モデル固有の融合または射影

↓

補助予測レイヤー

↓

ドラフトトークンロジット

2つの入力は異なる目的を果たします。(1)隠れ表現は先行シーケンスに関する情報を含み、(2)トークン埋め込みはドラフトが継続する最新トークンを識別します。一般的な実装では、これらは隠れ次元に沿って結合され、補助予測レイヤーに入る前に変換されます。

物理的なMTPレイヤーの数と設定されたスペキュラティブ長は別個の概念です。num_speculative_tokensがチェックポイントによって直接提供される予測深度を超える場合、vLLMは追加のフォワードパスを通じてMTPパスを再利用できます。したがって、より大きい値は検証前に多くの候補を提案しますが、より多くの逐次ドラフト作業も導入します。

モデル固有のMTPパス

↓

ドラフトトークン1 ドラフトトークン2 ドラフトトークン3 ...

↓

設定された提案完了

↓

ターゲットモデルが提案されたシーケンスを検証

ネイティブMTPはターゲットモデルアーキテクチャに密接に関連しています。多くの実装では、MTPパスの一部はターゲットモデルとコンポーネントを共有しており、追加のメモリオーバーヘッドを比較的控えめに保つことができます。しかし、複数のスペキュラティブトークンを生成するには、検証前に依然として逐次ドラフトが必要です。

Gemma 4 MTP

Gemma 4は、特定のターゲットモデルとペアになった個別にパッケージ化されたMTPドラフトコンポーネントを使用します [3]。ドラフトコンポーネントは独自のチェックポイントを持っていますが、推論中にターゲットモデルと密接に連携します。

Gemma 4ターゲットモデル

↓

ターゲットモデルの活性化
共有ターゲットKVキャッシュ

↓

Gemma 4 MTPドラフトコンポーネント

↓

候補トークン

ドラフトコンポーネントはターゲットモデルによって生成された活性化を使用し、ターゲットモデルのKVキャッシュを共有します。これにより、プレフィックスを独立して処理するのではなく、ターゲットが既に計算したコンテキスト情報を再利用できます。

ネイティブMTPと同様に、ドラフトコンポーネント内のレイヤー数は設定されたスペキュラティブ長とは別です。複数の候補トークンが要求される場合、ドラフトコンポーネントはそれらを逐次的に生成します。

Gemma 4 MTPドラフトコンポーネント

↓

ドラフトトークン1 ドラフトトークン2 ドラフトトークン3 ...

↓

設定された提案完了

↓

ターゲットモデルが提案されたシーケンスを検証

EAGLE-3

EAGLE-3は、特定のターゲットモデル用にトレーニングされた専用のドラフトネットワークを使用します。ドラフトコンポーネントは独自の実行パスを持っていますが、ターゲットモデルから提供される情報に基づいて密接に条件付けされています [4]。

ターゲットモデルのフォワードパス中に、EAGLE-3はターゲットTransformerの3つのステージ(最初の方、中間、最後の方)の隠れ状態を記録します。これらは、ターゲットモデル処理の異なるステージでの同じ受け入れられたシーケンスのコンテキスト表現です。

初期レイヤー隠れ状態
中間レイヤー隠れ状態
後期レイヤー隠れ状態

↓

連結 + 射影

↓

融合ターゲット特徴量

3つの隠れ状態は連結され、単一の融合ターゲット特徴量に射影されます。この融合表現は、EAGLE-3ドラフトデコーダーに入る前に、サンプリングされたトークンの埋め込みと組み合わされます。

融合ターゲット特徴量

サンプリングされたトークン埋め込み

↓

連結 + 射影

↓

EAGLE-3ドラフトデコーダー

↓

ドラフトトークン

2つの入力は異なる目的を果たします。

  • 融合ターゲット特徴量は、ターゲットモデルの複数のステージからの情報を使用して、受け入れられたシーケンスを要約します。
  • サンプリングされたトークン埋め込みは、ドラフトが継続するトークンを識別します。

EAGLE-3は、ドラフトトークンを自己回帰的に生成します。最初のドラフトトークンについては、受け入れられたシーケンスから計算された融合ターゲット特徴量とサンプリングされたトークン埋め込みを使用します。ドラフトトークンが生成された後、その埋め込みが次のドラフトステージにフィードされます。

ターゲットモデルはまだ後続のスペキュラティブ位置を処理していないため、それらの位置のターゲットモデル隠れ状態は利用できません。したがって、EAGLE-3はドラフトシーケンスを継続するために、前のドラフトコンポーネントの出力を利用します。

最初のドラフトトークン

融合ターゲット特徴量

サンプリングされたトークン埋め込み

↓

ドラフトトークン1

↓

後続のドラフトトークン

前のドラフトコンポーネント出力

新しくサンプリングされたトークン埋め込み

↓

ドラフトトークン2 ドラフトトークン3 ...

この逐次的なフィードバックにより、後続のドラフトトークンは提案シーケンス内の前のドラフトトークンに直接依存するようになります。しかし、より多くのスペキュラティブトークンを生成するには、検証前にさらに多くの逐次ドラフト作業が必要になります。

DFlash

DFlashは、特定のターゲットモデル用にトレーニングされた専用のドラフトネットワークを使用します。MTPやEAGLE-3とは異なり、候補トークンを逐次的に生成するのに対し、DFlashは将来の位置のブロック全体を並列に予測します [5]。

DFlashは各ドラフトブロックをアンカートークンで開始します。アンカーはターゲットモデルによって生成または確認された既知のトークンであるため、DFlashはそれを予測する必要はありません。代わりに、後続のマスクされた位置に既知の開始点を提供します。後続のデコーディングラウンドでは、これは通常、前の検証パスによって返された追加のターゲットトークンです。

アンカーはブロックの最初の位置を占め、残りの位置はマスクされ、並列に予測されます。

ドラフトブロックは確認済みのアンカートークンで始まり、その後にマスクされた位置が続きます。

位置 0 1 2 3 4 5 6

入力 アンカー マスク マスク マスク マスク マスク マスク

ここで、anchorは既知のターゲットモデルトークンであり、マスクされた位置はDFlashによって予測されます。

DFlashは単一のDFlashフォワードパスで、マスクされたすべての位置をまとめて予測します。

位置 0 1 2 3 4 5 6

出力 アンカー draft1 draft2 draft3 draft4 draft5 draft6

EAGLE-3と同様に、DFlashは最初に複数のターゲットモデルレイヤーからの隠れ状態を融合表現に結合します。

選択されたレイヤーからのターゲット隠れ状態

↓

連結 + 射影

↓

融合ターゲットコンテキスト

主な違いは、この融合表現の使用方法です。EAGLE-3はそれを自己回帰ドラフトネットワークの入力でサンプリングされたトークン埋め込みと組み合わせています。DFlashは代わりに、融合ターゲットコンテキストを、ドラフトネットワークのすべてのレイヤーで利用可能な追加のKeyおよびValue表現に変換します。

したがって、マスクされたドラフト位置からのクエリは、以下にアテンションを向けることができます。

  • ターゲットモデルから派生したKeyおよびValue表現。
  • ドラフトブロック自体によって生成されたKeyおよびValue表現。

融合ターゲットコンテキスト

↓

すべてのドラフトレイヤーで利用可能

ターゲットK/V + レイヤー1 ターゲットK/V + レイヤー2 ターゲットK/V + レイヤー3 ターゲットK/V + レイヤーN

↓

マスクされたドラフト位置クエリは、ターゲット由来およびドラフトブロック由来のK/Vの両方にアテンションを向ける

したがって、ターゲットモデルコンテキストは、一度だけ入力に供給されるのではなく、ドラフトネットワーク全体で利用可能になります。

ドラフトブロックが生成された後、ターゲットモデルは提案されたすべてのトークンを1回の検証パスで評価します。次に、受け入れの決定が左から右に適用されます。最初の拒否まで受け入れられたトークンがコミットされ、残りの候補は破棄されます。

ドラフト提案 D1 D2 D3 D4 D5

受け入れ結果 受け入れる 受け入れる 拒否 破棄 破棄

コミットされた出力 D1 D2 ターゲットモデルトークン

ここで、ターゲットモデルトークンは最初に拒否されたドラフトトークンを置き換え、残りのドラフトトークンは破棄されます。

DFlashの定義上の特徴は、すべてのマスクされた位置が1回のドラフトネットワークフォワードパスでまとめて予測されることです。

draft1 draft2 draft3 draft4 一緒に予測

これは逐次ドラフトとは異なります。

draft1 → draft2 → draft3 → draft4

すべてのマスクされた位置がまとめて予測されるため、後続の位置は同じパス中の先行位置で選択されたトークンに条件付けされません。これにより、自己回帰ドラフトで使用されるトークンごとのフィードバックが削除されます。したがって、後続の位置の有効性は、特に長いドラフトブロックが使用される場合、トレーニングされたチェックポイントとワークロードに依存します。

DSpark

DSparkは、並列ドラフティングを2つの追加メカニズムで拡張します。

  • ドラフトブロック内のトークン間に依存関係を導入する軽量な逐次ヘッド。
  • ターゲットモデル検証のために送信されるプレフィックスの信頼度ベースの選択。

DSparkは、DFlashモデルを改変したものを並列バックボーンとして使用します [6]。バックボーンは、1回のフォワードパスで全位置の主要なドラフト計算を実行し、各ドラフト位置に対して隠れ状態とベースロジットのセットを生成します。したがって、DFlashセクションで説明されたターゲットコンテキスト条件付けを継承します。

ターゲット由来のコンテキスト

↓

DSpark並列バックボーン

↓

全ドラフト位置の隠れ状態
全ドラフト位置のベースロジット

完全に並列なドラフトコンポーネントは、ブロック内の先行位置で選択されたトークンを見る前に、各位置を予測します。複数の継続がもっともらしい場合、これは一貫性のない組み合わせを生成する可能性があります。たとえば、「もちろん」と「問題ありません」の両方が合理的な継続である可能性がありますが、独立した位置ごとの予測は「問題ありません」を生成する可能性があります。

DSparkは、並列バックボーンの後に軽量な逐次ヘッドを適用することで、この動作に対処します。バックボーンは依然として全位置のベースロジットをまとめて計算します。次に、逐次ヘッドは左から右にトークンを選択し、以前に選択されたドラフトトークンからの情報を使用して各位置を調整します。

DSparkは、選択されたドラフトトークン間に依存関係を導入する軽量なマルコフヘッドを適用します。各位置について、マルコフヘッドは直前の選択されたトークンを使用して小さなバイアスを生成します。このバイアスは、並列バックボーンによって生成されたベースロジットを調整します。

位置 k のベースロジット

ドラフトトークン k-1 からのバイアス

↓

位置 k の調整済み分布

主要なドラフトネットワークは、1回のフォワードパスで全候補位置をまとめて処理します。その後、軽量なマルコフヘッドのみが左から右に実行され、以前に選択されたドラフトトークンを使用して各位置を調整します。

1回の並列バックボーンパス

軽量な逐次補正

↓

ドラフトトークン1 → トークン2 → トークン3 → ... → トークンN

これにより、後続のドラフトトークンは、各位置に対してドラフトネットワーク全体を再度実行することなく、同じブロック内で既に選択されたトークンに依存できるようになります。

DSpark設計には、ターゲットモデル検証のために短いドラフトプレフィックスを選択できる信頼度ヘッドも含まれています。この機能は、私たちの実験で使用されたvLLMパスではアクティブではなかったため、ベンチマーク結果は並列ドラフトネットワークと軽量マルコフ補正のみを反映しています。

ターゲットモデルは提案されたシーケンスを1回の検証パスで評価し、ドラフトトークンは最初の拒否まで左から右にコミットされます。

ドラフト手法の概要

図3は、5つのドラフト手法を並べて視覚的に表示しています。ドラフトコンポーネントの外観、使用するターゲットモデル情報、および候補トークンが逐次的または並列に生成されるかどうかを示しています。図の下の表は、同じ比較をコンパクトな形式で再掲しています。5つの手法すべてにおいて、ターゲットモデルは提案されたシーケンスを1回の検証パスで評価し、受け入れの決定は最初の拒否されたドラフトトークンまで左から右に適用されます。

[画像]

手法ドラフトコンポーネント使用されるターゲットモデル情報ドラフトトークンの生成方法
ネイティブMTPモデルネイティブ補助MTPパスターゲットモデルまたは前のMTP隠れ表現と現在のドラフトトークン情報を組み合わせたものMTPパスの繰り返し使用による逐次生成
Gemma 4 MTPターゲットモデルとペアになった個別のMTPドラフトコンポーネントターゲットモデルの活性化と共有ターゲットKVキャッシュペアになったMTPコンポーネントによる逐次生成
EAGLE-3専用自己回帰ドラフトネットワークターゲットモデルフォワードパスの最初、中間、最後に近い隠れ状態を収集し、1つの表現に融合したもの各ドラフトトークンが次のトークンに影響を与える逐次生成
DFlash専用並列ドラフトネットワークすべてのドラフトレイヤーで追加のKeyおよびValue情報として提供される融合ターゲットモデル隠れ状態候補位置全体を1回の並列フォワードパスで予測
DSpark軽量マルコフヘッドを備えたDFlashスタイルの並列ドラフトネットワーク並列ドラフトネットワークが使用するのと同じターゲット条件付き情報1回の並列フォワードパスの後、軽量な逐次調整によるトークン選択

vLLMでスペキュラティブ・デコーディングを有効にする方法

vLLMでは、スペキュラティブ・デコーディングは--speculative-configを通じて設定されます。主な違いは、メソッド名、個別のドラフトチェックポイントが必要かどうか、および要求される候補トークン数です。現在のvLLMは、メソッド値としてmtp、eagle3、dflash、dsparkをサポートしています。

手法個別のドラフトチェックポイント通常の設定
ネイティブMTPいいえ"method": "mtp" <N> "num_speculative_tokens":
Gemma 4 MTPはい"method": "mtp" <matching-assistant> "model": <N> "num_speculative_tokens":
EAGLE-3はい"method": "eagle3" <matching-speculator> "model": <N> "num_speculative_tokens":
DFlashはい"method": "dflash" <matching-speculator> "model": <N> "num_speculative_tokens":
DSparkはい"method": "dspark" <matching-speculator> "model": <N> "num_speculative_tokens":

ネイティブMTPの場合、ドラフトコンポーネントはターゲットモデルに含まれているため、modelフィールドは省略されます。

vllm serve <target-model> \
  --speculative-config '{
    "method": "mtp",
    "num_speculative_tokens": <N>
  }'

Gemma 4 MTP、EAGLE-3、DFlash、DSparkの場合、modelフィールドは通常、ターゲットモデル用にトレーニングされたチェックポイントを指します。

vllm serve <target-model> \
  --speculative-config '{
    "method": "<method>",
    "model": "<matching-draft-checkpoint>",
    "num_speculative_tokens": <N>
  }'

Gemma 4アシスタントチェックポイントは、modelフィールドを通じて提供されますが、MTPパスを使用します。vLLMはアシスタントコンポーネントをターゲットモデルに接続し、ターゲットKVキャッシュを共有できるようにします。

メソッドを有効にする前に、以下を確認してください。

  • インストールされているvLLMバージョンが、メソッドとモデルアーキテクチャをサポートしていること。
  • ドラフトチェックポイントがターゲットモデルとメソッドと互換性があること。
  • num_speculative_tokensがチェックポイントと互換性があること。
  • モデルカードが意図したハードウェアと推論バックエンドをサポートしていること。
メモリに関する考慮事項

ネイティブMTPは個別のドラフトチェックポイントをロードせず、ターゲットモデルと埋め込みテーブルや出力ヘッドなどのコンポーネントを共有する場合があります。Gemma 4 MTP、EAGLE-3、DFlash、DSparkは追加のドラフト重みをロードするため、十分なGPUメモリヘッドルームを確保する必要があります。実際のオーバーヘッドは、ドラフトコンポーネントのサイズ、数値精度、テンソル並列構成、およびランタイムバッファに依存します。


事前トレーニング済みドラフトモデルの検索場所

現在、いくつかの組織がHugging Faceで事前トレーニング済みドラフトモデルを公開しています。GoogleはGemma 4用のMTPアシスタントを提供しており、Z-LabはDFlashチェックポイントのコレクションを維持しています。Red Hat AIはEAGLE-3、DFlash、DSparkにわたるドラフトモデルを提供しており、DeepSeekのDeepSpecコレクションは3つのメソッドすべてに対応するチェックポイントを提供しています。LightSeekはKimi用のEAGLEベースのドラフトモデルに焦点を当てており、InferactはMiniMaxとKimi用のドラフトモデルを公開しています。

ドラフトモデル発行元手法代表的なモデルとターゲット
GoogleGemma 4 MTPGemma 4 E2B、E4B、12B、26B-A4B、および31Bターゲットモデルのアシスタントチェックポイント。[7]
LightSeek FoundationEAGLE-3およびEAGLE-3.1Kimi-K2.5、Kimi-K2.6、Kimi-K2.7-Coder用のEAGLEベースのドラフトモデル(標準およびMLAバリアントを含む)。[8]
Red Hat AIEAGLE-3、DFlash、DSparkLlama、Qwen、Gemma、GPT-OSS、GLM、Nemotron、Mistralなどのターゲットファミリーをカバーするコレクション。一般的な接尾辞には-speculator.eagle3、-speculator.dflash、-speculator.dsparkが含まれます。[9]
Z-LabDFlashQwen3、Qwen3.5、Qwen3.6、Gemma 4、Kimi、MiniMax、GPT-OSS、Llamaなどのターゲット用のDFlashチェックポイント。チェックポイント名は一般的に<target>-DFlashパターンに従います。[10]
DeepSeek AIEAGLE-3、DFlash、DSparkDeepSpecコレクションは、Qwen3-4B、Qwen3-8B、Qwen3-14B、およびGemma 4 12B用の3つの手法すべてのバージョンを提供します。例としては、eagle3_qwen3_8b_ttt7、dflash_qwen3_8b_block7、dspark_qwen3_8b_block7などがあります。[11]
InferactEAGLE-3およびDSparkInferact/MiniMax-M3-EAGLE3、そのGQAバリアント、およびInferact/Kimi-K3-DSparkを含むドラフトモデル。[12]

実験セットアップと測定

スペキュラティブ・デコーディングを有効にした後、実用的な問題は、追加のドラフト作業がエンドツーエンドのサービングパフォーマンスを向上させるかどうかです。候補トークンは、コミット前にターゲットモデルによって評価されるため、すべての位置で正しい必要はありません。したがって、パフォーマンスは、提案されたトークンのうちいくつが受け入れられるか、および回避されたターゲットモデルのデコード作業がドラフトと検証のコストを上回るかどうかに依存します。

モデルの品質とサービングパフォーマンスは、ランダムなトークンシーケンスではなく、タスクに基づいたベンチマークを使用して評価します。受け入れ動作は、実際のモデル出力の構造と予測可能性に依存するため、タスクベースのプロンプトは、実用的なパフォーマンスのより代表的なビューを提供します。

主なパフォーマンス指標は次のとおりです。

  • 非スペキュラティブベースラインに対する出力トークンスループットとスピードアップ。
  • 平均受け入れ長とドラフトトークン受け入れ率(利用可能な場合)。
  • 非スペキュラティブベースラインに対するモデル品質。
モデルと実験カバレッジ

実験では、複数のターゲットモデルファミリーにわたる5つのスペキュラティブ・ドラフティングアプローチをカバーしています。チェックマークは、そのターゲットメソッドの組み合わせに対してベンチマーク結果が利用可能であることを示します。ダッシュは、その組み合わせが現在の実験に含まれていないことを示します。

ターゲットモデルネイティブMTPGemma 4 MTPEAGLE-3DFlashDSpark
google/gemma-4-26B-A4B-it-✓Google✓Red Hat AI✓Z-Lab-
google/gemma-4-31B-it-✓Google✓Red Hat AI✓Z-Lab✓Red Hat AI
Qwen/Qwen3-8B--✓Red Hat AI✓Z-Lab✓DeepSeek
Qwen/Qwen3.5-27B✓組み込み--✓Z-Lab-
Qwen/Qwen3.5-122B-A10B✓組み込み--✓Z-Lab-
Qwen/Qwen3.6-27B✓組み込み--✓Z-Lab-
Qwen/Qwen3.6-35B-A3B✓組み込み--✓Z-Lab-
moonshotai/Kimi-K2.5--✓LightSeek✓Z-Lab-
MiniMaxAI/MiniMax-M3-MXFP8--✓Inferact--

この表は、実験に含まれるターゲットメソッドの組み合わせを要約し、異なるモデル、ワークロード、および提案長でスペキュラティブ・デコーディングがどのように動作するかを示しています。各結果は、モデルアーキテクチャ、アクティブパラメータ数、ドラフトコンポーネントサイズ、ワークロード、およびサービング条件がすべてパフォーマンスに影響を与える可能性があるため、テスト構成の範囲内で解釈する必要があります。

スループット測定

スループットについては、標準的な自己回帰ベースラインに対する生成トークン/秒を測定し、スペキュラティブトークン数をスイープして、スペキュレーションの深さがエンドツーエンドサービングスループットにどのように影響するかを調査します。

主な観察事項

測定値は、ターゲットモデル、ドラフト手法、ワークロード、および提案長によって異なりました。

gemma-4-26B-A4B-itの場合、テストされたスイープ内で測定された最大スループット比は、GSM8KおよびMBPPでのGemma 4 MTPでそれぞれ2.74倍および2.62倍、MATH500およびHumanEvalでのDFlashでそれぞれ2.87倍および2.79倍でした。EAGLE-3の測定値は、4つのデータセット全体で2.11倍から2.27倍の範囲でした。

gemma-4-31B-itの場合、Gemma 4 MTPの測定値はGSM8Kで2.00倍、MBPPで1.99倍に達し、DFlashはMATH500で2.34倍、HumanEvalで2.05倍に達しました。EAGLE-3およびDSparkの測定値も、評価された4つのデータセット全体でベースラインを上回りました。測定された最大スループットに関連する提案長は、ワークロードによって異なりました。

Qwen3-8Bの場合、DSparkの測定値はMATH500で1.15倍からGSM8Kで1.63倍の範囲でした。DFlashの測定値は1.08倍から1.27倍の範囲でした。EAGLE-3はGSM8K、HumanEval、MBPPでベースラインを上回りましたが、MATH500での最大測定値はベースラインを下回ったままです。

Qwen3.5-27B、Qwen3.5-122B-A10B、およびQwen3.6-27Bの場合、テストされたスイープ内で測定されたネイティブMTPの最大値は、対応するDFlashの最大値よりも高くなりました。このグループでの最大比率は、MATH500でのQwen3.5-122B-A10Bで2.20倍でした。測定された最大スループットに関連するネイティブMTPの提案長は、モデルとデータセットに応じてN=4からN=7の範囲でした。

Qwen3.6-35B-A3Bの場合、DFlashの測定値は1.77倍から2.06倍の範囲で、最大値は4つのデータセットすべてでN=7で発生しました。ネイティブMTPの測定値は1.28倍から1.49倍の範囲で、最大値はN=6で発生しました。Qwen3.6-27Bの測定値との差は、同じファミリーのモデル間で結果が異なる可能性があることを示しています。

MiniMax-M3-MXFP8の場合、EAGLE-3の測定値はN=4でHumanEvalで2.09倍に達しました。Kimi-K2.5の場合、EAGLE-3の測定値は最大2.33倍、DFlashの測定値は最大2.68倍に達しました。テストされたスイープ内では、最大EAGLE-3値は一般的にN=4で発生し、最大DFlash値はN=7で発生しました。

実験全体を通して、測定された最大スループットに関連する提案長は一定ではありませんでした。逐次手法の場合、スループットはしばしばNの最初の数値で増加してからプラトーに達しました。DFlashおよびDSparkの場合、N=7はしばしば高スループット設定に含まれていましたが、より大きい値ではスループットが一貫して増加しませんでした。

これらの観察結果は、この研究で使用されたハードウェア、ソフトウェア、ターゲットモデル、ドラフトチェックポイント、ワークロード、およびスイープ設定を反映しています。


チューニングの考慮事項

スペキュラティブ・デコーディングは、すべてのワークロードで同様に機能する固定設定ではなく、実行時最適化として扱うべきです。最も高いスループットに関連するnum_speculative_tokensの値は、提案されたトークンのうちいくつが受け入れられるか、および回避されたターゲットモデルのデコード作業がドラフトと検証のコストを上回るかどうかに依存します。

したがって、オブザーバビリティが重要です。モデルカードの推奨事項または例の設定は有用な出発点を提供しますが、最終的な設定は、代表的なワークロードとエンドツーエンド測定を使用して選択する必要があります。有用なシグナルには、スループット、平均受け入れ長、全体的な受け入れ率、および位置ごとの受け入れ率が含まれます。

より大きな提案ウィンドウは、システムが1回の検証パスで複数のトークンをコミットする機会を増やします。しかし、後続のドラフト位置での受け入れは減少する可能性があります。これが起こると、追加の候補はドラフトと検証の作業を依然として追加しながらほとんど貢献しないため、スループットが平坦化または低下します。

サポートされている設定から開始する

ネイティブMTPの場合、N=1は追加の逐次ドラフト作業を最小限に抑えるため、保守的な開始点です。

{"method": "mtp", "num_speculative_tokens": 1}

正しさと安定性を確認した後、2、3、4、5、6、7などのより大きい値をスイープします。

私たちの測定では、測定された最大スループットに関連するネイティブMTP設定は、ターゲットモデルとワークロードによって異なりました。Qwen3.5-27Bの場合、測定された最大スループットはGSM8KおよびMATH500でN=5、HumanEvalおよびMBPPでN=4、MT-BenchでN=3で発生しました。Qwen3.5-122B-A10Bの場合、4つのリストされた推論およびコードデータセット全体で測定された最大スループットはN=7で発生しました。

Qwen3.6の測定値も、この設定が同じファミリーのモデル間で変更される可能性があることを示しています。Qwen3.6-27Bの場合、測定された最大値はN=4またはN=5で発生しましたが、テストされたQwen3.6-35B-A3B構成のスループットはN=6まで増加しました。

Gemma 4 MTPおよびEAGLE-3の場合、Nを増やすことは逐次ドラフト作業も追加します。したがって、チェックポイントが推奨設定を提供している場合でも、短いスイープが役立ちます。私たちのGemma 4およびEAGLE-3の実験では、測定されたスループットは一般的にNの最初の数値で増加してからプラトーに達しました。

DFlashの場合、ドラフトチェックポイントによって推奨またはサポートされている提案長から開始します。多くのDFlashチェックポイントは固定ブロックサイズでトレーニングされています。たとえば、次の場合:

block_size = 16

最大提案長は通常次のようになります。

num_speculative_tokens = 15

最初の位置は確認済みのアンカートークンであり、残りの15位置はドラフト候補であるためです。

これは最大サポート提案長であり、必ずしも最高スループット設定ではありません。実際には、次のような小さい値をテストすることが役立ちます。

N = 3, 7, 11, 15

私たちのDFlash実験全体で、N=7はしばしば高スループット設定に含まれていました。一部のワークロードでは、測定された最大スループットがN=11で発生しました。

DSparkの場合、num_speculative_tokensは各スペキュラティブラウンドで生成される候補トークン数を設定します。私たちのvLLM実験では、完全に設定された提案がターゲットモデル検証のために送信されたため、N=3やN=7のような値はエンドツーエンドスループットを使用して比較する必要があります。

受け入れ動作の監視

監視すべき関連シグナルは次のとおりです。

シグナル何を示すか
スループットエンドツーエンドサービングパフォーマンスが非スペキュラティブベースラインと比較してどのように変化するか
平均受け入れ長スペキュラティブラウンドあたり平均して何個のドラフトトークンがコミットされるか
全体的な受け入れ率提案されたドラフトトークンのうち、どのくらいの割合が受け入れられるか
位置ごとの受け入れ率提案の後続の位置が依然として有用かどうか

位置ごとの受け入れは、提案長をチューニングする際に特に役立ちます。最初の数位置が頻繁に受け入れられるが、後続の位置がほとんど貢献しない場合、num_speculative_tokensを減らすことで、不要なドラフト作業を回避してスループットを改善できる可能性があります。

受け入れメトリクスは、スループットと合わせて解釈する必要があります。ドラフト生成が安価な場合、メソッドはより低い受け入れ率でもベースラインに対してより高いスループットを示す可能性があります。逆に、ドラフトコンポーネントが追加のオーバーヘッドを追加する場合、高い受け入れ率が必ずしも高いスループットに対応するとは限りません。

ワークロードに合わせてスイープを調整する

異なるワークロードは異なる受け入れパターンを生成する可能性があります。

私たちのGSM8KおよびMATH500の測定では、テストされたスイープ内で、中程度またはより深い提案長がしばしばより高い測定スループットに関連付けられていました。Qwen3.5-122B-A10BでのネイティブMTPの場合、測定スループットはN=7まで増加しました。DFlashの場合、より高い測定値はしばしばN=7またはN=11で発生しました。

HumanEvalおよびMBPPの場合、適度な提案長がしばしば最高スループット設定に含まれていました。コードには予測可能なローカル構造が含まれていますが、フォーマット、識別子、および実装の選択により、それ以外はもっともらしい継続が逸脱する可能性があります。

チューニングワークフローの例
  1. チェックポイントに対してサポートされている、または推奨されている設定から開始します。

  2. 代表的なプロンプトと生成設定を使用してベンチマークを実行します。

  3. スループット、平均受け入れ長、および受け入れ率を記録します。

  4. いくつかの小さいおよび大きい提案長をスイープします。

  5. 意図したワークロードに最も関連性の高いメトリックに基づいて設定を選択します。これらの実験では、エンドツーエンドサービングスループットが主要な選択メトリックでした。

選択された構成が、必ずしも最も長い提案、最も高い受け入れ率、または最大の平均受け入れ長を持つわけではありません。選択は、ドラフトコスト、検証コスト、受け入れられたトークン、および意図したワークロードに最も関連性の高いメトリック間のトレードオフを考慮する必要があります。


新しいターゲットモデル用のスペキュレーターのトレーニング

このガイドでは、スペキュレーターのトレーニングを詳細にはカバーしていません。以下のワークフローは、参照されているvLLM SpeculatorsおよびDeepSpecリソースからの実践的な考慮事項を要約しています [13, 14, 15]。

典型的なワークフローは次のとおりです。

  1. 代表的なプロンプトを準備します。
  2. ターゲットモデルで応答を生成します。
  3. 隠れ状態生成モードを選択します。
  4. 必要なターゲットモデル隠れ状態を収集します。
  5. スペキュレーターをトレーニングします。
  6. 受け入れとサービングスループットをテストします。
代表的なプロンプトの準備

チャット、数学、コード生成、ツール使用、または多言語タスクなど、期待されるワークロードを反映したプロンプトから開始します。評価用に別のプロンプトセットを保持します。

トレーニングに使用される応答は、スペキュレーターがサポートする正確なターゲットモデルによって生成される必要があります。トークナイザー、チャットテンプレート、思考モード、および生成構成も、意図したデプロイメントと一致する必要があります。vLLMドキュメントは、既存の応答にターゲットモデルのトークナイザーまたはチャットテンプレートを適用しても、データがターゲット固有になるわけではないことを強調しています。応答自体はターゲットモデルから来る必要があります。

隠れ状態の取得方法の選択

スペキュレーターは、トレーニング中にターゲットモデルから内部隠れ状態を受け取ります。vLLM Speculatorsワークフローは、それらを提供する3つの方法をサポートしています。

トレーニングモード仕組み主な考慮事項
オンライン隠れ状態は、必要に応じて実行中のvLLMサーバーによって生成され、その後破棄されます大規模なディスクキャッシュを回避しますが、ターゲット推論とトレーニングを同時に行うためのリソースが必要です
オフライン隠れ状態はトレーニング開始前に生成および保存されますその後、トレーニングのためにすべてのGPUを解放しますが、かなりのストレージが必要です
ハイブリッド隠れ状態は最初のエポック中に生成およびキャッシュされ、その後再利用されます別個の前処理ステージを必要とせずに、生成コストを1回支払います

選択されたモードは隠れ状態の出所を変更します。残りのトレーニングワークフローはほぼ同じです。

ターゲットモデル情報の収集

vLLMサーバーはターゲットモデルを実行し、選択されたドラフト手法に必要なレイヤーからの隠れ状態を公開できます。カスタムターゲットレイヤーが選択されている場合、同じレイヤー選択もスペキュレーター トレーニング構成で使用する必要があります。

収集される情報は手法によって異なります。

  • EAGLE-3は、自己回帰ドラフティングのために選択されたターゲットモデルレイヤーからの隠れ状態を使用します。[4]
  • DFlashは、ターゲットモデルの特徴を使用して、将来の位置のブロックを並列に予測するネットワークをトレーニングします。[16]
  • DSparkは、DFlashスタイルのドラフトネットワークに軽量な逐次ヘッドと信頼度ヘッドを追加します。[6]
  • MTPトレーニングは、ターゲットモデル自身のMTPコンポーネントをファインチューニングするため、互換性のあるMTPレイヤーが既に含まれているターゲットモデルが必要です。[13]
スペキュレーターのトレーニングとテスト

スペキュレーター構成は、ターゲットモデルの隠れサイズ、語彙、トークナイザー、および選択されたターゲットレイヤーと一致する必要があります。ドラフトネットワークの深さ、ブロックサイズ、シーケンス長、学習率などの手法固有の設定も選択する必要があります。

トレーニング後、チェックポイントを検査し、ターゲットモデルと一緒にvLLMで提供します。トレーニング損失だけでは結果を判断するには不十分です。重要な測定値は、受け入れられた長さ、受け入れ率、ドラフトレイテンシ、GPUメモリ使用量、およびエンドツーエンドサービングスループットです。vLLM Speculatorsチュートリアルは、データ準備と隠れ状態抽出からチェックポイントテストとサービングまでの完全なパスをカバーしています。

特定のワークロードで受け入れが弱い場合、プロンプトの混合またはトレーニング構成を調整してプロセスを繰り返すことができます。主な原則は、スペキュレーターがサポートすることが期待されるのと同じターゲットモデル、生成モード、および代表的なワークロードを使用することです。


まとめ

この記事では、vLLMにおけるスペキュラティブ・デコーディングを、LLMサービングのためのドラフト・検証アプローチとして探求しました。ドラフトコンポーネントが候補となる将来のトークンを提案し、ターゲットモデルがトークンがコミットされる前に提案を評価します。

ネイティブMTP、Gemma 4 MTP、EAGLE-3、DFlash、DSparkの5つのドラフティングアプローチを検討しました。これらは主に、ターゲットモデルからの情報をどのように使用するか、および候補トークンが逐次的、並列、または並列予測と軽量逐次補正の組み合わせによって生成されるかにおいて異なります。

実験では、ROCm™ソフトウェアプラットフォームを使用したAMD Instinct™ MI300XおよびMI355X GPU上で、選択されたGemma、Qwen、MiniMax、およびKimiモデルをカバーしました。測定されたスループットは、ターゲットモデル、ドラフトチェックポイント、ワークロード、提案長、およびサービング構成によって異なりました。

テストされた構成全体で、一部の設定はより小さな変化または非スペキュラティブベースラインを下回るスループットを生成しましたが、いくつかのモデルワークロードの組み合わせは2倍を超えるスループット比を生成しました。観測された範囲の上限にある例には、gemma-4-26B-A4B-itでのDFlashで2.87倍、同じターゲットでのGemma 4 MTPで2.83倍、Kimi-K2.5でのDFlashで2.68倍が含まれます。

提案長も重要な実験変数でした。num_speculative_tokensを増やすと、スループットが最初の数設定で増加することがありましたが、より大きい値ではプラトーまたはスループットの低下につながる可能性がありました。チェックポイントの推奨事項は開始点を提供できますが、デプロイメント構成を選択する際には、代表的なワークロード測定と受け入れメトリクスが必要です。

将来の作業

将来のベンチマークでは、特にコード編集やエージェントループのような繰り返しトークンパターンを持つワークロードに対して、n-gramスペキュレーションやサフィックスデコーディングのような非学習アプローチを含めることができます。

同時実行レベル、プロンプトと出力の長さ、バッチサイズ、およびサンプリング設定全体でのより広範な評価も、スペキュラティブ・デコーディングが異なるサービング条件でどのように動作するかを示すのに役立ちます。

別の有用な方向性は、スペキュレーターのトレーニングデータがコード、数学、チャット、多言語プロンプト、ツール使用、および構造化出力全体での受け入れにどのように影響するかを研究することです。これにより、特定のワークロード用のドラフトチェックポイントを選択またはトレーニングする際に、より明確なガイダンスを提供できます。

最後に、ドラフト生成、ターゲット検証、KVキャッシュ動作、グラフ実行、およびスケジューリングのより深いプロファイリングは、ターゲットモデルとワークロード全体で観察されたパフォーマンスの違いを説明するのに役立ちます。


参考文献

  1. vLLMドキュメント、「Speculative Decoding」https://docs.vllm.ai/en/latest/features/speculative_decoding/
  2. vLLMドキュメント、「MTP Speculative Decoding」https://docs.vllm.ai/en/latest/features/speculative_decoding/mtp/
  3. Google Developers Blog、「Multi-token prediction in Gemma 4」https://blog.google/innovation-and-ai/technology/developers-tools/multi-token-prediction-gemma-4/
  4. EAGLE-3論文、「Scaling up Inference Acceleration of Large Language Models via Training-Time Test」https://arxiv.org/pdf/2503.01840
  5. Z-Lab、「DFlash」GitHubリポジトリhttps://github.com/z-lab/dflash
  6. DSpark論文、arXivプレプリントhttps://arxiv.org/pdf/2607.05147
  7. Google、「Gemma 4」Hugging Faceコレクションhttps://huggingface.co/collections/google/gemma-4
  8. LightSeek Foundationモデルコレクション(Hugging Face)https://huggingface.co/lightseekorg/models
  9. Red Hat AI、「Speculator Models」Hugging Faceコレクションhttps://huggingface.co/collections/RedHatAI/speculator-models
  10. Z-Lab、「DFlash」Hugging Faceコレクションhttps://huggingface.co/collections/z-lab/dflash
  11. DeepSeek-AI、「DeepSpec」Hugging Faceコレクションhttps://huggingface.co/collections/deepseek-ai/deepspec
  12. Inferactモデルコレクション(Hugging Face)https://huggingface.co/Inferact/models
  13. vLLM Speculatorsドキュメント、「Training a Speculator」https://docs.vllm.ai/projects/speculators/en/latest/user_guide/tutorials/train/
  14. vLLMプロジェクト、「Speculators」GitHubリポジトリhttps://github.com/vllm-project/speculators
  15. DeepSeek-AI、「DeepSpec」GitHubリポジトリhttps://github.com/deepseek-ai/DeepSpec
  16. DFlash論文、arXivプレプリントhttps://arxiv.org/pdf/2602.06036

付録

付録は、ドラフト位置ごとの受け入れ動作に焦点を当てています。ターゲットモデル、ドラフト手法、および実験を選択して、より大きな位置ごとの受け入れヒートマップを表示します。行は提案長N、列はドラフト位置です。暗いセルは高い受け入れを示します。各行には、コンテキストとして測定されたスピードアップと出力スループットも含まれています。

ターゲットモデル 手法 実験

google/gemma-4-26B-A4B-it / Gemma 4 MTP / GSM8K
GSM8Kベースライン 2,344 tok/s
Np1p2p3p4p5
N=1 1.73x4,060 tok/s MAL 1.95AR 94.8%95%
N=2 2.28x5,334 tok/s MAL 2.83AR 91.4%95%88%
N=3 2.54x5,945 tok/s MAL 3.64AR 87.9%94%88%81%
N=4 2.66x6,230 tok/s MAL 4.35AR 83.8%94%87%80%
N=5 2.74x6,434 tok/s MAL 5.00AR 80.0%94%87%80%
google/gemma-4-26B-A4B-it / Gemma 4 MTP / MATH500
MATH500ベースライン 2,181 tok/s
Np1p2p3p4p5
N=1 1.68x3,671 tok/s MAL 1.95AR 95.1%95%
N=2 2.27x4,961 tok/s MAL 2.84AR 91.8%95%89%
N=3 2.53x5,510 tok/s MAL 3.64AR 88.2%95%88%82%
N=4 2.73x5,955 tok/s MAL 4.36AR 84.1%94%88%81%
N=5 2.83x6,161 tok/s MAL 5.01AR 80.2%94%87%80%
google/gemma-4-26B-A4B-it / Gemma 4 MTP / HumanEval
HumanEvalベースライン 1,854 tok/s
Np1p2p3p4p5
N=1 1.78x3,310 tok/s MAL 1.94AR 93.8%94%
N=2 2.09x3,871 tok/s MAL 2.79AR 89.7%93%86%
N=3 2.33x4,326 tok/s MAL 3.56AR 85.4%93%85%78%
N=4 2.50x4,642 tok/s MAL 4.24AR 81.1%93%85%77%
N=5 2.59x4,810 tok/s MAL 4.81AR 76.3%92%84%76%
google/gemma-4-26B-A4B-it / Gemma 4 MTP / MBPP
MBPPベースライン 2,163 tok/s
Np1p2p3p4p5
N=1 1.73x3,744 tok/s MAL 1.90AR 90.5%91%
N=2 2.26x4,882 tok/s MAL 2.70AR 84.8%90%80%
N=3 2.50x5,413 tok/s MAL 3.38AR 79.2%90%79%69%
N=4 2.60x5,628 tok/s MAL 3.93AR 73.3%89%78%68%
N=5 2.62x5,662 tok/s MAL 4.37AR 67.4%89%77%66%
google/gemma-4-26B-A4B-it / EAGLE-3 / GSM8K
GSM8Kベースライン 2,344 tok/s
Np1p2p3p4p5
N=1 1.55x3,624 tok/s MAL 1.83AR 83.0%83%
N=2 2.09x4,888 tok/s MAL 2.47AR 73.7%82%65%
N=3 2.16x5,063 tok/s MAL 2.94AR 64.7%81%64%49%
N=4 2.16x5,059 tok/s MAL 3.27AR 56.7%80%63%48%
N=5 2.15x5,040 tok/s MAL 3.49AR 49.7%80%63%47%
google/gemma-4-26B-A4B-it / EAGLE-3 / MATH500
MATH500ベースライン 2,181 tok/s
Np1p2p3p4p5
N=1 1.54x3,362 tok/s MAL 1.87AR 87.2%87%
N=2 2.07x4,516 tok/s MAL 2.57AR 78.3%86%71%
N=3 2.21x4,810 tok/s MAL 3.09AR 69.7%85%69%55%
N=4 2.27x4,953 tok/s MAL 3.47AR 61.7%85%68%54%
N=5 2.23x4,861 tok/s MAL 3.73AR 54.6%84%68%53%
google/gemma-4-26B-A4B-it / EAGLE-3 / HumanEval
HumanEvalベースライン 1,854 tok/s
Np1p2p3p4p5
N=1 1.51x2,802 tok/s MAL 1.80AR 79.9%80%
N=2 1.85x3,438 tok/s MAL 2.40AR 69.9%79%61%
N=3 1.92x3,562 tok/s MAL 2.81AR 60.3%78%60%44%
N=4 2.16x3,997 tok/s MAL 3.07AR 51.7%77%59%42%
N=5 1.85x3,435 tok/s MAL 3.22AR 44.4%76%57%41%
google/gemma-4-26B-A4B-it / EAGLE-3 / MBPP
MBPPベースライン 2,163 tok/s
Np1p2p3p4p5
N=1 1.54x3,328 tok/s MAL 1.79AR 79.0%79%
N=2 2.08x4,506 tok/s MAL 2.36AR 68.1%78%58%
N=3 2.11x4,559 tok/s MAL 2.75AR 58.3%77%57%42%
N=4 2.11x4,574 tok/s MAL 3.00AR 50.0%76%56%40%
N=5 2.05x4,426 tok/s MAL 3.17AR 43.3%75%55%39%
google/gemma-4-26B-A4B-it / DFlash / GSM8K
GSM8Kベースライン 2,344 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.43x5,697 tok/s MAL 3.36AR 78.8%90%79%68%
N=7 2.70x6,327 tok/s MAL 5.05AR 57.9%88%76%65%56%48%40%33%
N=11 2.44x5,724 tok/s MAL 5.71AR 42.8%87%74%63%54%45%38%31%26%22%17%14%
N=15 2.12x4,973 tok/s MAL 5.89AR 32.6%86%73%62%53%44%37%30%25%20%17%13%10%8%
google/gemma-4-26B-A4B-it / DFlash / MATH500
MATH500ベースライン 2,181 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.49x5,427 tok/s MAL 3.43AR 80.9%91%81%71%
N=7 2.87x6,267 tok/s MAL 5.26AR 60.9%88%77%67%59%52%45%39%
N=11 2.70x5,888 tok/s MAL 6.09AR 46.3%87%75%65%56%49%42%37%32%27%23%19%
N=15 2.40x5,232 tok/s MAL 6.40AR 36.0%86%74%63%55%47%41%35%30%26%22%18%15%12%
google/gemma-4-26B-A4B-it / DFlash / HumanEval
HumanEvalベースライン 1,854 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.29x4,238 tok/s MAL 3.29AR 76.3%88%76%66%
N=7 2.79x5,183 tok/s MAL 4.90AR 55.7%85%71%61%53%46%40%35%
N=11 2.41x4,465 tok/s MAL 5.50AR 40.9%83%69%57%49%42%36%31%26%23%19%16%
N=15 2.26x4,193 tok/s MAL 5.76AR 31.8%82%68%57%48%41%35%30%26%22%18%15%13%10%
google/gemma-4-26B-A4B-it / DFlash / MBPP
MBPPベースライン 2,163 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.34x5,065 tok/s MAL 3.08AR 69.4%84%69%56%
N=7 2.41x5,214 tok/s MAL 4.22AR 45.9%80%64%52%42%34%27%22%
N=11 2.14x4,621 tok/s MAL 4.56AR 32.4%79%62%49%39%32%26%21%17%14%11%
N=15 1.86x4,018 tok/s MAL 4.69AR 24.6%79%62%49%38%31%25%20%16%13%10%8%6%5%
google/gemma-4-31B-it / Gemma 4 MTP / GSM8K
GSM8Kベースライン 1,631 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.52x | 2,475 tok/s MAL 1.95 | AR 95.4% | 95% | | |
| N=2 1.78x | 2,906 tok/s MAL 2.85 | AR 92.3% | 95% | 89% | |
| N=3 1.94x | 3,160 tok/s MAL 3.66 | AR 88.7% | 95% | 89% | 82% |
| N=4 2.00x | 3,267 tok/s MAL 4.40 | AR 84.9% | 95% | 88% | 82% | 75% |

google/gemma-4-31B-it / Gemma 4 MTP / MATH500
MATH500ベースライン 1,365 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.54x | 2,097 tok/s MAL 1.96 | AR 95.6% | 96% | | |
| N=2 1.86x | 2,542 tok/s MAL 2.85 | AR 92.5% | 95% | 90% | |
| N=3 2.09x | 2,851 tok/s MAL 3.67 | AR 88.9% | 95% | 89% | 83% |
| N=4 2.20x | 3,006 tok/s MAL 4.41 | AR 85.2% | 95% | 88% | 82% | 75% |

google/gemma-4-31B-it / Gemma 4 MTP / HumanEval
HumanEvalベースライン 1,228 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.46x | 1,793 tok/s MAL 1.96 | AR 95.8% | 96% | | |
| N=2 1.76x | 2,163 tok/s MAL 2.86 | AR 92.8% | 95% | 90% | |
| N=3 1.97x | 2,419 tok/s MAL 3.70 | AR 90.0% | 95% | 90% | 85% |
| N=4 1.97x | 2,424 tok/s MAL 4.43 | AR 85.7% | 95% | 88% | 83% | 77% |

google/gemma-4-31B-it / Gemma 4 MTP / MBPP
MBPPベースライン 1,519 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.55x | 2,360 tok/s MAL 1.91 | AR 91.2% | 91% | | |
| N=2 1.81x | 2,743 tok/s MAL 2.72 | AR 85.9% | 91% | 81% | |
| N=3 1.97x | 2,997 tok/s MAL 3.39 | AR 79.7% | 90% | 79% | 70% |
| N=4 1.99x | 3,020 tok/s MAL 3.95 | AR 73.7% | 90% | 79% | 68% | 59% |

google/gemma-4-31B-it / EAGLE-3 / GSM8K
GSM8Kベースライン 1,631 tok/s
Np1p2p3p4p5
N=1 1.48x2,420 tok/s MAL 1.88AR 87.5%88%
N=2 1.69x2,756 tok/s MAL 2.60AR 80.0%87%73%
N=3 1.79x2,915 tok/s MAL 3.18AR 72.7%86%72%60%
N=4 1.77x2,883 tok/s MAL 3.63AR 65.8%85%71%59%
N=5 1.79x2,913 tok/s MAL 3.99AR 59.7%85%71%59%
google/gemma-4-31B-it / EAGLE-3 / MATH500
MATH500ベースライン 1,365 tok/s
Np1p2p3p4p5
N=1 1.54x2,106 tok/s MAL 1.91AR 90.7%91%
N=2 1.85x2,521 tok/s MAL 2.69AR 84.4%90%79%
N=3 2.05x2,796 tok/s MAL 3.33AR 77.8%89%78%66%
N=4 2.03x2,768 tok/s MAL 3.84AR 71.1%89%77%65%
N=5 2.12x2,891 tok/s MAL 4.24AR 64.8%88%76%64%
google/gemma-4-31B-it / EAGLE-3 / HumanEval
HumanEvalベースライン 1,228 tok/s
Np1p2p3p4p5
N=1 1.43x1,757 tok/s MAL 1.87AR 87.4%87%
N=2 1.68x2,059 tok/s MAL 2.60AR 79.8%86%73%
N=3 1.81x2,221 tok/s MAL 3.19AR 72.9%86%73%60%
N=4 1.80x2,209 tok/s MAL 3.64AR 66.0%85%72%59%
N=5 1.86x2,278 tok/s MAL 3.97AR 59.4%85%71%58%
google/gemma-4-31B-it / EAGLE-3 / MBPP
MBPPベースライン 1,519 tok/s
Np1p2p3p4p5
N=1 1.52x2,306 tok/s MAL 1.85AR 84.7%85%
N=2 1.73x2,626 tok/s MAL 2.52AR 75.8%84%68%
N=3 1.84x2,793 tok/s MAL 3.03AR 67.6%83%67%54%
N=4 1.80x2,736 tok/s MAL 3.41AR 60.2%82%66%52%
N=5 1.80x2,730 tok/s MAL 3.67AR 53.3%81%65%51%
google/gemma-4-31B-it / DFlash / GSM8K
GSM8Kベースライン 1,631 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.85x3,012 tok/s MAL 3.51AR 83.7%93%84%74%
N=7 1.95x3,183 tok/s MAL 5.54AR 64.8%92%82%72%64%55%48%41%
N=11 1.76x2,877 tok/s MAL 6.47AR 49.7%91%80%70%61%53%46%39%33%28%24%20%
N=15 1.53x2,489 tok/s MAL 6.84AR 38.9%91%80%70%60%52%44%37%32%27%23%19%16%13%
google/gemma-4-31B-it / DFlash / MATH500
MATH500ベースライン 1,365 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.03x2,770 tok/s MAL 3.56AR 85.5%94%86%77%
N=7 2.34x3,197 tok/s MAL 5.76AR 68.0%93%83%74%67%59%53%47%
N=11 2.15x2,934 tok/s MAL 6.88AR 53.4%92%82%72%64%56%50%44%39%34%30%26%
N=15 1.91x2,605 tok/s MAL 7.39AR 42.6%91%81%71%62%55%48%42%37%33%28%25%22%19%
google/gemma-4-31B-it / DFlash / HumanEval
HumanEvalベースライン 1,228 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.88x2,309 tok/s MAL 3.60AR 86.8%94%87%79%
N=7 2.02x2,482 tok/s MAL 5.82AR 68.9%92%83%75%67%61%55%49%
N=11 2.05x2,514 tok/s MAL 7.00AR 54.5%92%82%72%64%57%51%46%41%36%32%28%
N=15 1.85x2,274 tok/s MAL 7.51AR 43.4%91%80%70%62%55%49%44%39%35%30%26%23%19%
google/gemma-4-31B-it / DFlash / MBPP
MBPPベースライン 1,519 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.89x2,873 tok/s MAL 3.31AR 77.1%90%77%65%
N=7 1.92x2,914 tok/s MAL 4.82AR 54.5%88%73%61%51%43%36%30%
N=11 1.65x2,512 tok/s MAL 5.38AR 39.8%87%72%59%48%40%33%28%23%19%16%
N=15 1.40x2,127 tok/s MAL 5.56AR 30.4%87%71%57%47%39%32%26%22%18%15%13%10%8%
google/gemma-4-31B-it / DSpark / GSM8K
GSM8Kベースライン 1,631 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.62x2,635 tok/s MAL 3.33AR 77.7%88%78%68%
N=7 1.82x2,971 tok/s MAL 5.07AR 58.1%88%77%67%57%47%39%33%
N=11 1.52x2,484 tok/s MAL 5.51AR 41.0%85%74%63%54%44%37%30%24%18%13%
N=15 1.32x2,155 tok/s MAL 5.69AR 31.3%86%75%65%54%45%37%30%25%19%13%9%5%3%
google/gemma-4-31B-it / DSpark / MATH500
MATH500ベースライン 1,365 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.98x2,703 tok/s MAL 3.45AR 81.7%91%82%73%
N=7 2.20x3,004 tok/s MAL 5.30AR 61.4%89%78%69%60%52%44%38%
N=11 1.91x2,612 tok/s MAL 5.96AR 45.1%89%77%67%58%50%42%36%29%22%16%
N=15 1.61x2,197 tok/s MAL 6.05AR 33.7%88%77%67%57%49%42%35%28%22%16%12%8%5%
google/gemma-4-31B-it / DSpark / HumanEval
HumanEvalベースライン 1,228 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.34x1,648 tok/s MAL 3.36AR 78.7%89%79%68%
N=7 1.98x2,425 tok/s MAL 5.05AR 57.8%88%77%66%56%47%39%31%
N=11 1.73x2,121 tok/s MAL 5.47AR 40.6%87%76%64%54%45%37%30%22%16%10%
N=15 1.47x1,811 tok/s MAL 5.55AR 30.3%88%76%65%54%46%38%30%22%16%10%6%3%2%
google/gemma-4-31B-it / DSpark / MBPP
MBPPベースライン 1,519 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.84x2,797 tok/s MAL 3.17AR 72.4%86%72%60%
N=7 1.80x2,730 tok/s MAL 4.41AR 48.7%84%69%55%45%36%29%23%
N=11 1.50x2,272 tok/s MAL 4.74AR 34.0%83%67%54%44%35%28%22%17%12%8%
N=15 1.23x1,876 tok/s MAL 4.77AR 25.2%83%67%54%43%35%28%22%16%12%8%5%3%1%
Qwen/Qwen3-8B / EAGLE-3 / GSM8K
GSM8Kベースライン 3,698 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 0.71x | 2,634 tok/s MAL 1.86 | AR 86.3% | 86% | | | | |
| N=2 0.91x | 3,349 tok/s MAL 2.57 | AR 78.3% | 86% | 71% | | | |
| N=3 0.99x | 3,645 tok/s MAL 3.12 | AR 70.6% | 85% | 70% | 57% | | |
| N=4 1.10x | 4,079 tok/s MAL 3.54 | AR 63.5% | 84% | 69% | 56% | 45% | |
| N=5 1.18x | 4,347 tok/s MAL 3.86 | AR 57.3% | 84% | 68% | 56% | 44% | 35% |
| N=6 1.17x | 4,322 tok/s MAL 4.09 | AR 51.5% | 84% | 68% | 55% | 43% | 34% | 26% |
| N=7 1.17x | 4,327 tok/s MAL 4.25 | AR 46.5% | 83% | 67% | 54% | 43% | 34% | 26% | 19% |

Qwen/Qwen3-8B / EAGLE-3 / MATH500
MATH500ベースライン 3,530 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 0.44x | 1,563 tok/s MAL 1.89 | AR 89.0% | 89% | | | | |
| N=2 0.61x | 2,141 tok/s MAL 2.64 | AR 82.2% | 88% | 76% | | | |
| N=3 0.72x | 2,527 tok/s MAL 3.27 | AR 75.6% | 88% | 75% | 64% | | |
| N=4 0.78x | 2,753 tok/s MAL 3.75 | AR 68.7% | 87% | 74% | 62% | 52% | |
| N=5 0.83x | 2,935 tok/s MAL 4.14 | AR 62.8% | 87% | 73% | 61% | 51% | 42% |
| N=6 0.85x | 3,010 tok/s MAL 4.43 | AR 57.2% | 86% | 73% | 61% | 50% | 41% | 33% |
| N=7 0.88x | 3,105 tok/s MAL 4.68 | AR 52.5% | 86% | 72% | 60% | 50% | 41% | 33% | 27% |

Qwen/Qwen3-8B / EAGLE-3 / HumanEval
HumanEvalベースライン 3,226 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 0.61x | 1,955 tok/s MAL 1.84 | AR 83.6% | 84% | | | | |
| N=2 0.86x | 2,776 tok/s MAL 2.50 | AR 74.8% | 83% | 67% | | | |
| N=3 1.00x | 3,238 tok/s MAL 2.97 | AR 65.8% | 81% | 65% | 51% | | |
| N=4 1.04x | 3,346 tok/s MAL 3.36 | AR 58.9% | 81% | 65% | 50% | 39% | |
| N=5 1.05x | 3,376 tok/s MAL 3.59 | AR 51.9% | 80% | 64% | 49% | 38% | 29% |
| N=6 1.04x | 3,369 tok/s MAL 3.80 | AR 46.7% | 80% | 63% | 49% | 38% | 29% | 22% |
| N=7 1.03x | 3,337 tok/s MAL 3.96 | AR 42.2% | 80% | 63% | 48% | 37% | 28% | 22% | 17% |

Qwen/Qwen3-8B / EAGLE-3 / MBPP
MBPPベースライン 3,268 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 0.80x | 2,621 tok/s MAL 1.81 | AR 81.3% | 81% | | | | |
| N=2 0.91x | 2,985 tok/s MAL 2.43 | AR 71.6% | 81% | 63% | | | |
| N=3 1.00x | 3,254 tok/s MAL 2.89 | AR 63.1% | 80% | 62% | 47% | | |
| N=4 1.11x | 3,631 tok/s MAL 3.23 | AR 55.7% | 79% | 62% | 47% | 35% | |
| N=5 1.16x | 3,798 tok/s MAL 3.42 | AR 48.5% | 79% | 60% | 45% | 34% | 24% |
| N=6 1.07x | 3,513 tok/s MAL 3.64 | AR 43.9% | 79% | 61% | 46% | 34% | 25% | 18% |
| N=7 1.06x | 3,475 tok/s MAL 3.68 | AR 38.3% | 78% | 60% | 45% | 33% | 24% | 17% | 12% |

Qwen/Qwen3-8B / DFlash / GSM8K
GSM8Kベースライン 3,698 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.23x4,535 tok/s MAL 3.23AR 74.3%87%74%62%
N=7 1.25x4,608 tok/s MAL 4.84AR 54.9%86%73%61%51%44%38%32%
N=11 1.27x4,678 tok/s MAL 5.51AR 41.0%85%71%58%49%41%35%30%26%22%19%
N=15 1.20x4,442 tok/s MAL 6.04AR 33.6%87%73%60%50%42%35%30%26%22%19%16%14%12%
Qwen/Qwen3-8B / DFlash / MATH500
MATH500ベースライン 3,530 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 0.99x3,487 tok/s MAL 3.41AR 80.3%90%80%71%
N=7 1.07x3,794 tok/s MAL 5.53AR 64.7%89%79%70%62%56%51%45%
N=11 1.08x3,828 tok/s MAL 6.69AR 51.7%89%77%67%59%53%48%43%39%35%32%28%
N=15 1.10x3,868 tok/s MAL 7.52AR 43.5%90%78%68%59%53%47%42%38%34%31%28%25%22%
Qwen/Qwen3-8B / DFlash / HumanEval
HumanEvalベースライン 3,226 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.20x3,866 tok/s MAL 3.45AR 81.6%91%81%73%
N=7 1.27x4,103 tok/s MAL 5.27AR 61.1%88%77%66%58%52%46%41%
N=11 1.27x4,081 tok/s MAL 5.68AR 42.5%85%71%59%50%42%36%32%28%24%22%19%
N=15 1.20x3,877 tok/s MAL 6.15AR 34.3%87%72%59%49%41%35%31%27%24%21%18%16%14%
Qwen/Qwen3-8B / DFlash / MBPP
MBPPベースライン 3,268 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.21x3,952 tok/s MAL 3.44AR 81.5%91%81%73%
N=7 1.22x3,982 tok/s MAL 4.79AR 54.2%86%71%60%50%43%37%32%
N=11 1.22x3,974 tok/s MAL 5.23AR 38.5%84%69%56%46%38%32%27%23%19%16%
N=15 1.13x3,695 tok/s MAL 5.59AR 30.6%86%71%57%47%38%32%26%22%18%15%13%11%9%
Qwen/Qwen3.5-27B / Native MTP / GSM8K
GSM8Kベースライン 1,555 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 1.11x | 1,724 tok/s MAL 1.97 | AR 96.5% | 97% | | | | |
| N=2 1.37x | 2,133 tok/s MAL 2.86 | AR 92.8% | 96% | 89% | | | |
| N=3 1.50x | 2,337 tok/s MAL 3.65 | AR 88.2% | 96% | 89% | 80% | | |
| N=4 1.62x | 2,522 tok/s MAL 4.32 | AR 83.0% | 96% | 88% | 79% | 70% | |
| N=5 1.63x | 2,537 tok/s MAL 4.89 | AR 77.9% | 95% | 87% | 78% | 69% | 60% |
| N=6 1.66x | 2,575 tok/s MAL 5.37 | AR 72.8% | 95% | 87% | 77% | 68% | 59% | 51% |
| N=7 1.56x | 2,423 tok/s MAL 5.77 | AR 68.2% | 95% | 86% | 77% | 68% | 59% | 50% | 43% |

Qwen/Qwen3.5-27B / Native MTP / MATH500
MATH500ベースライン 1,500 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 1.10x | 1,644 tok/s MAL 1.97 | AR 96.5% | 97% | | | | |
| N=2 1.39x | 2,085 tok/s MAL 2.86 | AR 92.8% | 96% | 89% | | | |
| N=3 1.56x | 2,345 tok/s MAL 3.65 | AR 88.2% | 96% | 89% | 80% | | |
| N=4 1.66x | 2,489 tok/s MAL 4.32 | AR 83.0% | 96% | 88% | 79% | 70% | |
| N=5 1.71x | 2,564 tok/s MAL 4.89 | AR 77.8% | 95% | 87% | 78% | 69% | 60% |
| N=6 1.70x | 2,549 tok/s MAL 5.35 | AR 72.5% | 95% | 87% | 77% | 67% | 58% | 50% |
| N=7 1.55x | 2,325 tok/s MAL 5.73 | AR 67.5% | 95% | 86% | 77% | 67% | 58% | 49% | 42% |

Qwen/Qwen3.5-27B / Native MTP / HumanEval
HumanEvalベースライン 1,256 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 1.15x | 1,439 tok/s MAL 1.97 | AR 96.5% | 97% | | | | |
| N=2 1.20x | 1,507 tok/s MAL 2.86 | AR 92.5% | 96% | 89% | | | |
| N=3 1.53x | 1,917 tok/s MAL 3.63 | AR 87.8% | 95% | 88% | 80% | | |
| N=4 1.63x | 2,044 tok/s MAL 4.31 | AR 82.7% | 95% | 87% | 79% | 70% | |
| N=5 1.55x | 1,953 tok/s MAL 4.89 | AR 77.8% | 95% | 87% | 78% | 69% | 61% |
| N=6 1.46x | 1,836 tok/s MAL 5.39 | AR 73.1% | 95% | 86% | 77% | 69% | 60% | 52% |
| N=7 1.41x | 1,766 tok/s MAL 5.73 | AR 67.6% | 94% | 85% | 76% | 67% | 58% | 50% | 43% |

Qwen/Qwen3.5-27B / Native MTP / MBPP
MBPPベースライン 1,418 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 1.10x | 1,562 tok/s MAL 1.94 | AR 94.4% | 94% | | | | |
| N=2 1.39x | 1,974 tok/s MAL 2.76 | AR 88.2% | 93% | 83% | | | |
| N=3 1.49x | 2,117 tok/s MAL 3.46 | AR 81.9% | 93% | 82% | 71% | | |
| N=4 1.60x | 2,268 tok/s MAL 4.03 | AR 75.7% | 93% | 81% | 70% | 59% | |
| N=5 1.59x | 2,254 tok/s MAL 4.42 | AR 68.3% | 92% | 79% | 67% | 56% | 47% |
| N=6 1.57x | 2,233 tok/s MAL 4.77 | AR 62.9% | 92% | 79% | 67% | 56% | 47% | 38% |
| N=7 1.41x | 1,995 tok/s MAL 5.02 | AR 57.5% | 91% | 78% | 65% | 55% | 46% | 38% | 30% |

Qwen/Qwen3.5-27B / DFlash / GSM8K
GSM8Kベースライン 1,555 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.45x2,247 tok/s MAL 3.57AR 85.6%95%86%76%
N=7 1.54x2,397 tok/s MAL 5.64AR 66.3%93%83%74%65%57%50%43%
N=11 1.50x2,335 tok/s MAL 6.63AR 51.2%92%81%71%62%54%47%41%36%31%27%
N=15 1.32x2,054 tok/s MAL 7.11AR 40.7%92%81%70%61%52%45%39%34%30%26%22%19%16%
Qwen/Qwen3.5-27B / DFlash / MATH500
MATH500ベースライン 1,500 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.51x2,259 tok/s MAL 3.60AR 86.8%95%87%78%
N=7 1.61x2,421 tok/s MAL 5.80AR 68.6%93%84%75%67%60%53%47%
N=11 1.65x2,482 tok/s MAL 6.98AR 54.3%93%82%73%64%57%50%45%40%35%31%27%
N=15 1.47x2,208 tok/s MAL 7.56AR 43.7%93%82%72%63%56%49%43%38%34%30%26%22%19%
Qwen/Qwen3.5-27B / DFlash / HumanEval
HumanEvalベースライン 1,256 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.46x1,829 tok/s MAL 3.61AR 87.0%95%87%79%
N=7 1.22x1,535 tok/s MAL 5.82AR 68.9%93%84%75%67%61%55%49%
N=11 1.40x1,757 tok/s MAL 6.88AR 53.5%91%80%70%62%56%50%45%40%36%32%28%
N=15 1.40x1,761 tok/s MAL 7.57AR 43.8%92%81%70%62%55%49%43%38%34%31%27%24%21%
Qwen/Qwen3.5-27B / DFlash / MBPP
MBPPベースライン 1,418 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.44x2,042 tok/s MAL 3.37AR 79.0%91%79%67%
N=7 1.38x1,963 tok/s MAL 4.91AR 55.9%88%74%61%51%43%37%32%
N=11 1.25x1,770 tok/s MAL 5.51AR 41.0%87%70%57%48%41%35%30%26%23%19%16%
N=15 1.06x1,504 tok/s MAL 5.99AR 33.3%87%72%58%48%41%35%30%26%22%19%16%14%12%
Qwen/Qwen3.5-122B-A10B / Native MTP / GSM8K
GSM8Kベースライン 1,494 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 1.02x | 1,528 tok/s MAL 1.96 | AR 96.0% | 96% | | | | |
| N=2 1.47x | 2,202 tok/s MAL 2.85 | AR 92.6% | 96% | 89% | | | |
| N=3 1.64x | 2,445 tok/s MAL 3.64 | AR 87.9% | 95% | 88% | 80% | | |
| N=4 1.81x | 2,697 tok/s MAL 4.31 | AR 82.8% | 95% | 87% | 79% | 71% | |
| N=5 1.98x | 2,958 tok/s MAL 4.93 | AR 78.6% | 95% | 87% | 79% | 70% | 62% |
| N=6 1.98x | 2,953 tok/s MAL 5.42 | AR 73.6% | 95% | 87% | 78% | 69% | 61% | 53% |
| N=7 2.08x | 3,107 tok/s MAL 5.85 | AR 69.3% | 95% | 86% | 77% | 69% | 60% | 53% | 46% |

Qwen/Qwen3.5-122B-A10B / Native MTP / MATH500
MATH500ベースライン 1,446 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 1.06x | 1,529 tok/s MAL 1.97 | AR 96.5% | 97% | | | | |
| N=2 1.58x | 2,280 tok/s MAL 2.86 | AR 93.0% | 96% | 90% | | | |
| N=3 1.82x | 2,625 tok/s MAL 3.67 | AR 89.0% | 96% | 90% | 82% | | |
| N=4 1.97x | 2,843 tok/s MAL 4.37 | AR 84.3% | 96% | 89% | 81% | 72% | |
| N=5 2.14x | 3,088 tok/s MAL 4.98 | AR 79.6% | 95% | 88% | 80% | 72% | 63% |
| N=6 2.13x | 3,078 tok/s MAL 5.49 | AR 74.9% | 95% | 88% | 79% | 71% | 62% | 55% |
| N=7 2.20x | 3,183 tok/s MAL 5.91 | AR 70.1% | 95% | 87% | 78% | 70% | 61% | 54% | 46% |

Qwen/Qwen3.5-122B-A10B / Native MTP / HumanEval
HumanEvalベースライン 1,105 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 1.02x | 1,131 tok/s MAL 1.97 | AR 96.6% | 97% | | | | |
| N=2 1.46x | 1,610 tok/s MAL 2.86 | AR 93.1% | 96% | 90% | | | |
| N=3 1.69x | 1,868 tok/s MAL 3.68 | AR 89.3% | 96% | 90% | 82% | | |
| N=4 1.69x | 1,869 tok/s MAL 4.38 | AR 84.6% | 95% | 89% | 81% | 73% | |
| N=5 1.83x | 2,017 tok/s MAL 5.03 | AR 80.5% | 95% | 88% | 80% | 73% | 66% |
| N=6 1.83x | 2,021 tok/s MAL 5.65 | AR 77.6% | 95% | 89% | 81% | 74% | 67% | 60% |
| N=7 1.85x | 2,044 tok/s MAL 6.07 | AR 72.4% | 95% | 87% | 80% | 72% | 65% | 57% | 51% |

Qwen/Qwen3.5-122B-A10B / Native MTP / MBPP
MBPPベースライン 1,459 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 | p7 |
|---|---|---|---|---|---|---|
| N=1 0.99x | 1,447 tok/s MAL 1.95 | AR 95.0% | 95% | | | | |
| N=2 1.43x | 2,092 tok/s MAL 2.86 | AR 92.8% | 96% | 90% | | | |
| N=3 1.60x | 2,336 tok/s MAL 3.56 | AR 85.4% | 94% | 86% | 77% | | |
| N=4 1.66x | 2,422 tok/s MAL 4.19 | AR 79.7% | 93% | 85% | 75% | 66% | |
| N=5 1.75x | 2,558 tok/s MAL 4.68 | AR 73.5% | 93% | 83% | 73% | 64% | 56% |
| N=6 1.84x | 2,678 tok/s MAL 5.16 | AR 69.4% | 93% | 83% | 73% | 64% | 56% | 49% |
| N=7 1.88x | 2,747 tok/s MAL 5.56 | AR 65.1% | 93% | 83% | 73% | 64% | 55% | 48% | 41% |

Qwen/Qwen3.5-122B-A10B / DFlash / GSM8K
GSM8Kベースライン 1,494 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.41x2,111 tok/s MAL 3.26AR 75.4%88%75%63%
N=7 1.58x2,356 tok/s MAL 4.19AR 45.6%81%65%52%41%33%26%21%
N=11 1.38x2,066 tok/s MAL 4.17AR 28.8%78%61%47%36%27%21%15%11%9%6%
N=15 1.01x1,508 tok/s MAL 3.81AR 18.7%77%58%43%31%23%16%11%8%5%4%2%2%1%
Qwen/Qwen3.5-122B-A10B / DFlash / MATH500
MATH500ベースライン 1,446 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.62x2,336 tok/s MAL 3.34AR 78.0%89%78%67%
N=7 1.78x2,572 tok/s MAL 4.45AR 49.2%84%68%56%45%37%30%25%
N=11 1.64x2,367 tok/s MAL 4.50AR 31.9%82%65%51%40%31%24%19%14%11%8%
N=15 1.25x1,805 tok/s MAL 4.01AR 20.0%80%60%45%33%25%18%13%9%6%4%2%2%1%
Qwen/Qwen3.5-122B-A10B / DFlash / HumanEval
HumanEvalベースライン 1,105 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.40x1,551 tok/s MAL 3.40AR 79.9%90%80%70%
N=7 1.66x1,838 tok/s MAL 4.53AR 50.5%84%69%57%47%38%32%26%
N=11 1.20x1,331 tok/s MAL 4.56AR 32.4%82%64%51%40%31%25%20%16%12%9%
N=15 0.94x1,042 tok/s MAL 4.05AR 20.3%79%60%45%34%25%19%14%10%7%5%3%2%1%
Qwen/Qwen3.5-122B-A10B / DFlash / MBPP
MBPPベースライン 1,459 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.38x2,019 tok/s MAL 3.29AR 76.3%88%76%65%
N=7 1.05x1,529 tok/s MAL 4.12AR 44.6%80%62%49%40%33%27%22%
N=11 1.34x1,958 tok/s MAL 4.21AR 29.1%80%59%45%35%27%21%17%13%10%8%
N=15 0.95x1,386 tok/s MAL 3.68AR 17.9%75%53%38%28%21%15%11%9%6%4%3%2%1%
Qwen/Qwen3.6-27B / Native MTP / GSM8K
GSM8Kベースライン 1,521 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.20x | 1,830 tok/s MAL 1.95 | AR 94.5% | 95% | | |
| N=2 1.45x | 2,212 tok/s MAL 2.79 | AR 89.7% | 94% | 85% | | |
| N=3 1.61x | 2,441 tok/s MAL 3.53 | AR 84.2% | 94% | 84% | 75% | |
| N=4 1.69x | 2,570 tok/s MAL 4.15 | AR 78.7% | 93% | 83% | 74% | 65% |
| N=5 1.72x | 2,609 tok/s MAL 4.66 | AR 73.3% | 93% | 82% | 73% | 64% | 55% |

Qwen/Qwen3.6-27B / Native MTP / MATH500
MATH500ベースライン 1,514 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.20x | 1,820 tok/s MAL 1.96 | AR 95.9% | 96% | | | |
| N=2 1.48x | 2,235 tok/s MAL 2.84 | AR 91.9% | 96% | 88% | | |
| N=3 1.64x | 2,488 tok/s MAL 3.61 | AR 87.1% | 95% | 87% | 79% | |
| N=4 1.75x | 2,647 tok/s MAL 4.28 | AR 82.1% | 95% | 87% | 78% | 69% |
| N=5 1.78x | 2,701 tok/s MAL 4.83 | AR 76.7% | 94% | 86% | 77% | 68% | 59% |

Qwen/Qwen3.6-27B / Native MTP / HumanEval
HumanEvalベースライン 1,481 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.19x | 1,756 tok/s MAL 1.93 | AR 92.9% | 93% | | | |
| N=2 1.42x | 2,101 tok/s MAL 2.73 | AR 86.6% | 92% | 81% | | |
| N=3 1.53x | 2,270 tok/s MAL 3.40 | AR 80.2% | 92% | 80% | 69% | |
| N=4 1.60x | 2,373 tok/s MAL 3.94 | AR 73.6% | 91% | 79% | 67% | 57% |
| N=5 1.60x | 2,365 tok/s MAL 4.36 | AR 67.2% | 90% | 78% | 66% | 56% | 47% |

Qwen/Qwen3.6-27B / Native MTP / MBPP
MBPPベースライン 1,495 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.22x | 1,827 tok/s MAL 1.92 | AR 91.7% | 92% | | | |
| N=2 1.44x | 2,156 tok/s MAL 2.69 | AR 84.6% | 91% | 78% | | |
| N=3 1.57x | 2,341 tok/s MAL 3.31 | AR 77.2% | 90% | 77% | 64% | |
| N=4 1.61x | 2,411 tok/s MAL 3.80 | AR 70.0% | 89% | 76% | 63% | 52% |
| N=5 1.60x | 2,389 tok/s MAL 4.16 | AR 63.3% | 89% | 74% | 62% | 50% | 41% |

Qwen/Qwen3.6-27B / DFlash / GSM8K
GSM8Kベースライン 1,521 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.39x2,112 tok/s MAL 3.48AR 82.6%93%83%72%
N=7 1.43x2,176 tok/s MAL 5.34AR 62.0%91%80%69%60%52%44%38%
N=11 1.42x2,160 tok/s MAL 6.18AR 47.1%90%78%67%57%49%42%36%31%26%22%
N=15 1.24x1,883 tok/s MAL 6.52AR 36.8%90%77%66%56%48%41%34%29%25%21%18%15%13%
Qwen/Qwen3.6-27B / DFlash / MATH500
MATH500ベースライン 1,514 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.44x2,185 tok/s MAL 3.58AR 85.9%94%86%77%
N=7 1.54x2,339 tok/s MAL 5.73AR 67.6%93%83%74%66%59%53%46%
N=11 1.59x2,411 tok/s MAL 6.86AR 53.3%92%81%72%63%56%49%44%39%34%30%26%
N=15 1.41x2,136 tok/s MAL 7.37AR 42.5%91%80%70%61%54%47%42%37%32%28%25%22%19%
Qwen/Qwen3.6-27B / DFlash / HumanEval
HumanEvalベースライン 1,481 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.40x2,067 tok/s MAL 3.44AR 81.4%92%82%70%
N=7 1.40x2,070 tok/s MAL 5.19AR 59.9%91%78%67%57%49%42%36%
N=11 1.39x2,061 tok/s MAL 5.96AR 45.1%90%76%64%54%45%39%33%29%25%22%20%
N=15 1.21x1,793 tok/s MAL 6.27AR 35.2%89%75%62%52%43%36%31%27%23%20%18%15%14%
Qwen/Qwen3.6-35B-A3B / Native MTP / GSM8K
GSM8Kベースライン 2,275 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 |
|---|---|---|---|---|---|
| N=1 0.89x | 2,023 tok/s MAL 1.94 | AR 93.7% | 94% | | | |
| N=2 1.12x | 2,544 tok/s MAL 2.77 | AR 88.5% | 93% | 84% | | | |
| N=3 1.27x | 2,894 tok/s MAL 3.49 | AR 82.8% | 93% | 83% | 73% | | |
| N=4 1.25x | 2,854 tok/s MAL 4.07 | AR 76.8% | 92% | 82% | 72% | 62% | |
| N=5 1.31x | 2,976 tok/s MAL 4.57 | AR 71.4% | 92% | 81% | 71% | 61% | 53% |
| N=6 1.43x | 3,253 tok/s MAL 4.97 | AR 66.1% | 91% | 80% | 70% | 60% | 52% | 44% |

Qwen/Qwen3.6-35B-A3B / Native MTP / MATH500
MATH500ベースライン 2,235 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 |
|---|---|---|---|---|---|
| N=1 0.88x | 1,973 tok/s MAL 1.95 | AR 95.5% | 96% | | | |
| N=2 1.13x | 2,515 tok/s MAL 2.83 | AR 91.3% | 95% | 88% | | | |
| N=3 1.29x | 2,889 tok/s MAL 3.59 | AR 86.3% | 95% | 87% | 78% | | |
| N=4 1.28x | 2,871 tok/s MAL 4.24 | AR 81.0% | 94% | 86% | 77% | 68% | |
| N=5 1.35x | 3,020 tok/s MAL 4.79 | AR 75.7% | 94% | 85% | 76% | 67% | 58% |
| N=6 1.49x | 3,334 tok/s MAL 5.25 | AR 70.8% | 93% | 84% | 75% | 66% | 57% | 50% |

Qwen/Qwen3.6-35B-A3B / Native MTP / HumanEval
HumanEvalベースライン 2,193 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 |
|---|---|---|---|---|---|
| N=1 0.87x | 1,900 tok/s MAL 1.92 | AR 91.6% | 92% | | | |
| N=2 1.07x | 2,346 tok/s MAL 2.70 | AR 84.8% | 91% | 79% | | | |
| N=3 1.20x | 2,640 tok/s MAL 3.33 | AR 77.7% | 90% | 77% | 66% | | |
| N=4 1.17x | 2,559 tok/s MAL 3.85 | AR 71.3% | 90% | 77% | 65% | 54% | |
| N=5 1.18x | 2,587 tok/s MAL 4.21 | AR 64.2% | 89% | 75% | 62% | 52% | 43% |
| N=6 1.28x | 2,811 tok/s MAL 4.51 | AR 58.4% | 88% | 74% | 61% | 50% | 42% | 35% |

Qwen/Qwen3.6-35B-A3B / Native MTP / MBPP
MBPPベースライン 2,258 tok/s

| N | p1 | p2 | p3 | p4 | p5 | p6 |
|---|---|---|---|---|---|
| N=1 0.89x | 2,005 tok/s MAL 1.90 | AR 90.5% | 91% | | | |
| N=2 1.10x | 2,480 tok/s MAL 2.66 | AR 82.9% | 90% | 76% | | | |
| N=3 1.23x | 2,773 tok/s MAL 3.26 | AR 75.2% | 89% | 75% | 62% | | |
| N=4 1.19x | 2,676 tok/s MAL 3.72 | AR 67.9% | 88% | 74% | 61% | 50% | |
| N=5 1.22x | 2,747 tok/s MAL 4.08 | AR 61.5% | 87% | 73% | 59% | 49% | 40% |
| N=6 1.29x | 2,903 tok/s MAL 4.34 | AR 55.6% | 87% | 72% | 58% | 47% | 39% | 31% |

Qwen/Qwen3.6-35B-A3B / DFlash / GSM8K
GSM8Kベースライン 2,275 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.54x3,510 tok/s MAL 3.47AR 82.4%92%82%73%
N=7 1.88x4,276 tok/s MAL 5.42AR 63.1%90%79%69%61%54%48%42%
N=11 1.70x3,871 tok/s MAL 6.40AR 49.1%89%77%66%58%51%45%39%35%30%27%
N=15 1.49x3,394 tok/s MAL 6.88AR 39.2%89%75%65%56%49%43%37%33%29%25%22%20%17%
Qwen/Qwen3.6-35B-A3B / DFlash / MATH500
MATH500ベースライン 2,235 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.64x3,655 tok/s MAL 3.58AR 86.1%94%86%78%
N=7 2.06x4,600 tok/s MAL 5.82AR 68.8%93%83%74%67%61%55%50%
N=11 1.97x4,404 tok/s MAL 7.13AR 55.7%91%80%71%64%58%52%47%43%39%35%31%
N=15 1.76x3,938 tok/s MAL 7.80AR 45.3%91%79%70%62%55%50%45%40%36%32%29%27%24%
Qwen/Qwen3.6-35B-A3B / DFlash / HumanEval
HumanEvalベースライン 2,193 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.58x3,476 tok/s MAL 3.42AR 80.7%92%80%70%
N=7 1.84x4,036 tok/s MAL 5.22AR 60.3%90%77%66%57%50%44%38%
N=11 1.63x3,584 tok/s MAL 6.01AR 45.6%89%75%63%53%46%39%34%30%27%24%22%
N=15 1.52x3,334 tok/s MAL 6.39AR 35.9%88%73%61%51%43%37%32%28%25%22%20%18%16%
Qwen/Qwen3.6-35B-A3B / DFlash / MBPP
MBPPベースライン 2,258 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.53x3,462 tok/s MAL 3.34AR 77.9%91%78%66%
N=7 1.77x3,990 tok/s MAL 4.87AR 55.3%88%74%61%51%43%37%32%
N=11 1.53x3,444 tok/s MAL 5.52AR 41.1%87%72%59%49%41%35%30%25%22%19%16%
N=15 1.38x3,127 tok/s MAL 5.81AR 32.1%87%71%57%47%39%33%28%24%20%17%15%13%11%
moonshotai/Kimi-K2.5 / EAGLE-3 / GSM8K
GSM8Kベースライン 324 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.54x | 499 tok/s MAL 1.92 | AR 91.6% | 92% | | |
| N=2 1.85x | 600 tok/s MAL 2.72 | AR 85.8% | 91% | 81% | |
| N=3 2.09x | 677 tok/s MAL 3.40 | AR 80.0% | 90% | 80% | 70% |
| N=4 2.24x | 728 tok/s MAL 3.96 | AR 73.9% | 89% | 78% | 68% | 60% |

moonshotai/Kimi-K2.5 / EAGLE-3 / MATH500
MATH500ベースライン 310 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.54x | 480 tok/s MAL 1.94 | AR 93.6% | 94% | | |
| N=2 1.88x | 584 tok/s MAL 2.77 | AR 88.6% | 93% | 84% | |
| N=3 2.14x | 664 tok/s MAL 3.48 | AR 82.7% | 92% | 83% | 73% |
| N=4 2.33x | 722 tok/s MAL 4.09 | AR 77.2% | 92% | 82% | 72% | 63% |

moonshotai/Kimi-K2.5 / EAGLE-3 / HumanEval
HumanEvalベースライン 301 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.51x | 456 tok/s MAL 1.90 | AR 90.3% | 90% | | |
| N=2 1.81x | 546 tok/s MAL 2.67 | AR 83.6% | 89% | 78% | |
| N=3 2.03x | 610 tok/s MAL 3.30 | AR 76.8% | 89% | 76% | 66% |
| N=4 2.16x | 649 tok/s MAL 3.79 | AR 69.8% | 87% | 74% | 63% | 54% |

moonshotai/Kimi-K2.5 / EAGLE-3 / MBPP
MBPPベースライン 311 tok/s

| N | p1 | p2 | p3 | p4 |
|---|---|---|---|
| N=1 1.52x | 472 tok/s MAL 1.88 | AR 88.1% | 88% | | |
| N=2 1.78x | 553 tok/s MAL 2.59 | AR 79.6% | 87% | 72% | |
| N=3 1.95x | 608 tok/s MAL 3.14 | AR 71.5% | 86% | 71% | 58% |
| N=4 1.99x | 619 tok/s MAL 3.53 | AR 63.4% | 84% | 69% | 56% | 45% |

moonshotai/Kimi-K2.5 / DFlash / GSM8K
GSM8Kベースライン 324 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.01x651 tok/s MAL 3.30AR 76.6%89%77%64%
N=7 2.37x768 tok/s MAL 4.80AR 54.3%87%73%61%51%43%36%29%
N=11 2.23x723 tok/s MAL 5.06AR 36.9%86%71%58%47%38%31%25%19%15%11%
N=15 2.05x665 tok/s MAL 5.02AR 26.8%85%70%56%46%37%30%24%18%14%10%6%4%2%
moonshotai/Kimi-K2.5 / DFlash / MATH500
MATH500ベースライン 310 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.12x659 tok/s MAL 3.49AR 83.1%93%83%73%
N=7 2.68x832 tok/s MAL 5.38AR 62.6%91%80%70%61%53%46%39%
N=11 2.64x818 tok/s MAL 5.90AR 44.5%90%77%66%56%48%41%34%28%22%17%
N=15 2.42x750 tok/s MAL 5.86AR 32.4%89%76%65%55%47%39%32%26%20%14%10%6%4%
moonshotai/Kimi-K2.5 / DFlash / HumanEval
HumanEvalベースライン 301 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 2.02x609 tok/s MAL 3.32AR 77.4%90%77%66%
N=7 2.42x727 tok/s MAL 4.87AR 55.3%87%73%61%52%44%38%32%
N=11 2.32x699 tok/s MAL 5.24AR 38.6%86%71%57%47%39%32%27%22%18%14%
N=15 2.20x661 tok/s MAL 5.34AR 28.9%85%71%58%47%39%32%27%22%17%13%9%6%4%
moonshotai/Kimi-K2.5 / DFlash / MBPP
MBPPベースライン 311 tok/s
Np1p2p3p4p5p6p7p8p9p10p11p12p13p14p15
N=3 1.96x609 tok/s MAL 3.17AR 72.4%87%72%58%
N=7 2.21x687 tok/s MAL 4.41AR 48.8%85%69%55%44%36%29%23%
N=11 2.04x636 tok/s MAL 4.53AR 32.1%84%66%52%40%31%24%19%14%11%8%
N=15 1.88x586 tok/s MAL 4.50AR 23.3%83%66%51%40%31%24%18%13%10%7%4%3%1%
MiniMaxAI/MiniMax-M3-MXFP8 / EAGLE-3 / GSM8K
GSM8Kベースライン 2,086 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.31x | 2,743 tok/s MAL 1.92 | AR 92.2% | 92% | | | |
| N=2 1.56x | 3,249 tok/s MAL 2.73 | AR 86.4% | 91% | 82% | | |
| N=3 1.65x | 3,434 tok/s MAL 3.42 | AR 80.8% | 91% | 81% | 71% | |
| N=4 1.82x | 3,807 tok/s MAL 4.01 | AR 75.3% | 90% | 80% | 70% | 62% |
| N=5 1.82x | 3,787 tok/s MAL 4.45 | AR 69.0% | 89% | 78% | 68% | 59% | 52% |

MiniMaxAI/MiniMax-M3-MXFP8 / EAGLE-3 / MATH500
MATH500ベースライン 2,468 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.35x | 3,338 tok/s MAL 1.93 | AR 93.0% | 93% | | | |
| N=2 1.64x | 4,047 tok/s MAL 2.74 | AR 87.1% | 92% | 82% | | |
| N=3 1.84x | 4,551 tok/s MAL 3.44 | AR 81.3% | 92% | 81% | 71% | |
| N=4 1.93x | 4,772 tok/s MAL 4.01 | AR 75.2% | 91% | 80% | 70% | 60% |
| N=5 1.90x | 4,677 tok/s MAL 4.39 | AR 67.8% | 90% | 78% | 67% | 57% | 49% |

MiniMaxAI/MiniMax-M3-MXFP8 / EAGLE-3 / HumanEval
HumanEvalベースライン 2,317 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.39x | 3,224 tok/s MAL 1.93 | AR 93.1% | 93% | | | |
| N=2 1.70x | 3,931 tok/s MAL 2.74 | AR 87.1% | 92% | 82% | | |
| N=3 1.82x | 4,208 tok/s MAL 3.43 | AR 81.0% | 91% | 81% | 71% | |
| N=4 2.09x | 4,835 tok/s MAL 4.05 | AR 76.2% | 91% | 81% | 71% | 62% |
| N=5 1.95x | 4,529 tok/s MAL 4.46 | AR 69.2% | 90% | 78% | 68% | 59% | 51% |

MiniMaxAI/MiniMax-M3-MXFP8 / EAGLE-3 / MBPP
MBPPベースライン 2,277 tok/s

| N | p1 | p2 | p3 | p4 | p5 |
|---|---|---|---|---|
| N=1 1.36x | 3,095 tok/s MAL 1.91 | AR 90.6% | 91% | | | |
| N=2 1.68x | 3,825 tok/s MAL 2.68 | AR 84.2% | 90% | 78% | | |
| N=3 1.89x | 4,298 tok/s MAL 3.31 | AR 77.1% | 89% | 77% | 65% | |
| N=4 1.97x | 4,487 tok/s MAL 3.82 | AR 70.5% | 89% | 76% | 64% | 53% |
| N=5 1.93x | 4,392 tok/s MAL 4.18 | AR 63.6% | 88% | 75% | 62% | 51% | 43% |

MAL は平均受け入れ長を意味します。AR は受け入れ率を意味します。

実験で使用された例 vLLM serve コマンド

google/gemma-4-26B-A4B-it

ベースライン:

VLLM_USE_V2_MODEL_RUNNER=1 \
vllm serve google/gemma-4-26B-A4B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --chat-template /app/vllm/examples/tool_chat_template_gemma4.jinja \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768

Gemma 4 MTP:

VLLM_USE_V2_MODEL_RUNNER=1 \
vllm serve google/gemma-4-26B-A4B-it \
  --tensor-parallel-size 2 \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --chat-template /app/vllm/examples/tool_chat_template_gemma4.jinja \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --speculative-config '{"model":"google/gemma-4-26B-A4B-it-assistant","num_speculative_tokens":4}'

EAGLE-3:

VLLM_USE_V2_MODEL_RUNNER=1 \
vllm serve google/gemma-4-26B-A4B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.8 \
  --speculative-config '{"model":"RedHatAI/gemma-4-26B-A4B-it-speculator.eagle3","num_speculative_tokens":1,"method":"eagle3"}'

DFlash:

VLLM_USE_V2_MODEL_RUNNER=1 \
vllm serve google/gemma-4-26B-A4B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --attention-backend triton_attn \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.8 \
  --speculative-config '{"method":"dflash","model":"z-lab/gemma-4-26B-A4B-it-DFlash","num_speculative_tokens":15,"attention_backend":"triton_attn"}'
google/gemma-4-31B-it

ベースライン:

vllm serve google/gemma-4-31B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --chat-template /app/vllm/examples/tool_chat_template_gemma4.jinja \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768

Gemma 4 MTP:

vllm serve google/gemma-4-31B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --chat-template /app/vllm/examples/tool_chat_template_gemma4.jinja \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --speculative-config '{"model":"google/gemma-4-31B-it-assistant","num_speculative_tokens":1}'

EAGLE-3:

vllm serve google/gemma-4-31B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --speculative-config '{"model":"RedHatAI/gemma-4-31B-it-speculator.eagle3","num_speculative_tokens":3,"method":"eagle3"}'

DFlash:

vllm serve google/gemma-4-31B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --attention-backend triton_attn \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.85 \
  --speculative-config '{"method":"dflash","model":"z-lab/gemma-4-31B-it-DFlash","num_speculative_tokens":15,"attention_backend":"triton_attn"}'

DSpark:

vllm serve google/gemma-4-31B-it \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --attention-backend triton_attn \
  --language-model-only \
  --reasoning-parser gemma4 \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.85 \
  --speculative-config '{"model":"RedHatAI/gemma-4-31B-it-speculator.dspark","num_speculative_tokens":7,"method":"dspark","attention_backend":"triton_attn"}'
Qwen/Qwen3-8B

ベースライン:

vllm serve Qwen/Qwen3-8B \
  --trust-remote-code \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.85

EAGLE-3:

vllm serve Qwen/Qwen3-8B \
  --trust-remote-code \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.85 \
  --speculative-config '{"model":"RedHatAI/Qwen3-8B-Thinking-speculator.eagle3","num_speculative_tokens":5,"method":"eagle3"}'

DFlash:

vllm serve Qwen/Qwen3-8B \
  --trust-remote-code \
  --max-num-batched-tokens 16384 \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.85 \
  --speculative-config '{"model":"z-lab/Qwen3-8B-DFlash-b16","method":"dflash","num_speculative_tokens":7}'

DSpark:

vllm serve Qwen/Qwen3-8B \
  --trust-remote-code \
  --max-num-batched-tokens 16384 \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.85 \
  --speculative-config '{"model":"deepseek-ai/dspark_qwen3_8b_block7","method":"dspark","num_speculative_tokens":11}'
Qwen/Qwen3.5-27B

ベースライン:

vllm serve Qwen/Qwen3.5-27B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --max-num-batched-tokens 32768

ネイティブMTP:

vllm serve Qwen/Qwen3.5-27B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --max-num-batched-tokens 32768 \
  --speculative-config '{"method":"mtp","num_speculative_tokens":1}'

DFlash:

vllm serve Qwen/Qwen3.5-27B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --max-num-batched-tokens 32768 \
  --speculative-config '{"method":"dflash","model":"z-lab/Qwen3.5-27B-DFlash","num_speculative_tokens":15}'
Qwen/Qwen3.5-122B-A10B

ベースライン:

vllm serve Qwen/Qwen3.5-122B-A10B \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --max-num-batched-tokens 32768

ネイティブMTP:

vllm serve Qwen/Qwen3.5-122B-A10B \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --max-num-batched-tokens 32768 \
  --speculative-config '{"method":"mtp","num_speculative_tokens":7}'

DFlash:

vllm serve Qwen/Qwen3.5-122B-A10B \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --max-num-batched-tokens 32768 \
  --speculative-config '{"method":"dflash","model":"z-lab/Qwen3.5-122B-A10B-DFlash","num_speculative_tokens":15}'
Qwen/Qwen3.6-27B

ベースライン:

VLLM_USE_V2_MODEL_RUNNER=1 \
vllm serve Qwen/Qwen3.6-27B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --max-num-batched-tokens 32768

ネイティブMTP:

VLLM_USE_V2_MODEL_RUNNER=1 \
vllm serve Qwen/Qwen3.6-27B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --max-num-batched-tokens 32768 \
  --speculative-config '{"method":"mtp","num_speculative_tokens":3}'

DFlash:

VLLM_USE_V2_MODEL_RUNNER=1 \
vllm serve Qwen/Qwen3.6-27B \
  --tensor-parallel-size 2 \
  --max-num-batched-tokens 32768 \
  --speculative-config '{"method":"dflash","model":"z-lab/Qwen3.6-27B-DFlash","num_speculative_tokens":15}'
Qwen/Qwen3.6-35B-A3B

ベースライン:

VLLM_ROCM_USE_AITER=1 \
vllm serve Qwen/Qwen3.6-35B-A3B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --reasoning-parser qwen3 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_xml \
  --mm-encoder-tp-mode data \
  --max-num-batched-tokens 16384

ネイティブMTP:

VLLM_ROCM_USE_AITER=1 \
vllm serve Qwen/Qwen3.6-35B-A3B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --reasoning-parser qwen3 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_xml \
  --mm-encoder-tp-mode data \
  --max-num-batched-tokens 16384 \
  --speculative-config '{"method":"mtp","num_speculative_tokens":3,"moe_backend":"triton"}'

DFlash:

VLLM_ROCM_USE_AITER=1 \
vllm serve Qwen/Qwen3.6-35B-A3B \
  --trust-remote-code \
  --tensor-parallel-size 2 \
  --reasoning-parser qwen3 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_xml \
  --mm-encoder-tp-mode data \
  --max-num-batched-tokens 16384 \
  --speculative-config '{"method":"dflash","model":"z-lab/Qwen3.6-35B-A3B-DFlash","num_speculative_tokens":15}'
moonshotai/Kimi-K2.5

ベースライン:

VLLM_ROCM_USE_AITER=1 \
VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
vllm serve moonshotai/Kimi-K2.5 \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --language-model-only \
  --reasoning-parser kimi_k2 \
  --enable-auto-tool-choice \
  --tool-call-parser kimi_k2

EAGLE-3:

VLLM_ROCM_USE_AITER=1 \
VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
vllm serve moonshotai/Kimi-K2.5 \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --language-model-only \
  --reasoning-parser kimi_k2 \
  --enable-auto-tool-choice \
  --tool-call-parser kimi_k2 \
  --speculative-config '{"model":"lightseekorg/kimi-k2.5-eagle3-mla","method":"eagle3","num_speculative_tokens":3}'

DFlash:

VLLM_ROCM_USE_AITER=1 \
VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
vllm serve moonshotai/Kimi-K2.5 \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --language-model-only \
  --reasoning-parser kimi_k2 \
  --enable-auto-tool-choice \
  --tool-call-parser kimi_k2 \
  --speculative-config '{"model":"z-lab/Kimi-K2.5-DFlash","method":"dflash","num_speculative_tokens":7}'
MiniMaxAI/MiniMax-M3-MXFP8

ベースライン:

VLLM_ROCM_USE_AITER=1 \
VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
vllm serve MiniMaxAI/MiniMax-M3-MXFP8 \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --language-model-only \
  --reasoning-parser minimax_m3 \
  --enable-auto-tool-choice \
  --tool-call-parser minimax_m3

EAGLE-3:

VLLM_ROCM_USE_AITER=1 \
VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
vllm serve MiniMaxAI/MiniMax-M3-MXFP8 \
  --trust-remote-code \
  --tensor-parallel-size 4 \
  --language-model-only \
  --reasoning-parser minimax_m3 \
  --enable-auto-tool-choice \
  --tool-call-parser minimax_m3 \
  --speculative-config '{"model":"Inferact/MiniMax-M3-EAGLE3","method":"eagle3","num_speculative_tokens":4}'