受け入れ率95%なら、そのまま出す場合の0.32倍の時間で済みました。
20%まで下がると1.37倍、逆に遅くなります。下書きが外れるだけ損をします。
下書きをまとめて答え合わせします。外れる割合が高いと、下書きにかけた時間が無駄になります。
投機的デコードには、複数の方式があります。公式はvLLMは投機的デコードのさまざまな方式に対応していると述べています。
どの方式でも、鍵になるのは受け入れ率です。実際に流して数えました。
4,000トークン出す。1回に下書きを5個作り、大きいモデルがまとめて答え合わせする
大きいモデルの1トークンは22ms、下書き役は1トークン3ms
受け入れ率 1回で進むトークン 必要な答え合わせ回数 かかる時間 そのまま出す場合との比
20% 1.23個 3,249回 120.2秒 1.37倍
40% 1.68個 2,375回 87.9秒 1.00倍
60% 2.41個 1,657回 61.3秒 0.70倍
80% 3.78個 1,059回 39.2秒 0.45倍
95% 5.31個 754回 27.9秒 0.32倍
95%なら0.32倍、3倍速く出せます。1回で5.31個進むので、答え合わせの回数が減ります。
20%まで下がると1.37倍です。そのまま出すより遅くなりました。下書きに使った3ms×5個が、ほとんど無駄になります。
この条件では40%でちょうど1.00倍でした。それより下では使わないほうが速いことになります。
分岐点は、大きいモデルと下書き役の速度差で動きます。差が大きいほど、低い受け入れ率でも元が取れます。
同じ「まとめて確かめる」形の得失は連続バッチングの記事でも扱いました。
受け入れ率が下がるほど、下書きの無駄が響く。
vLLM supports a variety of methods of speculative decoding.原文vLLM 公式ドキュメント「Speculative Decoding」 この内容の有効期限2027-02-18
下書き役は別に用意します。その本数は多いほど良いわけではなく、受け入れ率に合わせる必要があります。
投機的デコードには、下書き役が別に要ります。公式は別の下書きモデルが要ると述べています。
その下書きを何個作るのが良いのか。実際に本数を変えて数えました。
受け入れ率を55%で固定し、下書きの本数を変える
下書きの本数 1回で進むトークン 必要な回数 かかる時間 無駄になった下書き
1個 1.55個 2,578回 64.5秒 1,156個
2個 1.85個 2,159回 60.5秒 2,477個
4個 2.10個 1,905回 64.8秒 5,525個
8個 2.18個 1,839回 84.6秒 12,551個
16個 2.17個 1,847回 129.3秒 27,397個
受け入れ率55%では、2個がいちばん速く60.5秒でした。1個や4個より短くなっています。
16個まで増やすと129.3秒です。1個のときより2倍遅くなりました。無駄な下書きが27,397個に膨らんでいます。
1回で進むトークンは、8個で2.18個、16個でも2.17個とほぼ同じです。増やしても進む量は伸びません。
受け入れ率55%なら、平均して2個目あたりで外れます。それ以上作っても、答え合わせされる前に捨てられます。
だから本数は、受け入れ率から逆算して決めることになります。受け入れ率が高いほど、多めの本数が効きます。
既定では語彙が一致している必要があります。違う語彙を使うと、受け入れ率がそのぶん下がります。
投機的デコードは、語彙が一致している前提です。公式は既定では、vLLMは下書きモデルと対象のモデルが同じ語彙を共有していることを求めると述べています。
違う語彙を使うとどうなるのか。実際に置き換えて比べました。
大きいモデルの語彙は32,000種。下書き役の語彙が違う場合を比べる 組み合わせ 共有できる語彙 実質の受け入れ率 使えるか 同じ語彙 100% 60.0% そのまま使える 近い語彙(別系統・同規模) 72% 43.2% 要変換・使える 小さい語彙(軽量トークナイザ) 40% 24.0% 要変換・使える
同じ語彙なら60.0%の受け入れ率です。近い語彙に変えると43.2%まで下がります。
軽量なトークナイザだと24.0%です。最初の節で見た分岐点の40%を割り込みます。
下書き役を選ぶとき、単純に軽いモデルを選ぶと語彙の不一致で受け入れ率が落ちることがあります。
だから優先すべきは、大きいモデルと同じ語彙を持つかどうかです。速さはその次の条件になります。
3つの計測はいずれも手元で書いた模型で、実際のvLLMを動かしたものではありません。大きいモデル22ms・下書き役3msという速さの比、受け入れ率の値はすべて置いたものです。語彙の重なりから実質の受け入れ率を計算する式も単純化しており、実際の劣化の仕方はモデルの組み合わせによって違います。ここで見せているのは、受け入れ率が一定の水準を下回ると逆効果になるという点と、下書きの本数には受け入れ率に応じた最適点があるという点の2つです。
By default, vLLM requires the draft and target models to share the same vocabulary.原文vLLM 公式ドキュメント「Speculative Decoding」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る