Featured image of post MINISFORUM HX370(Radeon 890M)でllama.cppをVulkanで動かす

MINISFORUM HX370(Radeon 890M)でllama.cppをVulkanで動かす

環境

  • マシン: MINISFORUM HX370
  • CPU: AMD Ryzen AI 9 HX 370
  • GPU: AMD Radeon 890M(RDNA 3.5 / gfx1150)
  • RAM: 64GB(UMA構成、GPUとメモリ共有)
  • OS: CachyOS Linux

GPUアーキテクチャの確認

HX370の890MはRDNA 3.5(gfx1150)です。まず実機で確認します。

rocminfo | grep -E "Name|gfx"

出力例:

Name:                    AMD Radeon 890M Graphics
Name:                    gfx1150

注意: HX370の890MはRDNA 3(gfx1103)ではなく**RDNA 3.5(gfx1150)**です。 ROCmビルド時に gfx1103 を指定すると正しく動作しないため、必ず実機で確認してください。

依存パッケージのインストール

sudo pacman -S vulkan-headers vulkan-icd-loader shaderc cmake git

llama.cppのビルド(Vulkanバックエンド)

なぜROCmではなくVulkanか

AMD iGPUはROCmよりVulkanの方が相性が良く、実測で大幅に高速になります。 HX370でのROCm vs Vulkanの比較(Qwen3.5-35B-A3B Q4_K_XL):

バックエンド Generation
ROCm 動作するが非常に低速
Vulkan 18 t/s
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

cmake -B build-vulkan \
  -DGGML_VULKAN=ON \
  -DCMAKE_BUILD_TYPE=Release

cmake --build build-vulkan --config Release -j$(nproc)

環境変数の設定

# ~/.bashrc に追記
export GGML_VK_DEVICE=0

GGML_VK_DEVICE=0 はVulkan使用時にデバイス番号を明示指定します。iGPUのみの構成では 0 で問題ありません。

モデルのダウンロード

pip install huggingface_hub --break-system-packages

動作確認用(小さいモデル)

python -c "
from huggingface_hub import hf_hub_download
hf_hub_download(
    repo_id='Qwen/Qwen3-0.6B-GGUF',
    filename='Qwen3-0.6B-Q8_0.gguf',
    local_dir='./models'
)
"

実用モデル(推奨)

Qwen3.5-35B-A3B(MoEモデル)がHX370に最も適しています。

このモデルはMoE(Mixture of Experts)アーキテクチャを採用しており、総パラメータ数は35Bながら推論時のアクティブパラメータは約3Bです。64GB UMAのHX370では全レイヤーをGPUに展開でき、密モデルの27Bより大幅に高速です。

python -c "
from huggingface_hub import hf_hub_download
hf_hub_download(
    repo_id='unsloth/Qwen3.5-35B-A3B-GGUF',
    filename='Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf',
    local_dir='./models'
)
"

注意: UnslothはQwen3.5-35B-A3BのGGUFを2026年2月27日に更新し、ツール呼び出しのチャットテンプレートバグを修正しています。それ以前にダウンロードした場合は再ダウンロードを推奨します。

動作確認

./build-vulkan/bin/llama-cli \
  -m ./models/Qwen3-0.6B-Q8_0.gguf \
  -ngl 99 \
  -n 256 \
  -p "Hello, who are you?"

GPU認識の確認:

ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon 890M Graphics (RADV STRIX1) (radv) | uma: 1 | fp16: 1

主要パラメータの解説

モデル・GPU関連

パラメータ 設定値 デフォルト 意味・変更理由
-ngl 99 99 0(CPU) GPUオフロードするレイヤー数。99で全レイヤーをGPUに展開。デフォルトはCPU推論のため必須
-n -1 -1 -1 最大生成トークン数。-1で無制限
-c 65536 65536 4096 コンテキストウィンドウサイズ。デフォルト4096では会話履歴がすぐ溢れるため拡大。64GB UMAなら65536でも余裕あり

Flash Attention・KVキャッシュ

パラメータ 設定値 デフォルト 意味・変更理由
--flash-attn on on off Flash Attentionを有効化。長コンテキストでのメモリ効率と速度が向上
--cache-type-k q8_0 q8_0 f16 KVキャッシュのKey部分を8bit量子化。デフォルトf16(16bit)から圧縮しVRAM使用量を削減しつつ品質を維持
--cache-type-v q8_0 q8_0 f16 KVキャッシュのValue部分を同様に8bit量子化

サンプリングパラメータ(Qwen3.5公式推奨値)

