Ryzen AI Max+ 395でGemma4をMTPで動かす

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

バッチファイル

次のようなバッチファイルをメモ帳等で作成します。

@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
RAM3,373,392 K
VRAM48,686,680 K

31B q8_0 の最大コンテキスト長(256k)だと48 GBを使用します。EVO-X2なら余裕だぜ。

あとはOpenClawに

http://hogehoge:11435/v1 でgemma4:31bのllama.cppを動かしてるからOpenAI互換モデルとして設定よろしく

と言うと、gpt-5.4で動くエージェントならいい感じに設定してくれます。
(こういう設定・デバッグ作業はさすがにクラウドモデルが必要ですね)

コメント

タイトルとURLをコピーしました