この記事はLLM・LLM活用 Advent Calendar 2025の16日目の記事です。
環境
はじめに
RTX4090では乗らないようなLLMモデルを動かしたかったので、先日Minisforum MS-S1 MAXを購入した。メモリ爆上がり前のギリギリで購入できてよかった。
kyuz0氏が作成してくれたDockerfileを使ってllama.cpp用イメージをビルド、運用している。
モデルはQwenのQwen3-235B-A22B-Instruct-2507をUD-Q3_K_XL量子化モデルで使用している。 実用的な速度(15t/s)で生成されるので悪くない。
しかし生成が速いに越したことはない。色々考えた結果、 Dockerがボトルネックになって遅くなってしまっているんじゃないか と考えた。
コンテナで仮想化しているんだから必ずボトルネックは存在する。構築しやすいしメンテナンス性も高いのでDockerを使用していたが、 ホスト側にllama.cppをインストールして実行すれば最速になるんじゃないかと企てた。
同様のことを考えている方もいらっしゃった。
EVO-X2 (Ubuntu) で amd-strix-halo-toolboxes を使って高速推論
実際にベンチマーク取ってみたのが本記事の話。
ホスト環境構築
Linuxカーネル
まずはLinuxカーネル。Dockerfile
を見てみると最新のカーネルを使用するためにfedoraを使っているらしい。
生まれてこの方Ubuntuしか使ったことがないのでUbuntuで 面倒な 自前ビルドせずに最新をインストールする。
標準カーネル(generic)ではなくoem版は、特定のハードウェアに最適化された特別なカーネルパッケージである。
sudo apt install linux-oem-24.04d
再起動すると6.17になっている。
❯ uname -r 6.17.0-1008-oem
余談だがMinisforum MS-S1 MAXでは10G NICを2つ積んでいるがデフォルトのカーネルではドライバーが対応していなくて使えてなかった。 oem最新版だと認識するようになった。
AMDVLKのインストール
GPUドライバー。amdvlk自体は開発終了して非推奨になっているので注意(私の環境だとrocmより安定しているので使用している)
wget https://github.com/GPUOpen-Drivers/AMDVLK/releases/download/v-2025.Q2.1/amdvlk_2025.Q2.1_amd64.deb sudo apt install amdvlk_2025.Q2.1_amd64.deb
インストール後は再起動すること
依存パッケージのインストール
パッケージは、Dockerfileに書かれていたインストールパッケージをGeminiにapt向けに変換させたのが主である。
sudo apt-get install \ build-essential cmake ninja-build ccache \ clang lld mold libclang-dev libclang-rt-dev libomp-dev \ libcurl4-openssl-dev \ libvulkan-dev vulkan-tools mesa-vulkan-drivers \ radeontop glslc glslang-tools
llama.cppのビルド
ビルドオプションやコマンドはDockerfileを参考にしている。
export CC=clang export CXX=clang++ export LDFLAGS="-fuse-ld=mold" git clone --recursive https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -S . -B build -G Ninja \ -DGGML_VULKAN=ON \ -DCMAKE_BUILD_TYPE=Release \ -DGGML_RPC=ON \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLLAMA_BUILD_TESTS=OFF \ -DLLAMA_BUILD_EXAMPLES=ON \ -DLLAMA_BUILD_SERVER=ON cmake --build build --config Release sudo cmake --install build --config Release
確認
❯ llama-cli --version ggml_vulkan: Found 1 Vulkan devices: ggml_vulkan: 0 = AMD Radeon 8060S (AMD open-source driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 64 | shared memory: 32768 | int dot: 0 | matrix cores: KHR_coopmat version: 7508 (6ce863c80) built with Clang 18.1.3 for Linux x86_64
最初、デバイスがないと言われてしまったが、
❯ llama-cli --version ggml_vulkan: No devices found. version: 7508 (6ce863c80) built with Clang 18.1.3 for Linux x86_64
グループの追加が足りてなかった。
sudo usermod -aG video,render $USER
ログアウトして再ログインして llama-cli --version したら解決。
いざベンチマーク
ベンチマークのコマンドは以下
❯ /usr/bin/llama-bench \ -m ~/.cache/llama.cpp/unsloth_Qwen3-235B-A22B-Instruct-2507-GGUF_UD-Q3_K_XL_Qwen3-235B-A22B-Instruct-2507-UD-Q3_K_XL-00001-of-00003.gguf \ -p 2048 \ -n 128 \ --repetitions 2 \ --flash-attn 1 -ngl 99 --threads 16 --cache-type-k q8_0 --cache-type-v q8_0 --batch-size 2048 --ubatch-size 1024
Docker版
| model | size | params | backend | ngl | n_ubatch | type_k | type_v | fa | mmap | test | t/s |
|---|---|---|---|---|---|---|---|---|---|---|---|
| qwen3moe 235B.A22B Q3_K - Medium | 96.99 GiB | 235.09 B | Vulkan | 99 | 1024 | q8_0 | q8_0 | 1 | 0 | pp2048 | 137.79 ± 0.11 |
| qwen3moe 235B.A22B Q3_K - Medium | 96.99 GiB | 235.09 B | Vulkan | 99 | 1024 | q8_0 | q8_0 | 1 | 0 | tg128 | 17.65 ± 0.00 |
非Docker版
| model | size | params | backend | ngl | n_ubatch | type_k | type_v | fa | test | t/s |
|---|---|---|---|---|---|---|---|---|---|---|
| qwen3moe 235B.A22B Q3_K - Medium | 96.99 GiB | 235.09 B | Vulkan | 99 | 1024 | q8_0 | q8_0 | 1 | pp2048 | 136.08 ± 0.52 |
| qwen3moe 235B.A22B Q3_K - Medium | 96.99 GiB | 235.09 B | Vulkan | 99 | 1024 | q8_0 | q8_0 | 1 | tg128 | 17.71 ± 0.01 |
別に速くなってなくて草
まとめ
これからもDockerよろしくな!!!!!