モデルのしくみ 上級
投機的デコーディング
Speculative Decoding
小さく速いモデルに先読みで下書きを作らせ、大きなモデルがまとめて検証することで、出力を変えずに生成を速める技術です。待ち時間を減らす工夫の1つです。主に推論サーバー側で使われる高速化の手法です。
別の呼び方スペキュラティブデコーディング、投機的サンプリング
例推論サーバーで投機的デコーディングを有効にしたところ、応答の生成速度が上がった。
詳しく
投機的デコーディングとは、大きなモデルの文章生成を、品質を落とさずに速くする推論の高速化技術です。小さくて速い「下書き役」のモデルが数トークン先まで予想し、大きな本命のモデルがそれを一括で確認する、という分業をします。
なぜ必要か
LLM は、文章を1トークンずつ順番に生成します。1つ出すたびに、巨大なモデルの重みをメモリから読み出す必要があり、待ち時間の大部分は計算そのものよりも、このデータ移動に費やされます。つまり、GPU の計算能力が余っているのに、1トークンずつ待たされている状態です。
一方、すでにある文章を「検証する」ときは、複数のトークンを並べて一度に計算できます。そこで、先に候補をまとめて作っておき、本命のモデルは一括で確認だけすれば、待ち時間を減らせます。
しくみ
- 下書き役の小さなモデルが、続きの数トークンを素早く予想する
- 本命の大きなモデルが、その予想を一度の計算でまとめて検証する
- 本命のモデルが「自分でもそう選んだ」と判断した部分は採用し、食い違った所から先は捨てて、本命の出力に置き換える
- 繰り返す
採用・不採用の判定は、本命のモデルの出力分布と矛盾しないように設計されています。そのため、うまく実装すれば、出力の分布は本命のモデルを単独で使った場合と同じになります。
具体例
コードの補完や、定型的な文面の生成のように、先の展開が予想しやすい場面では、下書きが当たりやすく、大きな高速化が期待できます。一方、創作文のように予想が外れやすい場面では、効果は小さくなります。
使うときの注意
- 速くなる程度は、下書きの当たりやすさに左右されます。下書き役は、本命と似た傾向のモデルである必要があります。
- 下書き役の分、メモリを追加で使います。
- 高速化の方式には、別の小型モデルを使う方法のほかに、本命のモデル自身に複数トークンの予想機能を持たせる方法などもあります。
- 利用者としては、推論サーバーの設定項目として出会うことが多く、APIを使うだけなら意識する場面は少ないでしょう。
導入するときの見方
高速化の効果は、実際の用途のデータで測るのが確実です。ベンチマークで速くなっても、自分の使い方(短い質問が中心、出力が創作的、など)では差が出ないことがあります。速度だけでなく、出力の品質が変わっていないかも、あわせて確認しておくと安心です。
関連する考え方
応答の速さは、レイテンシとして測られます。モデル自体を小さくする蒸留や量子化とは異なり、モデルの出力を変えずに速くする点が、この技術の特徴です。
あわせて知りたい言葉
- 推論(インファレンス)学習を終えた AI モデルに、実際に入力を与えて答えや生成物を出させる段階のことです。チャットで質問したり、画像を生成したりするときに裏で行われている処理を指します。
- レイテンシ依頼を送ってから応答が返るまでの待ち時間のことです。AI では、最初の文字が出るまでの時間と全文が出終わるまでの時間に分けて考え、使い心地を大きく左右する要素です。
- KVキャッシュLLM が文章を生成するとき、過去の単語について計算した中間結果を保存して使い回す仕組みです。同じ計算を繰り返さずに済むため、生成が速くなりますが、メモリを多く消費します。
- 推論サーバー学習済みのモデルを読み込み、API として外部からの質問に答えられるようにするソフトウェアです。vLLM が代表例で、多数のリクエストを効率よく同時にさばく工夫が詰まっています。
- 蒸留大きく性能の高いモデル(教師)の出力を手本にして、小さいモデル(生徒)を学習させる手法です。小さく速いモデルに、大きいモデルの能力の一部を移すことができ、費用の削減につながります。