モデルのしくみ 上級

投機的デコーディング

Speculative Decoding

小さく速いモデルに先読みで下書きを作らせ、大きなモデルがまとめて検証することで、出力を変えずに生成を速める技術です。待ち時間を減らす工夫の1つです。主に推論サーバー側で使われる高速化の手法です。

別の呼び方スペキュラティブデコーディング、投機的サンプリング

例推論サーバーで投機的デコーディングを有効にしたところ、応答の生成速度が上がった。

詳しく

投機的デコーディングとは、大きなモデルの文章生成を、品質を落とさずに速くする推論の高速化技術です。小さくて速い「下書き役」のモデルが数トークン先まで予想し、大きな本命のモデルがそれを一括で確認する、という分業をします。

なぜ必要か

LLM は、文章を1トークンずつ順番に生成します。1つ出すたびに、巨大なモデルの重みをメモリから読み出す必要があり、待ち時間の大部分は計算そのものよりも、このデータ移動に費やされます。つまり、GPU の計算能力が余っているのに、1トークンずつ待たされている状態です。

一方、すでにある文章を「検証する」ときは、複数のトークンを並べて一度に計算できます。そこで、先に候補をまとめて作っておき、本命のモデルは一括で確認だけすれば、待ち時間を減らせます。

しくみ

  1. 下書き役の小さなモデルが、続きの数トークンを素早く予想する
  2. 本命の大きなモデルが、その予想を一度の計算でまとめて検証する
  3. 本命のモデルが「自分でもそう選んだ」と判断した部分は採用し、食い違った所から先は捨てて、本命の出力に置き換える
  4. 繰り返す

採用・不採用の判定は、本命のモデルの出力分布と矛盾しないように設計されています。そのため、うまく実装すれば、出力の分布は本命のモデルを単独で使った場合と同じになります。

具体例

コードの補完や、定型的な文面の生成のように、先の展開が予想しやすい場面では、下書きが当たりやすく、大きな高速化が期待できます。一方、創作文のように予想が外れやすい場面では、効果は小さくなります。

使うときの注意

  • 速くなる程度は、下書きの当たりやすさに左右されます。下書き役は、本命と似た傾向のモデルである必要があります。
  • 下書き役の分、メモリを追加で使います。
  • 高速化の方式には、別の小型モデルを使う方法のほかに、本命のモデル自身に複数トークンの予想機能を持たせる方法などもあります。
  • 利用者としては、推論サーバーの設定項目として出会うことが多く、APIを使うだけなら意識する場面は少ないでしょう。

導入するときの見方

高速化の効果は、実際の用途のデータで測るのが確実です。ベンチマークで速くなっても、自分の使い方(短い質問が中心、出力が創作的、など)では差が出ないことがあります。速度だけでなく、出力の品質が変わっていないかも、あわせて確認しておくと安心です。

関連する考え方

応答の速さは、レイテンシとして測られます。モデル自体を小さくする蒸留や量子化とは異なり、モデルの出力を変えずに速くする点が、この技術の特徴です。

あわせて知りたい言葉

「モデルのしくみ」の言葉をすべて見る