概要
- Gemma 4のMTP(Multi-Token Prediction)導入により、Mac上で2倍近い速度向上を実現
- OpenAI互換API経由でローカルコーディングエージェントを構築
- スクリーンショット/画像入力も可能なマルチモーダル対応
- llama.cpp(Metal対応)とUnslothモデルを活用した高速推論
- Qwen3.6との比較検証も実施し、速度面でGemma 4に軍配
Gemma 4のローカルコーディングエージェント高速化事例
- Gemma 4 の MTP対応 により、ローカル環境でのコーディングエージェント運用を大幅高速化
- Mac(Apple M1 Max, 64GB, macOS 15.7.7) で llama.cpp(Metal対応) をビルド・利用
- Gemma 4 26B-A4B(GGUF形式) を主モデルに採用
- Q8 MTPドラフトモデル を組み合わせてスペキュレーティブデコーディングを実現
- Gemma 4マルチモーダルプロジェクタ を追加し、画像入力にも対応
- Pi をターミナル用コーディングエージェントとして設定
ベンチマーク・速度比較
- ベンチマークプロンプト:「unified diffを解析し変更ファイルパスを返すPython関数を作成し、2つのエッジケースを説明せよ」
- llama.cpp + Metalのみ
- セットアップ:298.0 tok/s
- 生成速度:58.2 tok/s(十分実用的だが、さらなる高速化を目指す)
- MTPドラフトモデル追加時
- 生成速度:72.2 tok/s(約24%高速化)
- --spec-draft-n-max 3が最速(1~6で最適値を探索)
MLXとの比較
- llama.cpp + Metal + MTP :72.2 tok/s(最速)
- MLX-LM(mlx-lm) :最大45.8 tok/s(Gemma 4 4bitモデル)
- llama.cppの最適化により、MLXよりも高速
画像入力対応
- Piで画像入力を有効化するには
- モデルのinputに["text", "image"]を指定
- llama.cppサーバーに mmproj-BF16.gguf (マルチモーダルプロジェクタ)を--mmprojで読み込む
- 画像入力対応後もテキスト生成速度に変化なし
セットアップ手順(要点)
- llama.cppのインストール・ビルド
- brew経由で依存関係導入(cmake, git, tmux, python@3.11)
- Metal・Accelerate有効でビルド
- モデルファイルのダウンロード
- HuggingFace CLIでGemma 4本体・MTPドラフト・mmprojを取得
- ローカルサーバー起動
- llama-serverコマンドに各種オプションを付与し、OpenAI互換API(http://127.0.0.1:8080/v1)で待機
- tmuxを使ったラッパースクリプト例も紹介
- Piの設定
- ~/.pi/agent/models.jsonにローカルプロバイダを追加
- inputに["text", "image"]を指定してマルチモーダル化
- 必要に応じてデフォルトプロバイダに設定
- Piでの利用例
- pi --provider gemma4-local --model gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf
- スクリーンショット入力例:pi -p @"/path/to/screenshot.png" "Describe this image..."
最終構成まとめ
-
推論ランタイム:llama.cpp(Metal + Accelerate)
-
メインモデル:gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf
-
ドラフトモデル:gemma-4-26B-A4B-it-Q8_0-MTP.gguf
-
MTP設定:--spec-draft-n-max 3
-
マルチモーダルプロジェクタ:mmproj-BF16.gguf
-
サーバー:llama-server(127.0.0.1:8080)
-
API:OpenAI互換 /v1
-
コーディングエージェント:Pi(["text", "image"]入力対応)
-
MTPドラフトモデルの導入 で、Gemma 4の生成速度は 58.2→72.2 tok/s に向上
-
ローカルOpenAI互換サーバーとして、シンプルかつ高速な構成が可能
Qwen3.6との比較・補足
- Qwen3.6 35B-A3B はGemma 4よりも コーディング性能が高い が、速度は遅い
- Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf + MTP + mmproj構成で 55 tok/s
- Gemma 4の 72 tok/s と比較すると、待ち時間が大幅に異なる
- Qwen3.6用モデルも同様にHuggingFace CLIで取得・llama-serverで起動可能
- Piでの設定例もGemma 4と同様
参考リンク
- Unsloth Gemma 4ドキュメント
- Unsloth Qwen3.6ドキュメント
- Unsloth MTP解説
- llama.cpp公式
- Pi公式
- Introducing Gemma 4 12B: a unified, encoder-free multimodal model
- "MTP enables Google Gemma 4 run ~1.4–2.2× faster with no accuracy loss"(Google発表より)