Gemma 4 MTP実測チューニング:assistantドラフトモデルで120 tokens/sを狙う

Gemma 4でassistant-MTPドラフトモデルを使い、投機的デコードを行うためのコマンド例を整理します。llama-cliでdraftモデルを指定する方法、-md、--draft-max、-nglなどの意味、そして120 tokens/sが特定ハードウェアでのチューニング目標にすぎない理由を解説します。

主モデル、assistant ドラフトモデル、推論フレームワークが正しく組み合わさっていれば、MTP はローカル GPU 上の Gemma 4 をかなり高速化できます。RTX 4070 のような 12GB VRAM の GPU では、適切な量子化とパラメータ設定により、120 tokens/s に近い生成速度が見えることもあります。

ただし、これは「コマンドをコピーすれば必ず出る」数字ではありません。むしろチューニング目標として見るべきです。モデルが動くこと、VRAM が足りること、ドラフトの命中率が高いこと、サンプリング設定が安定していることがそろって、はじめて速度が伸びます。

ここで MTP がしていること

MTPMulti-Token Prediction、つまり複数 token の予測です。

通常の自己回帰モデルは一度に 1 token を生成します。assistant-MTP は主モデルのために未来の token をいくつか先にドラフトし、その後で主モデルが並列に検証します。ドラフトが当たれば、主モデルは複数 token を一度に受け入れられ、token ごとの待ち時間を減らせます。

この仕組みはよく次のように呼ばれます。

  • Speculative Decoding
  • 投機的デコード
  • ドラフトモデルによる高速化
  • draft model / drafter

目的は高速化であり、モデル能力の向上ではありません。ある token を採用するかどうかは、最後まで主モデルが決めます。

コマンド例

以下はやや上級者向けの llama-cli 参考コマンドです。

1
2
3
4
5
6
./llama-cli \
  -m gemma-4-12b-it-qat-GGUF.gguf \
  --draft-max 2 \
  -md gemma-4-12b-it-qat-assistant-MTP-Q8_0-GGUF.gguf \
  -ngl 99 \
  -p "<|think|>\n写一篇关于量子计算的短文。"

このコマンドの意味は次のとおりです。

  • 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 を使う場合もあります。実測前に確認してください。

1
./llama-cli --help

または:

1
./llama-server --help

パラメータ解説

-m

1
-m gemma-4-12b-it-qat-GGUF.gguf

これは主モデルです。最終出力はこのモデルが検証して決定します。

assistant-MTP は主モデルと一致している必要があります。サイズやバージョンの違う主モデルに適当な assistant モデルを組み合わせると、よくても速度向上がなく、悪い場合はロード失敗や異常出力につながります。

-md

1
-md gemma-4-12b-it-qat-assistant-MTP-Q8_0-GGUF.gguf

-md は draft model、つまり assistant-MTP ドラフトモデルを指定するためのものです。

これは「候補を予測する小さな補助役」と考えるとわかりやすいです。先に次の token をいくつか予測し、主モデルがそれを採用するか判断します。

使っている llama.cpp が -md を認識しない場合は、次を試します。

1
--model-draft gemma-4-12b-it-qat-assistant-MTP-Q8_0-GGUF.gguf

--draft-max

1
--draft-max 2

これはドラフトモデルが一度に最大何 token を予測するかを制御します。

最初から大きな値にせず、2 から始めるのがおすすめです。ドラフト token を増やしても必ず速くなるわけではありません。外れが増えると主モデルが候補を頻繁に拒否し、計算を浪費します。

次のように試せます。

1
--draft-max 1
1
--draft-max 2
1
--draft-max 4

tokens/s と出力品質を見て、どの値を残すか決めます。

-ngl 99

1
-ngl 99

このパラメータは、できるだけ多くのモデル層を GPU にオフロードする指定です。12GB VRAM では、量子化モデルが十分小さければ、大部分または全層を GPU に載せられる可能性があります。

ただし 8GB VRAM ではそのまま真似しないほうがよいです。MTP は assistant モデルを追加でロードするため、主モデルだけを動かす場合より VRAM 圧力が高くなります。

OOM になる場合は、次の順で下げます。

1
-ngl 80
1
-ngl 60
1
-ngl 40

安定する値は、モデル量子化、コンテキスト長、GPU の空き VRAM、デスクトップやシステムの使用量によって変わります。

-p

1
-p "<|think|>\n写一篇关于量子计算的短文。"

-p は prompt を直接渡す指定です。

ここで <|think|> が必要かどうかは、現在の GGUF モデルのチャットテンプレートとモデル説明に依存します。すべての Gemma 4 モデルに共通するスイッチではありません。速度テストでは、まずもっと単純な prompt を使えます。

1
-p "写一篇关于量子计算的短文。"

まず MTP 自体が動くことを確認してから、テンプレートや特殊 token を検討します。

より安定したテストコマンド

初回テストでは、パラメータを少し保守的にします。

1
2
3
4
5
6
7
8
9
./llama-cli \
  -m gemma-4-12b-it-qat-GGUF.gguf \
  -md gemma-4-12b-it-qat-assistant-MTP-Q8_0-GGUF.gguf \
  --draft-max 2 \
  -ngl 60 \
  -c 8192 \
  -n 512 \
  --temp 0.7 \
  -p "用三段话解释量子计算。"

安定して動いたら、-ngl を少しずつ上げます。

1
-ngl 80

さらに試します。

1
-ngl 99

初回から -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 も試します。

1
写一个 Python 函数,把 Markdown 表格转换成 CSV,只输出代码。
1
2
修复下面 JSON,只输出合法 JSON:
{"name":"demo","items":[{"id":1,"tags":["a","b",],},]}
1
用固定格式输出 10 条 Linux 故障排查步骤,每条包含:问题、命令、判断标准。

これらのタスクで tokens/s が明らかに向上し、出力構造が悪化しないなら、その環境では assistant-MTP に価値があります。

よくある問題

-md を追加すると OOM になる

これは普通に起こります。assistant-MTP も VRAM または RAM を使います。

まず下げます。

1
-ngl 60

次にコンテキストを下げます。

1
-c 4096

それでも不安定なら、より小さい量子化に変えるか、いったん MTP を使わないほうがよいです。

パラメータが認識されない

llama.cpp のバージョンと記事内のコマンドが合っていない可能性があります。まずヘルプを見ます。

1
./llama-cli --help

重点的に探す語は次です。

1
draft
1
spec

現在のバージョンに MTP / draft サポートがない場合は、llama.cpp を更新する必要があります。

出力が変になる

まず <|think|> を外し、通常の prompt でテストします。次に temperature を下げます。

1
--temp 0.4

さらに draft 数を下げます。

1
--draft-max 1

これで正常に戻るなら、以前のテンプレート、サンプリング、draft パラメータが攻めすぎていた可能性があります。

まとめ

Gemma 4 assistant-MTP の高速化は、本質的には主モデルとドラフトモデルを組み合わせた投機的デコードです。-md はドラフトモデルを指定し、--draft-max は一度に何 token をドラフトするかを制御し、-ngl は GPU オフロードの度合いを決めます。

12GB VRAM の環境では高い速度を狙えます。120 tokens/s はチューニング目標として使えます。一方、8GB VRAM の環境では draft モデルが追加リソースを消費するため、より保守的に調整する必要があります。

最も安定するやり方は、まず動かし、それから速くすることです。低めの -ngl、短めのコンテキスト、少ない draft 数から始め、安定を確認してから少しずつ上げます。

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。