Speculative Decoding
Speculative Decoding は、小さい draft model が複数 token を先読みし、大きい target model がそれらをまとめて検証する LLM inference acceleration method です。生成分布を変えないように accept / reject する設計により、品質を保ちながら decode latency を下げることを狙います。
自作概念図。Draft model が候補 token を生成し、target model が一括で検証して、受理できる token を prefix に追加します。
なぜ速くなるのか
Autoregressive decoding は、token を 1 個ずつ生成するため逐次依存が強いです。特に decode phase では、batch が小さい場合に GPU の compute を使い切れず、memory bandwidth や kernel launch overhead が効きます。Speculative decoding は、安い draft model で未来 token を先読みし、target model の 1 回の forward pass で複数 token を検証することで、target model の呼び出し回数を減らします。
基本 algorithm
- Draft model が、現在の prefix から 個の token を生成します。
- Target model が、その 個の token を teacher-forcing で一括評価します。
- 各 token について、 が提案した確率と の確率の比に基づき accept / reject します。
- Reject が起きた位置では、target model の補正分布から token を sample します。
- Accept された token は output prefix に追加されます。
典型的な accept probability は、draft token に対して次のように表されます。
この rejection sampling 的な補正により、理想化された条件では target model 単体で sampling した分布と同じ分布を保つことができます。
何が性能を決めるか
| 要素 | 影響 |
|---|---|
| Draft model の速さ | 小さいほど安いが、精度が低すぎると reject が増えます。 |
| Draft model の一致度 | Target model と分布が近いほど accept 率が上がります。 |
| Draft 長 | 長いほど一度に進めますが、reject された後ろは無駄になります。 |
| Batch / serving load | 高負荷 serving では scheduling との相互作用が大きくなります。 |
| Sampling 設定 | Temperature が高いほど accept 率が下がりやすいです。 |
Speculative decoding の speedup は、単純な FLOPs 比だけでは決まりません。Draft model と target model を同時に走らせる device placement、KV cache 管理、batching、kernel fusion も重要です。
Variants
Separate draft model
最も標準的な構成です。Small LLM や distilled model が draft を担当します。Target model と tokenizer、chat template、pretraining distribution が近いほど受理率は上がります。
Medusa
Medusa は、base model の上に複数の decoding head を追加し、複数 token 先を同時に予測する方法です。別の draft model を持たず、single model の拡張として speculative な候補を作ります。
EAGLE
EAGLE は、token そのものではなく feature や hidden state の extrapolation を使って、より target model に近い draft を作ることを狙います。Draft の quality を高めて accept 率を上げる方向の variant です。
Lookahead Decoding
Lookahead Decoding は、parallel decoding や n-gram 的な candidate verification を使い、draft model に依存しない形で将来 token をまとめて確定しようとする family です。
いつ有効か
Speculative decoding は、次の条件で特に効きます。
- Target model が大きく、draft model が十分に安い。
- Draft model が target model の分布をよく近似している。
- Temperature が低〜中程度で、accept 率が高い。
- 1 request あたりの decode token が長い。
- Serving stack が speculative decoding を native に支えている。
逆に、high temperature の creative sampling、tool call の短い応答、すでに high-throughput batching が効いている環境では、効果が小さくなることがあります。
実装上の注意
- Draft と target の tokenizer が一致しないと扱いが複雑になります。
- Chat template の差は accept 率を下げます。
- KV cache は draft と target で別に管理されることが多く、memory footprint は増えます。
- Deterministic greedy decoding では簡略化できますが、sampling では分布補正が必要です。
- Speculative decoding は latency 最適化 であり、model の能力を増やす方法ではありません。
数式で見る speculative decoding の正しさ
Draft model を 、target model を とします。Draft が提案した token は、次の確率で accept されます。
Reject された場合は、target model と draft model の差分から作る補正分布で sample します。
この式の気持ちは、「draft が target よりも過大評価している token は reject されやすくし、draft が見逃した target 側の確率質量は補正分布から回収する」というものです。理想的な条件では、最終的な生成分布は target model だけで sampling した場合と一致します。
Speedup は、draft length と accept 率 に大きく依存します。粗く見ると、一回の target forward で進む token 数の期待値は次のようになります。
Draft が target に近いほど が高くなり、一回の target call で多くの token を進められます。一方で、draft が遅すぎたり reject が多すぎたりすると、逆に overhead が増えます。
関連ページ
主なソース
- Fast Inference from Transformers via Speculative Decoding: https://arxiv.org/abs/2211.17192
- Accelerating Large Language Model Decoding with Speculative Sampling: https://arxiv.org/abs/2302.01318
- Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads: https://arxiv.org/abs/2401.10774
- EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty: https://arxiv.org/abs/2401.15077
- Lookahead Decoding: https://arxiv.org/abs/2402.02057