主モデル、assistant ドラフトモデル、推論フレームワークが正しく組み合わさっていれば、MTP はローカル GPU 上の Gemma 4 をかなり高速化できます。RTX 4070 のような 12GB VRAM の GPU では、適切な量子化とパラメータ設定により、120 tokens/s に近い生成速度が見えることもあります。
ただし、これは「コマンドをコピーすれば必ず出る」数字ではありません。むしろチューニング目標として見るべきです。モデルが動くこと、VRAM が足りること、ドラフトの命中率が高いこと、サンプリング設定が安定していることがそろって、はじめて速度が伸びます。
ここで MTP がしていること
MTP は Multi-Token Prediction、つまり複数 token の予測です。
通常の自己回帰モデルは一度に 1 token を生成します。assistant-MTP は主モデルのために未来の token をいくつか先にドラフトし、その後で主モデルが並列に検証します。ドラフトが当たれば、主モデルは複数 token を一度に受け入れられ、token ごとの待ち時間を減らせます。
この仕組みはよく次のように呼ばれます。
Speculative Decoding- 投機的デコード
- ドラフトモデルによる高速化
- draft model / drafter
目的は高速化であり、モデル能力の向上ではありません。ある token を採用するかどうかは、最後まで主モデルが決めます。
コマンド例
以下はやや上級者向けの llama-cli 参考コマンドです。
|
|
このコマンドの意味は次のとおりです。
gemma-4-12b-it-qat-GGUF.ggufを主モデルとして使う。gemma-4-12b-it-qat-assistant-MTP-Q8_0-GGUF.ggufをドラフトモデルとして使う。- 1 回につきドラフトモデルに最大 2 token まで予測させる。
- できるだけモデル層を GPU にオフロードする。
- prompt を直接渡して生成速度をテストする。
注意:llama.cpp のバージョンによってパラメータ名は異なることがあります。あるバージョンでは -md を使い、別のバージョンでは --model-draft が推奨されます。--draft-max の代わりに --spec-draft-n-max を使う場合もあります。実測前に確認してください。
|
|
または:
|
|
パラメータ解説
-m
|
|
これは主モデルです。最終出力はこのモデルが検証して決定します。
assistant-MTP は主モデルと一致している必要があります。サイズやバージョンの違う主モデルに適当な assistant モデルを組み合わせると、よくても速度向上がなく、悪い場合はロード失敗や異常出力につながります。
-md
|
|
-md は draft model、つまり assistant-MTP ドラフトモデルを指定するためのものです。
これは「候補を予測する小さな補助役」と考えるとわかりやすいです。先に次の token をいくつか予測し、主モデルがそれを採用するか判断します。
使っている llama.cpp が -md を認識しない場合は、次を試します。
|
|
--draft-max
|
|
これはドラフトモデルが一度に最大何 token を予測するかを制御します。
最初から大きな値にせず、2 から始めるのがおすすめです。ドラフト token を増やしても必ず速くなるわけではありません。外れが増えると主モデルが候補を頻繁に拒否し、計算を浪費します。
次のように試せます。
|
|
|
|
|
|
tokens/s と出力品質を見て、どの値を残すか決めます。
-ngl 99
|
|
このパラメータは、できるだけ多くのモデル層を GPU にオフロードする指定です。12GB VRAM では、量子化モデルが十分小さければ、大部分または全層を GPU に載せられる可能性があります。
ただし 8GB VRAM ではそのまま真似しないほうがよいです。MTP は assistant モデルを追加でロードするため、主モデルだけを動かす場合より VRAM 圧力が高くなります。
OOM になる場合は、次の順で下げます。
|
|
|
|
|
|
安定する値は、モデル量子化、コンテキスト長、GPU の空き VRAM、デスクトップやシステムの使用量によって変わります。
-p
|
|
-p は prompt を直接渡す指定です。
ここで <|think|> が必要かどうかは、現在の GGUF モデルのチャットテンプレートとモデル説明に依存します。すべての Gemma 4 モデルに共通するスイッチではありません。速度テストでは、まずもっと単純な prompt を使えます。
|
|
まず MTP 自体が動くことを確認してから、テンプレートや特殊 token を検討します。
より安定したテストコマンド
初回テストでは、パラメータを少し保守的にします。
|
|
安定して動いたら、-ngl を少しずつ上げます。
|
|
さらに試します。
|
|
初回から -ngl を最大にしないほうがよいです。MTP では draft モデルが増えるため、通常実行より VRAM の余裕が重要になります。
120 tokens/s が再現しない理由
120 tokens/s は魅力的ですが、多くの条件に依存します。
| 影響要因 | 説明 |
|---|---|
| GPU | RTX 4070 のような 12GB GPU は、8GB GPU より高い -ngl を使いやすい |
| 量子化 | QAT / Q4 / Q8 draft モデルの組み合わせが VRAM と速度に影響する |
| draft 命中率 | ドラフトが正確なほど、主モデルが一度に受け入れる token が増える |
| prompt の種類 | 構造化テキスト、コード、固定フォーマットは高速化しやすい |
| temperature | ランダム性が高いほど、ドラフトは当てにくい |
| コンテキスト長 | コンテキストが長いほど KV cache の負荷が大きい |
| llama.cpp バージョン | MTP サポートはまだ進化中で、パラメータや性能が変わることがある |
そのため、これは「狙える速度目標」として扱うべきで、保証値ではありません。
速度測定に向く prompt
MTP は、構造化され、ランダム性が低い出力で価値が出やすいです。ベンチマークでは、自由な散文だけでなく次のような prompt も試します。
|
|
|
|
|
|
これらのタスクで tokens/s が明らかに向上し、出力構造が悪化しないなら、その環境では assistant-MTP に価値があります。
よくある問題
-md を追加すると OOM になる
これは普通に起こります。assistant-MTP も VRAM または RAM を使います。
まず下げます。
|
|
次にコンテキストを下げます。
|
|
それでも不安定なら、より小さい量子化に変えるか、いったん MTP を使わないほうがよいです。
パラメータが認識されない
llama.cpp のバージョンと記事内のコマンドが合っていない可能性があります。まずヘルプを見ます。
|
|
重点的に探す語は次です。
|
|
|
|
現在のバージョンに MTP / draft サポートがない場合は、llama.cpp を更新する必要があります。
出力が変になる
まず <|think|> を外し、通常の prompt でテストします。次に temperature を下げます。
|
|
さらに draft 数を下げます。
|
|
これで正常に戻るなら、以前のテンプレート、サンプリング、draft パラメータが攻めすぎていた可能性があります。
まとめ
Gemma 4 assistant-MTP の高速化は、本質的には主モデルとドラフトモデルを組み合わせた投機的デコードです。-md はドラフトモデルを指定し、--draft-max は一度に何 token をドラフトするかを制御し、-ngl は GPU オフロードの度合いを決めます。
12GB VRAM の環境では高い速度を狙えます。120 tokens/s はチューニング目標として使えます。一方、8GB VRAM の環境では draft モデルが追加リソースを消費するため、より保守的に調整する必要があります。
最も安定するやり方は、まず動かし、それから速くすることです。低めの -ngl、短めのコンテキスト、少ない draft 数から始め、安定を確認してから少しずつ上げます。