Gemma 4 31B on ROCm (AMD Radeon 8060S)
概要
Google製オープンソースLLM「Gemma 4 31B」をAMD GPU(ROCm)で動作させた記録。
環境
| 項目 |
内容 |
| OS |
Ubuntu 24.04.4 LTS |
| GPU |
AMD Radeon 8060S (gfx1151) |
| VRAM |
32GB (ROCm認識値) |
| ROCm |
7.2.1 (/opt/rocm) |
| llama.cpp |
b8661 (b7ad48ebd) |
ダウンロード
mkdir -p ~/gemma4 && cd ~/gemma4
wget -c "https://huggingface.co/unsloth/gemma-4-31B-it-GGUF/resolve/main/gemma-4-31B-it-Q4_K_M.gguf"
llama.cpp ビルド(ROCm対応)
cd ~/llama.cpp
git pull
cmake -B build \
-DGGML_HIP=ON \
-DAMDGPU_TARGETS=gfx1151 \
-DCMAKE_PREFIX_PATH=/opt/rocm \
-DCMAKE_HIP_COMPILER=/opt/rocm/lib/llvm/bin/clang++ \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(nproc)
実行
cd ~/gemma4
HSA_OVERRIDE_GFX_VERSION=11.5.1 \
~/llama.cpp/build/bin/llama-cli \
--model gemma-4-31B-it-Q4_K_M.gguf \
--gpu-layers 999 \
--ctx-size 4096 \
-p "ここにプロンプトを入力" \
-n 256
パラメータ説明
| パラメータ |
値 |
説明 |
HSA_OVERRIDE_GFX_VERSION |
11.5.1 |
gfx1151向けROCm互換設定 |
--gpu-layers |
999 |
全層をGPUにオフロード |
--ctx-size |
4096 |
コンテキスト長(VRAM 32GBの場合の上限目安) |
ベンチマーク結果
| 指標 |
速度 |
| Prompt処理 |
62.5 t/s |
| トークン生成 |
10.7 t/s |
注意事項
- ROCm認識VRAMは32GB(BIOSのUMAフレームバッファ設定に依存)
-
--ctx-size を大きくするとKVキャッシュがVRAMを超えてOOMになる場合あり
- Gemma 4はllama.cpp b8661以降が必要(それ以前は
unknown model architecture: 'gemma4' エラー)
追記4/5
Gemma 4 31B — ms-vlmeval テスト結果まとめ
実行環境
| 項目 |
詳細 |
| モデル |
gemma-4-31B-it-Q4_K_M.gguf |
| 量子化 |
Q4_K_M(約18 GB) |
| GPU |
AMD Radeon Graphics gfx1151(RYZEN AI MAX+ 395、48 GB VRAM) |
| ランタイム |
llama.cpp llama-server + ROCm/HIP |
| オフロード層数 |
61 / 61(全層GPUオフロード) |
| コンテキストサイズ |
8192 トークン(モデルは最大262144まで対応) |
| API |
OpenAI互換 http://127.0.0.1:8080/v1
|
| クライアント |
openai Pythonパッケージ(ms-vlmeval の OpenAIWrapper 相当) |
OpenAI API方式を採用した理由
ms-vlmeval 0.0.19 は transformers 5.5.0 との間にインポートエラーが存在する
(AutoModelForVision2Seq が削除または名称変更されたため)。
transformers をダウングレードする代わりに、llama-server の OpenAI互換エンドポイント経由でモデルを提供し、
openai Pythonパッケージで呼び出す方式を採用した。実質的には ms-vlmeval の OpenAIWrapper と同等。
機能テスト結果
| # |
テスト内容 |
プロンプト |
応答 |
合否 |
| 1 |
基本的な算術 |
What is 2 + 2? Answer briefly. |
4 |
✓ |
| 2 |
指示への従い方 |
List the planets of the solar system in order from the Sun. One per line. |
Mercury / Venus / Earth / Mars / Jupiter / Saturn / Uranus / Neptune |
✓ |
| 3 |
日本語対応 |
日本の首都はどこですか? |
日本の首都は**東京**です。 |
✓ |
パフォーマンス(リクエストごと)
| リクエスト |
プロンプトトークン数 |
プロンプト評価時間 |
出力トークン数 |
トークン生成速度 |
合計時間 |
| テスト1 |
26 |
336 ms(77 tok/s) |
37 |
10.84 tok/s |
3.7 s |
| テスト2 |
32 |
326 ms(98 tok/s) |
151 |
10.62 tok/s |
14.5 s |
| テスト3 |
21 |
323 ms(65 tok/s) |
108 |
10.65 tok/s |
10.5 s |
平均生成速度:約10.7 トークン/秒
備考
- プロンプト評価(プリフィル)は全層GPUオフロードにより65〜98 tok/s と高速。
- 生成(デコード)の約10.7 tok/s は、48 GB GPU 1枚での31B Q4_K_Mモデルとして標準的な速度。
- モデルが持つ最大262Kのコンテキストウィンドウは今回未使用(8192に制限)。
--ctx-size を増やすとVRAM消費量が増加する。
- 画像入力(ビジョン機能)は後日テスト済み(下記参照)。
ビジョン機能テスト結果
mmproj-F32.gguf(2.2 GB)を ~/gemma4/ に追加し、--mmproj オプション付きで llama-server を再起動して実施。
テスト画像と結果
| # |
画像ファイル |
プロンプト |
結果 |
備考 |
| 1 |
shapes.png |
この画像に見える図形を列挙し、それぞれの色を答えよ |
赤い長方形・青い円・緑の三角形を正確に識別 |
✓ |
| 2 |
text_ocr.png |
画像内のテキストをすべて読め |
全テキストを正確に読み取り(「Gemma 431B」の空白のみ微差) |
✓ |
| 3 |
bar_chart.png |
棒グラフのデータと最大値の月を答えよ |
1〜6月の全値(Jan:80〜Jun:130)を読み取り、4月(150)を最大と正答 |
✓ |
| 4 |
gradient.png |
画像の色とパターンを説明せよ |
4隅の色、対角グラデーション、中央の混色、テキストを正確に記述 |
✓ |
ビジョンテストのパフォーマンス
| 画像 |
プロンプトトークン |
生成トークン |
合計時間 |
| shapes.png |
— |
319 |
33.7 s |
| text_ocr.png |
— |
228 |
24.7 s |
| bar_chart.png |
308 |
668 |
68.9 s |
| gradient.png |
282 |
868 |
89.0 s |
重要な知見:Thinking トークン
Gemma 4 はビジョンタスクでも回答前に内部「思考」トークン(約1800〜2700文字)を生成する。
max_tokens=512 では思考トークンで予算を使い果たし、回答が空になる現象が確認された。
画像クエリには max_tokens を 1024〜2048 以上に設定すること。
llama-server 起動コマンド(ビジョン対応版)
HSA_OVERRIDE_GFX_VERSION=11.5.1 \
~/llama.cpp/build/bin/llama-server \
--model ~/gemma4/gemma-4-31B-it-Q4_K_M.gguf \
--mmproj ~/gemma4/mmproj-F32.gguf \
--gpu-layers 999 \
--ctx-size 8192 \
--host 127.0.0.1 \
--port 8080
今後の課題
- transformers の互換性を修正(
pip install "transformers<5")することで、
ms-vlmeval のベンチマークデータセット(MMBench、MME、SEEDBench 等)を利用可能にする。
- 長コンテキストベンチマーク向けに
--ctx-size(例:32768)を拡大する。