Speculative Decoding(スペキュラティブデコーディング)
小型ドラフトモデルが複数トークンを先行生成し、大型ターゲットモデルが並列検証することでLLM推論を高速化する技術。レイテンシを2〜3倍削減可能。
Speculative Decoding
概要
Speculative Decoding(投機的デコーディング)は、LLM推論のレイテンシを削減する技術。2023年にDeepMind(論文: "Accelerating Large Language Model Decoding with Speculative Sampling")とGoogle Brain("Fast Inference from Transformers via Speculative Decoding")が同時期に独立発表した。
基本原理
標準自己回帰デコーディングの制約
標準デコーディングではトークンを1つずつ順次生成する。大型モデルは演算量が多く、1トークン生成でも高レイテンシとなる。
Speculative Decodingの流れ
-
Draft段階: 小型ドラフトモデルMqがγトークンを自己回帰生成(高速) 例: Mq → ["quick", "brown", "fox", "jumps"](4トークン先読み)
-
Verify段階: ターゲットモデルMpがγトークンを並列スコアリング(1回の前向き計算) Mpはγ+1位置すべてのlogitsを一度に計算
-
受け入れ/棄却判定: 各ドラフトトークンをRejection Samplingで確率的判定 受け入れ率α = min(1, Mp(x)/Mq(x))
-
出力分布の等価性: 最終出力はターゲットモデル単独と同一分布(数学的証明あり)
バリエーション
Medusa(2024)
大型モデルに複数のデコーダーヘッドを追加し、ドラフトモデルを内包する手法。外部ドラフトモデル不要。
EAGLE(2024)
特徴量レベルのドラフト機能により高受け入れ率を実現。Vicuna-7Bで3.5倍高速化。
Self-Speculative Decoding
モデル自身の初期レイヤー出力をドラフトとして使用。追加パラメータ不要。
高速化効果
- 68Mモデル → Llama-2-7B: 約2.0倍
- 7Bモデル → Llama-2-70B: 約2.5倍
- Medusa heads → Vicuna-13B: 約2.3倍
- EAGLE → Vicuna-7B: 約3.5倍
実装(vLLM)
vllm serve meta-llama/Llama-3.1-70B-Instruct \
--speculative-model meta-llama/Llama-3.2-1B-Instruct \
--num-speculative-tokens 5 \
--speculative-draft-tensor-parallel-size 1
適用条件
- 有効な場面: 短い生成(チャット、補完)、高い受け入れ率のドラフトモデルがある場合
- 効果が薄い場面: 長い生成(ドキュメント作成)、ドラフト/ターゲット分布が乖離する場合
- トレードオフ: ドラフトモデル用の追加GPUメモリが必要