投機的デコーディング(トウキテキデコーディング)
大規模言語モデル(LLM)の推論を高速化する手法。小型の「ドラフトモデル」で複数トークンを先行生成し、大型の「ターゲットモデル」で一括検証することで、出力品質を維持したまま推論速度を2〜3倍に向上させる。2023年にGoogleとDeepMindが独立に提案し、2025年以降の主要推論フレームワークに標準搭載されている。
投機的デコーディングとは
投機的デコーディング(Speculative Decoding)は、大規模言語モデル(LLM)の推論速度を劇的に改善する並列化手法である。従来のLLM推論は自己回帰(autoregressive)方式で、1トークンずつ逐次的に生成するためGPUの演算能力を十分に活用できなかった。投機的デコーディングは、小型の高速モデル(ドラフトモデル)に複数トークンを先行生成させ、大型のモデル(ターゲットモデル)で一括検証する「推測→検証」パイプラインにより、出力の確率分布を変えることなく2〜3倍の高速化を実現する。
2023年にGoogle Research(Leviathan et al., "Fast Inference from Transformers via Speculative Decoding")とDeepMind(Chen et al., "Accelerating Large Language Model Decoding with Speculative Sampling")が独立に同等の手法を発表し、2024年以降はvLLM、TensorRT-LLM、llama.cpp、Hugging Face TGIなどの主要推論フレームワークに実装が進んでいる。
従来の自己回帰デコーディングの課題
| 項目 | 自己回帰デコーディング | 投機的デコーディング |
|---|---|---|
| 1ステップの処理 | 1トークン生成 | K個のドラフト生成 + 一括検証 |
| GPU利用効率 | 低い(メモリバウンド) | 高い(バッチ検証で演算バウンド化) |
| レイテンシ | トークン数に比例 | トークン数 / 受理率に比例 |
| 出力品質 | ベースライン | 完全一致(確率分布を保存) |
| 実装複雑度 | 低い | 中〜高 |
| メモリ使用量 | モデル1つ分 | モデル2つ分(ドラフト+ターゲット) |
自己回帰デコーディングの根本的な問題は、LLMの推論がメモリバウンド(memory-bound)であることにある。70Bパラメータのモデルでは1トークン生成に約140GBのパラメータをGPUメモリから読み出す必要があるが、実際の演算量は少ない。GPU(例: NVIDIA H100)のメモリ帯域幅は3.35TB/sだが、FP16演算性能は989TFLOPSであり、1トークン生成では演算ユニットの1%未満しか使用されない。投機的デコーディングは、1回のフォワードパスで複数トークンを検証することで、この演算余力を活用する。
動作原理
基本アルゴリズム
- ドラフト生成フェーズ: 小型モデル(例: 1B〜7Bパラメータ)がK個のトークン(通常K=4〜8)を自己回帰的に生成。各トークンの確率分布 q(x) を記録
- 検証フェーズ: ターゲットモデル(例: 70B〜405Bパラメータ)がドラフトトークン列を入力として1回のフォワードパスを実行。各位置での確率分布 p(x) を計算
- 受理/却下判定: 各ドラフトトークンについて、受理確率 min(1, p(x)/q(x)) で確率的に受理。却下された位置以降はターゲットモデルの分布から再サンプリング
- 出力確定: 受理されたトークン列 + 再サンプリングされた1トークンを最終出力として確定
受理率(Acceptance Rate)
受理率はドラフトモデルとターゲットモデルの確率分布の類似度に依存する。典型的な受理率は以下の通り。
- 同一アーキテクチャの蒸留モデル: 70〜90%(例: Llama 3.1 8B → Llama 3.1 70B)
- 異なるアーキテクチャ: 50〜70%(例: GPT-2 → GPT-4)
- ドメイン特化のファインチューン済みモデル: 80〜95%(コード生成など予測しやすいタスク)
- 創造的な文章生成: 40〜60%(次トークンの不確実性が高い)
受理率が高いほど高速化率も高くなる。K=5でα=0.8(受理率80%)の場合、期待される1ステップあたりの生成トークン数は約4.0で、従来比4倍の速度に相当する。
主要な実装と性能比較
| フレームワーク | 対応バージョン | ドラフトモデル方式 | 最大高速化率 | 備考 |
|---|---|---|---|---|
| vLLM | v0.4.0+ | 外部ドラフトモデル / ngram | 2.5〜3.2x | PagedAttention統合 |
| TensorRT-LLM | v0.9.0+ | 外部ドラフトモデル / Medusa | 2.0〜3.5x | NVIDIA GPU最適化 |
| llama.cpp | b2500+ | 外部ドラフトモデル | 1.8〜2.5x | CPU/Metal/CUDA対応 |
| Hugging Face TGI | v2.0+ | 外部ドラフトモデル | 2.0〜2.8x | API互換 |
| SGLang | v0.2.0+ | Eagle / Medusa | 2.5〜3.8x | RadixAttention統合 |
| DeepSpeed-FastGen | v0.13+ | 外部ドラフトモデル | 2.0〜2.5x | DeepSpeed統合 |
vLLMでの設定例
vLLMで投機的デコーディングを有効化するには、起動時にドラフトモデルを指定する。
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-70B-Instruct \
--speculative-model meta-llama/Llama-3.1-8B-Instruct \
--num-speculative-tokens 5 \
--gpu-memory-utilization 0.9
ドラフトモデルなしのngram方式も利用可能で、追加メモリ不要だが高速化率は1.5〜2.0xに留まる。
ドラフトモデルの選び方
ドラフトモデルの要件
- 高速性: ターゲットモデルの1/10以下の推論時間
- 分布の近さ: ターゲットモデルと類似した確率分布を出力
- 語彙の一致: ターゲットモデルと同一のtokenizer/vocabを使用
- メモリ効率: ターゲットモデルのGPUメモリを圧迫しない
推奨ペアリング
| ターゲットモデル | ドラフトモデル | 受理率目安 | 高速化率 |
|---|---|---|---|
| Llama 3.1 405B | Llama 3.1 8B | 75〜85% | 2.5〜3.0x |
| Llama 3.1 70B | Llama 3.1 8B | 80〜90% | 2.0〜2.8x |
| Qwen2.5 72B | Qwen2.5 0.5B | 70〜80% | 2.5〜3.5x |
| Gemma 2 27B | Gemma 2 2B | 75〜85% | 2.0〜2.5x |
| Mixtral 8x22B | Mixtral 8x7B | 65〜75% | 1.8〜2.3x |
よくある質問(FAQ)
Q1: 投機的デコーディングで出力品質は低下しますか? A: いいえ。数学的にターゲットモデル単体と完全に同一の確率分布からサンプリングすることが証明されている。受理/却下の確率的判定により、ドラフトモデルの分布の偏りはキャンセルされる。temperature=0(greedy decoding)でも温度付きサンプリングでも、出力はビット単位で一致する。
Q2: どのようなタスクで効果が高いですか? A: コード生成、定型文書生成、翻訳など、次トークンの予測精度が高いタスクで最も効果的(受理率80%以上、3倍高速化)。創造的な小説執筆や自由連想的な応答では効果が限定的(受理率50%前後、1.5倍程度)。
Q3: GPUメモリが足りない場合はどうしますか? A: 3つの選択肢がある。(1) ngram方式を使用(ドラフトモデル不要、コンテキスト内のn-gramパターンを再利用)、(2) ドラフトモデルをCPUに配置(速度は落ちるが動作する)、(3) Medusa/Eagleなどのself-draft方式を使用(ターゲットモデルに追加ヘッドを装着するため追加メモリは数百MB)。
Q4: バッチ推論でも効果はありますか? A: バッチサイズが大きい場合(>32)は効果が薄れる。バッチ推論では既にGPU演算ユニットが活用されているため、投機的デコーディングの追加演算がボトルネックになりうる。バッチサイズ1〜8の対話型推論で最も効果的。
まとめ
- 投機的デコーディングは小型ドラフトモデルで先行生成→大型ターゲットモデルで一括検証する推論高速化手法
- 出力品質を完全に維持したまま2〜3倍の速度向上を実現
- 2023年にGoogle/DeepMindが発表、2025年以降は主要フレームワーク(vLLM, TensorRT-LLM, llama.cpp等)に標準搭載
- 受理率はドラフト/ターゲットモデルの分布類似度に依存し、同一ファミリーの蒸留ペアで最高性能
- コード生成や定型文書など予測しやすいタスクで効果が最大化される