LLMの自己回帰的トークン生成を高速化する手法。小型のドラフトモデルで複数トークンを先読み生成し、大型のターゲットモデルで一括検証することで、出力品質を完全に維持しながら推論速度を2〜3倍に向上させる。
Speculative Decoding(投機的デコーディング)は、LLMの自己回帰生成(1トークンずつ逐次生成)のレイテンシを削減するための手法である。2022年にGoogle ResearchのLeviathan氏らとDeepMind のChen氏らが独立に提案した。CPUのspeculative execution(投機的実行)に着想を得ており、「安価な予測→高価な検証」のパイプラインで生成速度を高速化する。最大の特長は、ターゲットモデルの出力分布を完全に保存するため、生成品質の劣化が数学的に保証されてゼロである点。
Speculative Decodingは修正棄却サンプリング(modified rejection sampling)に基づいており、最終的な出力分布がターゲットモデル単体の出力分布と完全に一致することが証明されている。具体的には:
LLMのデコードはメモリ帯域律速(memory-bound)であり、1トークン生成も4トークン検証もほぼ同じ時間がかかる(prefillと同様に並列化できるため)。そのためγトークン中α個が受理されれば、1ステップでα+1トークンが生成でき、速度はα+1倍に近似する。
| パラメータ | 説明 | 典型的な値 |
|---|---|---|
| γ (speculation length) | ドラフト生成トークン数 | 4〜8 |
| α (acceptance rate) | 平均受理率 | 0.6〜0.85 |
| 高速化倍率 |
| 理論値: α×γ/(1+α×overhead) |
| 1.8〜3.0× |
| ドラフトモデルサイズ | ターゲットの1/5〜1/10 | 1B〜8B |
ターゲットモデルとは別の小型モデルをドラフトモデルとして使用。
| ターゲットモデル | ドラフトモデル | 受理率 | 高速化 |
|---|---|---|---|
| Llama 3.1 70B | Llama 3.1 8B | ~0.75 | 2.5× |
| GPT-4o | GPT-4o-mini | ~0.70 | 2.2× |
| Claude 4 Opus | Claude 4 Haiku | ~0.72 | 2.3× |
| Mixtral 8x22B | Mixtral 8x7B | ~0.68 | 2.0× |
追加の予測ヘッドをターゲットモデルに付与し、各ヘッドが異なる未来位置のトークンを同時予測。ドラフトモデル不要で追加メモリが少ない。
ターゲットモデルの隠れ状態を入力として軽量なオートリグレッシブヘッドでドラフトを生成。コンテキスト依存のドラフトツリーを動的構築し、Medusaを上回る受理率を達成。
ドラフトモデル不要のパラレルデコーディング手法。Jacobi反復法に基づき、複数の将来トークン位置を同時に「推測」して並列更新。収束したトークンを確定していく。
| フレームワーク | 対応方式 | 設定方法 |
|---|---|---|
| vLLM | Standard, Medusa, EAGLE | --speculative-model <draft_model> --num-speculative-tokens 5 |
| TensorRT-LLM | Standard, Medusa, EAGLE-2 | speculative_decoding_modeパラメータ |
| SGLang | Standard, EAGLE-2 | --speculative-algorithm eagle |
| Hugging Face | Standard(assisted generation) | model.generate(assistant_model=draft_model) |
| llama.cpp | Standard | --draft-model <gguf_path> -ngl-draft 99 --draft 8 |
H100 80GB × 1台、Llama 3.1 70B INT4(ターゲット)、Llama 3.1 8B INT4(ドラフト)
| タスク | 通常デコード (tok/s) | Speculative (tok/s) | 受理率 | 高速化 |
|---|---|---|---|---|
| コード生成 | 45 | 135 | 0.82 | 3.0× |
| 要約 | 45 | 108 | 0.72 | 2.4× |
| 創作文 | 45 | 90 | 0.62 | 2.0× |
| 翻訳 | 45 | 117 | 0.77 | 2.6× |
受理率はタスクの予測容易性に依存する。コード生成やテンプレート的な出力は受理率が高く、創造的なテキスト生成は低い傾向がある。
Q1: Speculative Decodingで出力品質は変わりますか? A: 数学的に変わらない。修正棄却サンプリングにより、最終的な出力分布はターゲットモデル単体と完全に同一であることが証明されている。速度だけが変わり、品質は100%保存される。
Q2: ドラフトモデルはどう選べばいいですか? A: ターゲットモデルと同じファミリーの小型モデルが最適(例: Llama 70B → Llama 8B)。語彙が同一で学習データが類似しているため受理率が高い。異なるファミリーのモデルを使うと受理率が0.3〜0.5に低下し逆効果になることが多い。
Q3: バッチ処理が多い環境でもSpeculative Decodingは有効ですか? A: バッチサイズ8以上ではGPUがcompute-boundになり、ドラフト生成のオーバーヘッドが相対的に大きくなるため効果が薄れる。主にリアルタイムチャット等のバッチサイズ1〜4の低レイテンシ用途で最も効果的。高スループット用途ではContinuous Batchingの方が重要。