AI・機械学習
上級

Speculative Decoding(スペキュラティブデコーディング)

LLMの自己回帰的トークン生成を高速化する手法。小型のドラフトモデルで複数トークンを先読み生成し、大型のターゲットモデルで一括検証することで、出力品質を完全に維持しながら推論速度を2〜3倍に向上させる。

0 回閲覧
0 いいね

Speculative Decodingとは

Speculative Decoding(投機的デコーディング)は、LLMの自己回帰生成(1トークンずつ逐次生成)のレイテンシを削減するための手法である。2022年にGoogle ResearchのLeviathan氏らとDeepMind のChen氏らが独立に提案した。CPUのspeculative execution(投機的実行)に着想を得ており、「安価な予測→高価な検証」のパイプラインで生成速度を高速化する。最大の特長は、ターゲットモデルの出力分布を完全に保存するため、生成品質の劣化が数学的に保証されてゼロである点。

動作原理

基本アルゴリズム

  1. ドラフト生成: 小型のドラフトモデル(例: Llama 3.1 8B)がγトークン(典型的に4〜8)を自己回帰的に高速生成
  2. 並列検証: 大型のターゲットモデル(例: Llama 3.1 70B)がγトークン全てを1回のフォワードパスで並列検証
  3. 受理/棄却: 各トークンをドラフトモデルとターゲットモデルの確率分布を比較して受理/棄却を判定
  4. 修正サンプリング: 棄却されたトークン位置以降を、ターゲットモデルの分布から再サンプリング

受理確率の数学的保証

Speculative Decodingは修正棄却サンプリング(modified rejection sampling)に基づいており、最終的な出力分布がターゲットモデル単体の出力分布と完全に一致することが証明されている。具体的には:

  • ドラフトトークンの受理確率: min(1, p_target(x) / p_draft(x))
  • 棄却時の修正分布: max(0, p_target(x) - p_draft(x)) を正規化

高速化の仕組み

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/101B〜8B

主要な実装方式

1. 独立ドラフトモデル方式(Standard Speculative Decoding)

ターゲットモデルとは別の小型モデルをドラフトモデルとして使用。

ターゲットモデルドラフトモデル受理率高速化
Llama 3.1 70BLlama 3.1 8B~0.752.5×
GPT-4oGPT-4o-mini~0.702.2×
Claude 4 OpusClaude 4 Haiku~0.722.3×
Mixtral 8x22BMixtral 8x7B~0.682.0×

2. Medusa(Self-Speculative)

追加の予測ヘッドをターゲットモデルに付与し、各ヘッドが異なる未来位置のトークンを同時予測。ドラフトモデル不要で追加メモリが少ない。

  • Medusa-1: 追加ヘッドのfine-tuningのみ。受理率0.6程度
  • Medusa-2: ツリー構造の検証で受理率を改善。2.5×の高速化

3. EAGLE / EAGLE-2

ターゲットモデルの隠れ状態を入力として軽量なオートリグレッシブヘッドでドラフトを生成。コンテキスト依存のドラフトツリーを動的構築し、Medusaを上回る受理率を達成。

  • EAGLE-2: ドラフトツリーの深さと幅を動的調整。Llama 3.1 70Bで3.0×以上の高速化報告

4. Lookahead Decoding

ドラフトモデル不要のパラレルデコーディング手法。Jacobi反復法に基づき、複数の将来トークン位置を同時に「推測」して並列更新。収束したトークンを確定していく。

フレームワーク対応状況

フレームワーク対応方式設定方法
vLLMStandard, Medusa, EAGLE--speculative-model <draft_model> --num-speculative-tokens 5
TensorRT-LLMStandard, Medusa, EAGLE-2speculative_decoding_modeパラメータ
SGLangStandard, EAGLE-2--speculative-algorithm eagle
Hugging FaceStandard(assisted generation)model.generate(assistant_model=draft_model)
llama.cppStandard--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)受理率高速化
コード生成451350.823.0×
要約451080.722.4×
創作文45900.622.0×
翻訳451170.772.6×

受理率はタスクの予測容易性に依存する。コード生成やテンプレート的な出力は受理率が高く、創造的なテキスト生成は低い傾向がある。

制約と注意点

  • メモリオーバーヘッド: ドラフトモデル分の追加VRAMが必要(8Bモデルで約5GB INT4)
  • 受理率依存: ドラフトモデルとターゲットモデルの分布が乖離していると受理率が下がり、オーバーヘッドで逆に遅くなる場合がある
  • バッチ推論との相性: バッチサイズが大きい場合、推論がcompute-boundになりSpeculative Decodingの恩恵が薄れる。主にバッチサイズ1〜4の低レイテンシ用途で効果的
  • 温度パラメータ: temperature=0(greedy)で最も受理率が高く、temperature>1では受理率が著しく低下

よくある質問(FAQ)

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の方が重要。

まとめ

  • Speculative Decodingは小型ドラフトモデルの先読み+大型モデルの一括検証で推論を2〜3倍高速化
  • 出力品質は数学的に完全保存(修正棄却サンプリング)
  • コード生成・翻訳など予測容易なタスクで受理率0.75以上、3倍近い高速化
  • Medusa/EAGLE-2などドラフトモデル不要の手法も進化中
  • 低レイテンシ用途(バッチサイズ1〜4)で最も効果的