llama.cppのprompt lookup drafting、最適化で最大140倍高速化

Hayder Tirmazi氏は、llama.cppのprompt lookup decodingにおけるドラフト処理を最大42倍高速化し、メモリ使用量を最大2.6倍削減する一連の最適化を2026年9月26日に公開しました。さらにDaniel Lemire氏が送ったPRにより、元の最適化に加えて最大4.2倍、全体で最大140倍の高速化が可能になっています。llama.cppはggml-orgが公開するC/C++実装の推論ソフトウェアで、量子化やCPU・GPU併用に対応します。

何が新しいか

Tirmazi氏は、Daniel Lemire氏とMartin Ankerl氏の成果を基礎にした一連の単純な性能最適化によって、llama.cppのprompt lookup decodingのドラフト処理を高速化しました。その後Lemire氏自身がPRを提出し、元の最適化の上にさらなる高速化を重ねています。

項目 数値
元の最適化による最大高速化 42倍
元の最適化による最大メモリ削減 2.6倍少ない
Lemire氏のPRによる追加の最大高速化 4.2倍
全体の最大高速化 140倍

n-gramキャッシュとドラフト条件

prompt lookup decoding(n-gram speculation)は、n-gramモデルをドラフトモデルとして使うspeculative decodingの特殊例です。llama.cppは3種類のn-gramキャッシュを保持します。コンテキストキャッシュは現在処理中のトークン列についてサイズ1〜4のn-gramを保持し、生成に伴って更新されます。動的キャッシュは過去のモデル実行(以前の会話など)のn-gramカウントを、静的キャッシュは静的テキストコーパスから作ったサイズ2のn-gramを保持します。

スコアは s_n^f(y) = f(X_n, y) · w(y) で計算され、f はコンテキストキャッシュ c_ctx または動的キャッシュ c_dyn です。重みは c_st(X_2, y) > 0 のとき w(y) = 100 c_st(X_2, y)、それ以外は w(y) = 1 となり、静的キャッシュと一致するトークンが優遇されます。静的キャッシュがない場合はすべてのトークンで w(y) = 1 です。

最高スコアのトークン y* は、設定可能な閾値 a_n と p_n について F(X_n) ≥ a_n かつ f(X_n, y*) ≥ p_n F(X_n) を満たす場合にドラフトされます。ここで F(X_n) は X_n の後に何らかのトークンが続いた回数の合計で、y* が X_n に続いて出現した割合が少なくとも p_n である必要があります。

試し方

prompt lookup decoding(n-gram speculation)をサポートする推論エンジンを使います。llama.cppのほかvLLM、Hugging Faceのtransformersライブラリも同機能をサポートします。静的テキストコーパスから静的キャッシュを作る場合は llama-lookup-create を使用します。

この記事の固有名詞

コメント (0)

まだコメントはありません。

コメントを書く

2000文字以内