小型のドラフトモデルが候補トークン列を先行生成し、大型の検証モデルが一括で承認・却下することでLLM推論を高速化する手法。数学的に元のモデルと同一の出力分布を保証しながら、2〜3倍の速度向上を実現する。2024〜2026年に主要フレームワークで標準サポートされた。
Speculative Decoding は、2022年に Google Research の Leviathan らと DeepMind の Chen らが独立に提案したLLM推論高速化技術です。CPU の投機的実行(speculative execution)にヒントを得ており、小型で高速なドラフトモデルが γ トークン(通常 γ=4〜8)を先行生成し、大型の検証モデルが1回のフォワードパスでまとめて検証します。却下されたトークン以降は検証モデルの分布から再サンプリングするため、最終出力は検証モデル単体と数学的に同一の分布になります。
平均承認率を α とすると、1イテレーションあたりの平均生成トークン数は (1-α^(γ+1))/(1-α) です。ドラフトモデルのコストが検証モデルの 1/10 以下であれば、全体のスループットが 2〜3 倍向上します。
| フレームワーク/製品 | バージョン | 方式 | 速度向上 |
|---|---|---|---|
| vLLM | 0.6+ | Draft Model 方式 | 1.8〜2.5x |
| TensorRT-LLM | 0.9+ | Draft + Medusa 両対応 |
| 2.0〜3.0x |
| Hugging Face | Transformers 4.40+ | assistant_model パラメータ | 1.5〜2.5x |
| llama.cpp | b3000+ | --draft オプション | 1.5〜2.0x |
| Apple MLX | 0.12+ | draft_model パラメータ | 1.8〜2.2x |
| Google Gemini | 内部 | 非公開 | 推定 2〜3x |
本体モデルに複数の追加ヘッド(Medusa heads)を取り付け、各ヘッドが異なる将来位置のトークンを予測します。追加パラメータ数は本体の 2〜5% で、別途ドラフトモデルを用意する必要がありません。
モデル自身の浅い層(例: 32層中の最初の8層)をドラフトモデルとして使用します。追加のモデルやヘッドが不要で、メモリ効率に優れています。LayerSkip(Meta、2024年)がこの手法の代表です。
Auto-regression ヘッドの代わりに、前のトークンの hidden state を特徴量として次トークンを予測するフレームワークです。Medusa より高い承認率(10〜20%向上)を報告しています。
ヤコビ反復法を応用し、複数の将来位置を並列に予測します。ドラフトモデル不要で、n-gram プールを活用して承認率を向上させます。
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3.1-70B-Instruct",
speculative_model="meta-llama/Llama-3.1-8B-Instruct",
num_speculative_tokens=5,
use_v2_block_manager=True,
)
params = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=512)
outputs = llm.generate(["Explain quantum computing"], params)
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-70B-Instruct")
assistant = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")
outputs = model.generate(
**inputs,
assistant_model=assistant,
max_new_tokens=512,
do_sample=True,
temperature=0.7,
)
Q1: Speculative Decoding で生成品質は変わりますか? A: 変わりません。承認・却下の確率計算により、最終出力の分布は検証モデル単体と数学的に同一です。これは Speculative Decoding の理論的保証であり、速度だけが向上します。
Q2: ドラフトモデルはどう選べばよいですか? A: 検証モデルと同じファミリーの小型バージョンが最適です(例: Llama 3.1 70B に対して Llama 3.1 8B)。異なるアーキテクチャの組み合わせ(例: GPT系 + Llama)は承認率が低下するため推奨しません。語彙サイズの一致も重要です。
Q3: Speculative Decoding と Continuous Batching は併用できますか? A: vLLM 0.8+ では併用可能です。ただし、バッチ内のリクエストごとにドラフトトークン数が異なるため、パディング処理が必要になり、バッチ効率がやや低下する場合があります。TensorRT-LLM も同様にサポートしています。
Q4: GPU メモリはどれくらい追加で必要ですか? A: ドラフトモデルのパラメータ分が追加で必要です。例えば 70B 検証モデル(FP16 で約 140GB)に 8B ドラフトモデル(約 16GB)を追加すると、合計約 156GB になります。Medusa 方式なら追加は 2〜5%(約 3〜7GB)で済みます。