投機的デコーディングとは
クイック回答
投機的デコーディングは、小さなドラフトモデルと大きなターゲットモデルを組み合わせます。ドラフトモデルが数トークン先まで提案し、ターゲットモデルはトークンごとに逐次検証するのではなく、1回の並列フォワードパスですべて検証します。ドラフトの提案が採用されれば、生成が高速化します。
- ▸小さなドラフトモデルが、メインモデルより先に複数のトークンを提案します。
- ▸より大きなターゲットモデルが、提案されたトークンを1回の並列パスで検証します。
- ▸出力品質はターゲットモデルとまったく同じです — 投機的デコーディングは生成内容ではなく、速度だけを変えます。
更新: 2026年7月14日
重要なポイント
- ✓小さなドラフトモデルが先にトークンを提案し、大きなターゲットモデルが1回の並列パスで検証する
- ✓出力品質はターゲットモデル単体での実行と同一 — 変わるのは速度のみ
- ✓コードや反復構造など予測しやすいテキストでは、ドラフトモデルの的中率が上がり、速度向上が最大になる
- ✓ドラフトモデルはターゲットモデルと同じトークナイザーと語彙を共有する必要がある
仕組み
ターゲットモデルよりはるかに小さく高速なドラフトモデルが、候補トークンの短い系列を生成します。ターゲットモデルはその系列全体を1回のフォワードパスで評価し、自身が単独で生成したであろう内容と一致するトークンを採用し、それ以外(最初の不一致以降に生成されたものも含む)を破棄します。
複数トークンを並列で検証するコストは、ターゲットモデル上でトークンを1つ逐次生成するコストとほぼ同じであるため、採用された提案はそのまま最終出力を変えずに速度向上へとつながります。ターゲットモデルには常に最終決定権があり、ドラフトモデルの誤った予測は、その生成に要したわずかな時間を消費するだけで、出力に採用されることはありません。
投機的デコーディングが最も効果的な場面
コードや構造化データなど、予測しやすいテキストを生成する場合に投機的デコーディングを使いましょう。ドラフトモデルの提案が高い割合で採用され、速度向上が最大になります。プロンプト処理速度ではなく生成速度がボトルネックになっている場合にも有効です。投機的デコーディングはトークンごとの生成ステップを specifically 高速化するためです。
自由創作やブレインストーミングのような、非常に創造的で予測しにくいテキストを生成する場合は投機的デコーディングを避けましょう。ドラフトモデルの提案が採用される割合が下がり、速度向上が縮小します。最悪の場合、ドラフトモデルの追加オーバーヘッドが利得を相殺することもあります。同じファミリーの互換性のある小型モデルをドラフトモデルとして用意できない場合も避けるべきです。
ドラフトモデルのセットアップ
ドラフトモデルはターゲットモデルと同じトークナイザーと語彙を共有する必要があります。異なるファミリーのモデルを組み合わせたり、バージョン間で語彙が変わった同一モデルの異なるサイズを組み合わせたりすると機能しません。最も一般的な構成は、ターゲットと同じファミリーの小型モデルを使うことです(例:同じファミリーの13Bクラスモデルに対して1Bクラスのモデルをドラフトとして使う)。
llama.cppを含む複数のローカル推論ツールが投機的デコーディングをネイティブにサポートしています。セットアップでは通常、起動時にターゲットモデルとドラフトモデルの両方を指定するだけでよく、プロンプトの書き方を変える必要はありません。