Open5

EVO-X2 (Ubuntu) で amd-strix-halo-toolboxes を使って高速推論

LibratechLibratech

AMD Strix Halo Llama.cpp Toolboxes は、EVO-X2 などの AMD Ryzen AI Max “Strix Halo” アーキテクチャのPC向けに、最新のバックエンドとビルド済み Llama.cppセットでコンテナにしたツールキット。

https://github.com/kyuz0/amd-strix-halo-toolboxes

ベンチマークを見ると、かなりのスピードで推論できることがわかる。

https://kyuz0.github.io/amd-strix-halo-toolboxes/

【以下抜粋】

Prompt Processing (pp512) — tokens/second

Model rocm6_4_3-rocwmma vulkan_amdvlk vulkan_radv
gpt-oss-120b 732.72 540.81 255.50
gpt-oss-20b 1480.28 1467.61 732.35

Text Generation (tg128) — tokens/second

Model rocm6_4_3-rocwmma vulkan_amdvlk vulkan_radv
gpt-oss-120b 45.14 48.25 50.41
gpt-oss-20b 64.45 69.47 72.05

LM Studio のデフォルトが Vulkan llama.cpp なので、Text Generation の値はほぼ同じだと思われる(実際、大差ない)のだが、Prompt Processing の速度の差が大きい。
コーディングエージェントなどで使う場合はこの差は大きいはず。

LibratechLibratech

前提

使い方

# 依存をインストール
sudo apt update
sudo apt install podman podman-toolbox
# amdvlk(おすすめ)の toolbox を作成
toolbox create llama-vulkan-amdvlk \
  --image docker.io/kyuz0/amd-strix-halo-toolboxes:vulkan-amdvlk \
  -- --device /dev/dri --group-add video --security-opt seccomp=unconfined
# コンテナに入る
toolbox enter llama-vulkan-amdvlk

# llama-server を起動
llama-server \
  -hf ggml-org/gpt-oss-120b-GGUF \
  --alias gpt-oss-120b \
  --n-gpu-layers 999 \
  --flash-attn on \
  --ctx-size 0 \
  --threads -1 \
  --jinja \
  --no-mmap \
  --temp 1.0 \
  --min-p 0.0 \
  --top-p 1.0 \
  --top-k 0.0 \
  --host 0.0.0.0 --port 8080

注意

LibratechLibratech

ROCm系はさらに工夫がいる。

# ROCm 6.4.3 の toolbox を作成
toolbox create llama-rocm-6.4.3-rocwmma \
  --image docker.io/kyuz0/amd-strix-halo-toolboxes:rocm-6.4.3-rocwmma \
  -- --device /dev/dri --device /dev/kfd \
  --group-add video --group-add render --group-add sudo --security-opt seccomp=unconfined

Ubuntu だと、これだけではGPUを掴めない。

toolbox enter llama-rocm-6.4.3-rocwmma
llama-server <options>
# ...
# ==> warning: no usable GPU found, --gpu-layers option will be ignored
# ... ^C
id
# uid=1000(me) gid=1000(me) groups=1000(me),10(wheel)
ls -l /dev/dri/renderD*
# crw-rw----+ 1 nobody nobody 226, 128 Sep 2 01:19 /dev/dri/renderD128
ls -l /dev/kfd
# crw-rw---- 1 nobody nobody 236, 0 Sep 2 01:19 /dev/kfd

どうやらFedora向けのツールなのでuser idが噛み合わず、下記のような状態になっている。

  • 自分が render video グループに入っていない
  • /dev/dri /dev/kfd 自体は見えているが、所有者が nobody になっているのでアクセスできない(render, video グループに自分を追加しても効果がない)

これを修正する。

LibratechLibratech
# 一度コンテナを出る
exit

下記のページに、「システム上のすべてのユーザーにGPUのアクセス権を付与する」設定があるので、これを適用する。

https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/prerequisites.html#grant-gpu-access-to-all-users-on-the-system

/etc/udev/rules.d/70-amdgpu.rule を作成して以下を保存。

/etc/udev/rules.d/70-amdgpu.rule
KERNEL=="kfd", MODE="0666"
SUBSYSTEM=="drm", KERNEL=="renderD*", MODE="0666"

ルールをリロード(再起動もいるかも)

sudo udevadm control --reload-rules && sudo udevadm trigger

これでtoolboxコンテナ内のユーザーからもGPUが見えるようになる。

# もう一度コンテナに入る
toolbox enter llama-rocm-6.4.3-rocwmma
ls -l /dev/kfd
# crw-rw-rw-+ 1 nobody nobody 236, 0 Sep  7 20:37 /dev/kfd
ls -l /dev/dri/renderD128
# crw-rw-rw-+ 1 nobody nobody 236, 0 Sep  7 20:37 /dev/kfd
/opt/rocm/bin/rocminfo
# ==>GPU情報が表示されるはず
llama-server  # オプションは先ほどと同じでOK

これでいけるはず。

LibratechLibratech

参考ベンチマーク gpt-oss-120b llama-bench (token/second)

backend => rocm6_4_3-rocwmma rocm-7rc-rocwmma vulkan-amdvlk vulkan-radv
pp512 772.60 ± 4.71 767.49 ± 4.75 756.31 ± 5.30 418.15 ± 3.50
tg128 45.72 ± 0.12 45.56 ± 0.69 48.34 ± 0.04 50.58 ± 0.07

vulkan-amdvlk が総合的に優秀なので私はこれを使っています。
なぜか私の環境では kyuz0 氏の環境よりPPが大幅に速いです。