LLMの推論の遅さは何が原因か
LLMはテキストを生成するとき、1トークンずつ順番に出力する「自己回帰(autoregressive)」という方式で動く。「次のトークンを予測→それを入力に加えて次のトークンを予測→…」を繰り返す仕組みだ。
この方式の問題は、1トークン生成するたびに巨大なモデル全体を1回フォワードパス(推論計算)しなければならないことだ。GPT-4やClaude 3などの最大規模のモデルは数千億パラメータを持つため、1トークンの生成だけでも相応の計算リソースが必要になる。
300トークンの文章を生成するには300回のフォワードパスが必要で、これがレイテンシを生む主要因だ。Speculative Decodingはこの問題に真正面から取り組む技術だ。
Speculative Decodingの基本原理
直感的な説明
Speculative Decodingのアイデアは「会議の議事録作成」に例えると理解しやすい。大規模なモデル(ターゲットモデル)を「最終チェック担当の上司」、小規模な高速モデル(ドラフトモデル)を「下書きを作るアシスタント」とする。
アシスタントが会議録の下書きを素早く書き上げ、上司が一括でチェックする。上司が問題ないと判断した部分はそのまま採用し、問題のある部分だけ修正する。毎回上司が一言ずつ口述するよりも、はるかに効率的に最終的な議事録が仕上がる。これがSpeculative Decodingの本質だ。
技術的な仕組み
具体的には次の2段階で動く。
第1段階「ドラフト生成」: 小さくて高速なドラフトモデルがk個(例: 5〜8個)のトークンを連続して生成する。ドラフトモデルはターゲットモデルより大幅に小さいため、このステップは高速だ。
第2段階「検証」: ターゲットモデルがドラフトモデルの生成したk個のトークンを並列で一括検証する。LLMのフォワードパスは並列処理が得意なので、k個のトークンを同時に評価してもほぼ1回のフォワードパスで処理できる。
検証の結果、ドラフトトークンが正しければそのまま採用し、間違っているトークンが現れたら、そこまでを採用して残りを破棄し、ターゲットモデルが正しいトークンを生成する。
受容率と速度の関係
Speculative Decodingの効果は「受容率(ドラフトトークンがターゲットモデルに受け入れられる割合)」に依存する。
受容率が高い(=ドラフトモデルの予測が正確)ほど、多くのドラフトトークンを一括採用でき、速度向上が大きくなる。一般的な自然言語生成タスクでは、60〜90%の受容率が報告されている。これは「生成しているトークンの大半が予測可能」という自然言語の特性を活かした手法といえる。
実際の速度改善
研究論文やプロダクションでの報告によると、Speculative Decodingは2〜4倍程度の速度向上を実現することが多い。タスクの性質(繰り返しパターンが多いか少ないか)やドラフトモデルの品質によって変動するが、2倍の速度向上は多くのケースで達成できる。
重要なのは、この速度向上が出力品質の変化なしに実現する点だ。Speculative Decodingは数学的に証明された等価性を持ち、ターゲットモデルが単独で生成した場合と同じ確率分布からサンプリングされることが保証されている。速さと質を両立できる数少ない最適化手法だ。
ドラフトモデルの選択
スペックにあったモデルを選ぶ
ドラフトモデルはターゲットモデルと同じ系統(同じアーキテクチャ・同じトークナイザー)のモデルを選ぶ必要がある。受容率を高めるには、ドラフトモデルがターゲットモデルと同じような語彙・文体で生成できることが条件になるためだ。
例えばLlama-70Bをターゲットモデルにするなら、Llama-7BやLlama-13Bをドラフトモデルとするのが典型的な組み合わせだ。ターゲットの10分の1〜5分の1程度の規模が使われることが多い。
Self-Speculative Decoding
一つのモデルだけでSpeculative Decodingを実現する「Self-Speculative Decoding」という手法もある。大きなモデルの一部の層をスキップした「軽量版」がドラフトとして動き、フル実行がターゲットとして検証する。別途ドラフトモデルを管理する必要がない点が運用面でのメリットだ。
実装と活用状況
Hugging FaceのTransformersライブラリはSpeculative Decodingをサポートしており、assistant_modelパラメータを指定するだけで利用できる。プロダクション環境では、vLLMやTGI(Text Generation Inference)などの推論サーバーが最適化された実装を提供している。
AnthropicやOpenAIなどのAPIプロバイダーもサーバー側でSpeculative Decodingを活用しており、ユーザーが意識せずとも高速化の恩恵を受けている。
向いているユースケース・不向きなユースケース
Speculative Decodingは予測可能なテキスト生成(定型文・コード・繰り返しパターンが多いテキスト)で特に効果が大きい。一方、非常にクリエイティブな生成や珍しい表現が多いタスクでは受容率が下がり、効果が限定的になる。
また、バッチサイズが大きい(多数のリクエストを並列処理する)環境では、Speculative Decodingよりも単純な並列化の方が効率的なこともある。サービスの利用形態に合わせた判断が必要だ。
まとめ
Speculative Decodingは、高速なドラフトモデルが先読みでトークンを生成し、大きなターゲットモデルが並列で一括検証する仕組みだ。出力品質を変えずに2〜4倍の速度向上を実現し、今やLLM推論の最適化において欠かせない手法となっている。API経由での利用ではプロバイダー側が透明に活用しており、セルフホスト環境でも標準的な推論ライブラリで導入できる実用的な技術だ。