OpenClawをGemma4で使っていると31b-it-q8_0くらいの性能は欲しいのですが、MTP非対応のollamaでは処理がとても遅い…
ということでllama.cppでMTPを使って高速化しました。
環境とモデルの準備
使用するマシンはGMKtek EVO-X2の128GBモデル。OSはWindowsです。
非MTPでの速度
ollama run gemma4:31b-it-q8_0 –think=false –verbose “分子動力学法について500文字程度で説明して。”
この結果はだいたい 6 tokens.sでした。
llama.cppの準備
llama.cppはこちらから最新版の Windows x64 (Vulkan) をダウンロードします。
ダウンロードしたら適当な場所に展開します。PATHは通さなくてもいいです。
モデルの準備
モデルはUnslothのMTP対応版を使います。
ダウンロードするのは以下の2つ。
- gemma-4-31B-it-Q8_0.gguf (32.6 GB)
- MTP/gemma-4-31B-it-Q8_0-MTP.gguf (515 MB)
これをgemma4-31bというフォルダに保存します。
フォルダ構成
以下のようなフォルダの構成で進めていきます。
- run_gemma4_31b.bat
- llama.cpp
- llama-server.exe
- unsloth
- gemma4-31b
- gemma-4-31B-it-Q8_0.gguf
- gemma-4-31B-it-Q8_0-MTP.gguf
- gemma4-31b
バッチファイル
次のようなバッチファイルをメモ帳等で作成します。
@echo off
.\llama.cpp\llama-server ^
--alias "unsloth/gemma-4-31b-it-q8_0" ^
--host 0.0.0.0 ^
--port 11435 ^
--n-gpu-layers 999 ^
--ctx-size 262144 ^
--cache-type-k q8_0 ^
--cache-type-v q8_0 ^
--flash-attn on ^
--batch-size 2048 ^
--ubatch-size 2048 ^
-fit off ^
--no-mmap ^
--parallel 1 ^
--model "unsloth\gemma4-31b\gemma-4-31B-it-Q8_0.gguf" ^
--model-draft "unsloth\gemma4-31b\gemma-4-31B-it-Q8_0-MTP.gguf" ^
--spec-type draft-mtp ^
--spec-draft-n-max 2 ^
--temp 1.0 ^
--top-p 0.95 ^
--top-k 64 ^
--chat-template-kwargs "{\"enable_thinking\":false}"
pause
–host 0.0.0.0 で外部接続ができるようにしています。localhostアクセスのみにするなら消してください。
–port は11435 番にしていますが、これは任意の番号を設定してください。
実行
次のコマンドを実行します。PowerShellがよく分からないのでWSLから実行しています。
curl -X POST http://localhost:11435/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "unsloth/gemma-4-31b-it-q8_0",
"messages": [{"role": "user", "content": "分子動力学法について500文字程度で解説してください。"}],
"stream": false
}' | jq .
次の出力が返ってきます。
{
“choices”: [
{
“finish_reason”: “stop”,
“index”: 0,
“message”: {
“role”: “assistant”,
“content”: “分子動力学法(MD法:Molecular Dynamics)とは、
~中略~
れます。”
}
}
],
“created”: 1781235756,
“model”: “unsloth/gemma-4-31b-it-q8_0”,
“system_fingerprint”: “b9601-4c6595503”,
“object”: “chat.completion”,
“usage”: {
“completion_tokens”: 235,
“prompt_tokens”: 27,
“total_tokens”: 262,
“prompt_tokens_details”: {
“cached_tokens”: 1
}
},
“id”: “chatcmpl-sc49H6AE4VCOWXHm1Ix7IbEBftLASD58”,
“timings”: {
“cache_n”: 1,
“prompt_n”: 26,
“prompt_ms”: 362.767,
“prompt_per_token_ms”: 13.952576923076922,
“prompt_per_second”: 71.67134827589058,
“predicted_n”: 235,
“predicted_ms”: 18464.609,
“predicted_per_token_ms”: 78.57280425531916,
“predicted_per_second”: 12.727049893122567,
“draft_n”: 226,
“draft_n_accepted”: 121
}
}
出力速度は 12.72 tokens/s でした。
ollamaの非MTPが 6 tokens/sだったので、MTPによって約2倍の高速化ができました。
draft_n 226, draft_n_accepted 121なので、ドラフトモデルが生成した226トークンのうち121トークンはアクセプトされました。出力トークンは235なので、重い処理は半分になり、もう半分は高速な検証だけで済んだという形です。
RAMとVRAMの使用量
Windowsのタスクマネージャで確認しました。
| プロセス名 | llama-server.exe |
| RAM | 3,373,392 K |
| VRAM | 48,686,680 K |
31B q8_0 の最大コンテキスト長(256k)だと48 GBを使用します。EVO-X2なら余裕だぜ。
あとはOpenClawに
http://hogehoge:11435/v1 でgemma4:31bのllama.cppを動かしてるからOpenAI互換モデルとして設定よろしく
と言うと、gpt-5.4で動くエージェントならいい感じに設定してくれます。
(こういう設定・デバッグ作業はさすがにクラウドモデルが必要ですね)


コメント