Ternary Bonsai 8B セットアップメモ (NucBox EVO X2 / ROCm)
Prism ML の 1.58-bit 三値量子化モデル Ternary-Bonsai-8B を、Ryzen AI MAX+ 395 (gfx1151) 環境の NucBox EVO X2 で動かしたときの作業記録。
環境
| 項目 | 内容 |
|---|---|
| マシン | GMKtec NucBox EVO X2 |
| CPU/iGPU | AMD Ryzen AI MAX+ 395 (gfx1151) |
| VRAM | 49,152 MiB |
| OS | Ubuntu 24.04 |
| ROCm | 7.2.1 (--no-dkms + OEM kernel) |
1. モデルのダウンロード
Hugging Face リポジトリ: https://huggingface.co/prism-ml/Ternary-Bonsai-8B-gguf
huggingface-cli で取得 (推奨は Q2_0 版、約 2 GiB):
pip install huggingface_hub
huggingface-cli download prism-ml/Ternary-Bonsai-8B-gguf \
Ternary-Bonsai-8B-Q2_0.gguf \
--local-dir ~/ternary-bonsai
wget でも可:
wget https://huggingface.co/prism-ml/Ternary-Bonsai-8B-gguf/resolve/main/Ternary-Bonsai-8B-Q2_0.gguf
| ファイル | フォーマット | サイズ | 用途 |
|---|---|---|---|
Ternary-Bonsai-8B-Q2_0.gguf |
Q2_0 (g128) | 2.03 GiB | 推奨 (三値ロスレス) |
Ternary-Bonsai-8B-F16.gguf |
FP16 | 16.38 GB | ベースライン / 再量子化用 |
2. llama.cpp (Prism フォーク) のビルド
注意: mainline の llama.cpp は Q2_0 (
ggml type 42) を未サポート。必ず Prism フォークを使うこと。
旧 Bonsai 用のビルドを流用するとinvalid ggml type 42でロード失敗する。
# 旧ビルドが残っている場合は退避
mv ~/llama.cpp ~/llama.cpp-old-bonsai
# 最新の Prism フォークを取得
cd ~
git clone https://github.com/PrismML-Eng/llama.cpp
cd llama.cpp
# ROCm/HIP でビルド (gfx1151 を明示)
cmake -S . -B build \
-DGGML_HIP=ON \
-DAMDGPU_TARGETS=gfx1151 \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j
3. 実行 (CLI)
export HSA_OVERRIDE_GFX_VERSION=11.5.1
~/llama.cpp/build/bin/llama-cli \
-m ~/ternary-bonsai/Ternary-Bonsai-8B-Q2_0.gguf \
-p "Hello" \
-n 100 \
-ngl 99 \
-fa 1
| フラグ | 意味 |
|---|---|
-ngl 99 |
全レイヤーを GPU にオフロード |
-fa 1 |
Flash Attention 有効化 |
HSA_OVERRIDE_GFX_VERSION=11.5.1 |
gfx1151 を ROCm に認識させるための保険 |
4. 動作確認結果
Device 0: AMD Radeon Graphics, gfx1151 (0x1151), VRAM: 49152 MiB
[ Prompt: 299.1 t/s | Generation: 82.2 t/s ]
| 項目 | 値 |
|---|---|
| プロンプト処理 | 299.1 tok/s |
| 生成スループット | 82.2 tok/s |
| モデル VRAM 使用量 | 1,918 MiB |
| コンテキスト | 9,216 MiB |
| 全体 VRAM 使用量 | 約 5.6 GB / 49 GB |
参考: モデルカードの Apple M4 Pro (Metal) は 76 tok/s。NucBox の iGPU が上回るスコア。
5. サーバーモード (VOICEVOX / WhisperX 連携用)
OpenAI 互換 API として起動:
export HSA_OVERRIDE_GFX_VERSION=11.5.1
~/llama.cpp/build/bin/llama-server \
-m ~/ternary-bonsai/Ternary-Bonsai-8B-Q2_0.gguf \
-ngl 99 \
-fa 1 \
-c 8192 \
--host 0.0.0.0 \
--port 8080
エンドポイント: http://localhost:8080/v1/chat/completions
ずんだもんデモパイプラインの llama.cpp (HSA_OVERRIDE_GFX_VERSION=11.5.1 + Qwen3.6) と差し替え可能。
6. トラブルシューティング
invalid ggml type 42 エラー
gguf_init_from_file_ptr: tensor 'output.weight' has invalid ggml type 42. should be in [0, 41)
→ 旧 llama.cpp で実行している。Prism フォークの最新版 (prism ブランチ) で再ビルドする。
Q2_0 サポート確認
grep -r "GGML_TYPE_Q2_0\|Q2_0" ~/llama.cpp/ggml/src/ | head
ヒットがあれば対応済み。
参考リンク
- モデル: https://huggingface.co/prism-ml/Ternary-Bonsai-8B-gguf
- llama.cpp フォーク: https://github.com/PrismML-Eng/llama.cpp
- デモリポジトリ: https://github.com/PrismML-Eng/Bonsai-demo
- ホワイトペーパー: https://github.com/PrismML-Eng/Bonsai-demo/blob/main/ternary-bonsai-8b-whitepaper.pdf
メモ
- Bonsai は自己紹介で「1-bit AI assistant」と答えるが、実体は 1.58-bit (三値 {-1, 0, +1})
- ベース: Qwen3-8B (32 query / 8 KV heads, 36 層, ctx 65,536)
- ベンチ平均 75.5 で Qwen3-8B (79.3) に肉薄しつつサイズは 1/8
- VRAM に余裕があるので
-c 32768程度までコンテキスト拡張可能