動かざることバグの如し

近づきたいよ 君の理想に

llama.cppはDocker使わない方が高速という都市伝説

この記事はLLM・LLM活用 Advent Calendar 2025の16日目の記事です。

qiita.com

環境

はじめに

RTX4090では乗らないようなLLMモデルを動かしたかったので、先日Minisforum MS-S1 MAXを購入した。メモリ爆上がり前のギリギリで購入できてよかった。

blog.turai.work

kyuz0氏が作成してくれたDockerfileを使ってllama.cpp用イメージをビルド、運用している。

github.com

モデルは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よろしくな!!!!!