パラメータ 設定値 デフォルト 意味・変更理由
--temp 1.0 1.0 0.8 温度。高いほど多様な出力、低いほど決定的。Qwen3.5の思考モード有効時は1.0推奨
--top-k 20 20 40 確率上位Kトークンから選択。デフォルト40より絞ることで出力を安定化
--top-p 0.95 0.95 0.95 累積確率P以内のトークンから選択。デフォルトのまま
--min-p 0.0 0.0 0.05 最低確率フィルター。Qwen3.5では0.0(無効)が推奨
--presence-penalty 1.5 1.5 0.0 出現済みトークンへのペナルティ。1.5に設定することで繰り返し出力を抑制
--repeat-penalty 1.0 1.0 1.0 直近トークンの繰り返しペナルティ。Qwen3.5はpresence-penaltyで制御するためデフォルトのまま

チャットテンプレート・推論制御

パラメータ 設定値 デフォルト 意味・変更理由
--jinja - off GGUFに埋め込まれたJinjaチャットテンプレートを使用。ツール呼び出しの精度向上に必須
--reasoning-format deepseek deepseek なし 思考トークン(<think>...</think>)を正しくパースする形式を指定
--no-context-shift - off コンテキスト満杯時の古いトークン削除を無効化。長い会話で文脈が壊れるのを防ぐ
--reasoning-budget 0 0 -1(無制限) 思考モードをOFF。llama-cli・llama-server両方で有効。0で思考トークンを生成しない。サーバー起動時に指定すると全リクエストで思考OFF固定になる

サーバー関連

パラメータ 設定値 デフォルト 意味・変更理由
--host 0.0.0.0 0.0.0.0 127.0.0.1 全インターフェースでリッスン。TailscaleやLAN経由アクセスのために変更
--port 11434 11434 8080 Ollamaと同じポートを使用することでOllama互換ツールをそのまま流用可能

llama-cliの実用コマンド

推論なし・instruct用(高速)

./build-vulkan/bin/llama-cli \
  -m ./models/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \
  --conversation \
  -ngl 99 \
  -n -1 \
  -c 32768 \
  --flash-attn on \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --temp 0.7 --top-k 20 --top-p 0.8 \
  --min-p 0.0 --presence-penalty 1.5 --repeat-penalty 1.0 \
  --reasoning-budget 0

推論あり・一般タスク

./build-vulkan/bin/llama-cli \
  -m ./models/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \
  --conversation \
  -ngl 99 \
  -n -1 \
  -c 32768 \
  --flash-attn on \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --temp 1.0 --top-k 20 --top-p 0.95 \
  --min-p 0.0 --presence-penalty 1.5 --repeat-penalty 1.0

推論あり・コーディング

./build-vulkan/bin/llama-cli \
  -m ./models/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \
  --conversation \
  -ngl 99 \
  -n -1 \
  -c 32768 \
  --flash-attn on \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --temp 0.6 --top-k 20 --top-p 0.95 \
  --min-p 0.0 --presence-penalty 0.0 --repeat-penalty 1.0

OpenAI互換サーバーとして起動

OpenClawやOpen WebUI、Claude Codeなどのバックエンドとして使えます。

./build-vulkan/bin/llama-server \
  -m ./models/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \
  -ngl 99 \
  -n -1 -c 65536 \
  --flash-attn on \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --temp 1.0 --top-k 20 --top-p 0.95 \
  --min-p 0.0 --presence-penalty 1.5 --repeat-penalty 1.0 \
  --jinja \
  --reasoning-format deepseek \
  --no-context-shift \
  --host 0.0.0.0 --port 11434

アクセス先:

  • WebUI: http://your-host:11434
  • OpenAI互換API: http://your-host:11434/v1/chat/completions
  • Tailscale経由: http://your-tailscale-ip:11434/v1/chat/completions

systemdによる自動起動

sudo nano /etc/systemd/system/llama-server.service
[Unit]
Description=llama.cpp server
After=network.target

[Service]
Type=simple
User=your-username
WorkingDirectory=/home/your-username/llama.cpp
ExecStart=/home/your-username/llama.cpp/build-vulkan/bin/llama-server \
  -m /home/your-username/llama.cpp/models/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \
  -ngl 99 \
  -n -1 -c 65536 \
  --flash-attn on \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --temp 1.0 --top-k 20 --top-p 0.95 \
  --min-p 0.0 --presence-penalty 1.5 --repeat-penalty 1.0 \
  --jinja \
  --reasoning-format deepseek \
  --no-context-shift \
  --host 0.0.0.0 --port 11434
Environment=GGML_VK_DEVICE=0
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable llama-server
sudo systemctl start llama-server

# 確認
sudo systemctl status llama-server
journalctl -u llama-server -f

速度実績

モデル Prompt Generation
Qwen3-0.6B Q8_0 427.8 t/s 95.0 t/s
Qwen3.5-35B-A3B Q4_K_XL 52.6 t/s 18.3 t/s
Qwen3.5-27B Q5_K_M 17.8 t/s 3.8 t/s

Qwen3.5-35B-A3BはMoE構造のため、27Bの密モデルより大幅に高速です。HX370での実用モデルとして最もバランスが良い。

systemdに登録しておけば再起動後も自動で立ち上がるので、Tailscale経由でどこからでもアクセスできる環境が手に入る。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。