どんな人向けの記事?
- 生成 AI に興味のある方
- AMD Ryzen AI Max+ 395でStable Diffusionを動かしたい方
- EVO-X2の所感を知りたい方
環境
Ubuntu 24.04.2 LTS@EVO-X2(AMD Ryzen AI Max+ 395、128GB)# ★新調★
EVO-X2を購入!
先日、GMKTecのEVO-X2を購入した。
目的と選定理由は下記の通り。
- 目的
- 8年近く使っていたメインマシンの移行
- 選定理由
- OSとしてUbuntuを選択できる
- Ubuntuが好きな私にとっては最重要項目
- コスパが良い
- 約27万円で128GBユニファイドメモリ搭載(Macだと50万円以上)
- 小型・省電力
- ゆくゆくは高性能自宅サーバとして運用できる
- OSとしてUbuntuを選択できる
スペック
公式HPを一部抜粋し、私の選択したオプションのみ記載
パラメータ | 詳細 |
---|---|
CPU | AMD Ryzen™ AI Max+ 395 • 16 コア / 32 スレッド • TSMC 4nm FinFET プロセス • 最大 5.1 GHz (最大) • 16 MB L2 キャッシュ / 64 MB L3 キャッシュ • TDP: 120W で安定動作 (ピーク時最大 140W) |
グラフィック | Radeon 8060Sグラフィックス • 40コアRDNA 3.5アーキテクチャ |
メモリ(RAM) | オンボード LPDDR5X (アップグレード不可) • 128GB • 速度: 8000MHz |
ストレージ | PCIe 4.0 M.2 2280 SSD • 容量: 2TB |
ビデオ出力 | HDMI、DisplayPort、USB4経由で利用可能 • 最大サポート解像度: 7680×4320 @ 60Hz |
ネットワーク | WiFi: • Wi-Fi7: RZ717(MT7925) イーサネット: • 1 × RJ45 ギガビット LAN (2.5G, 8125BG) |
Bluetooth | Bluetooth 5.4 |
電源 | DC 19.5V、11.8A(約230.1W) • AC入力:100~240V、50/60Hz、4.0A |
フロントパネルI/O | • 2 × USB-A 3.2 Gen2 • 1 × オーディオコンボ(3.5mmジャック) • 1 × USB Type-C(USB4.0) • 1 × SDカードリーダー(SD4.0、SDXCをサポート) • ボタン:電源、システムファン照明コントロール、パフォーマンスモードスイッチ |
リアパネルI/O | • 1 × DisplayPort 1.4 HBR3 (8.1 Gbps) • 1 × HDMI 2.1 (FRL at 8 Gbps) • 1 × USB-A 3.2 Gen2 • 2 × USB-A 2.0 • 1 × USB Type-C (USB4.0) • 1 × オーディオ (3.5mm CTIA) • 1 × DC IN (5525 インターフェース) • 1 × RJ45 ギガビット LAN (2.5G、8125BG) |
OS | Windows 11 Pro → ストレージごとUbuntuに換装済 |
サイズ | • 寸法: 193 mm x 185.8 mm x 77 mm |
Stable Diffusionを動かしたい on Ubuntu
今回の記事ではEVO-X2でStable Diffusionを動かす方法について備忘録的にまとめる。
ただし、Ubuntu上で動かしているのでWindowsユーザーの参考にはならないかもしれない。
また、今回環境構築の過程でかなり試行錯誤をしたので、この記事で示した内容に過不足があるかもしれないことは留意いただきたい。
それでは、環境構築に必要と思われる手順を以下に示す。
ROCmとAMDGPU driverのインストール
ROCm installation for Linuxの手順に従う。
wget https://repo.radeon.com/amdgpu-install/6.4.1/ubuntu/noble/amdgpu-install_6.4.60401-1_all.deb
sudo apt install ./amdgpu-install_6.4.60401-1_all.deb
sudo apt update
sudo apt install python3-setuptools python3-wheel
sudo usermod -a -G render,video $LOGNAME
sudo apt install rocm
- AMDGPU driver installation
wget https://repo.radeon.com/amdgpu-install/6.4.1/ubuntu/noble/amdgpu-install_6.4.60401-1_all.deb
sudo apt install ./amdgpu-install_6.4.60401-1_all.deb
sudo apt update
sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
sudo apt install amdgpu-dkms
インストールが完了したら、amd-smi
やrocminfo
といったコマンドが使えるようになっているはず。
Stable Diffusionの導入
一度目の挑戦(敗北)
まずこちらの記事に従って環境構築をしたのだが、なんとか動くようになったもののめちゃくちゃ生成速度が遅い、という悲しい結果になってしまった。
そのままでは動かなくて、ROCm 6.4.0に変更したり色々修正する必要があったが、前述したようにうまくいかなかったのでここでは割愛する。
勝利
ただ、上記の記事からAMDのGPUでも画像生成のポテンシャルはあるという知見が得られた。
つまり、環境構築を適切にできればもっと早く動く、より具体的にはRTX 3060と同等かそれ以上の速度で画像生成できるはずだという信念のもとで調査を続けることにした。
その結果、redditの2ヶ月以上も前のスレッドにたどり着いた。
このスレッドは全然伸びていないが、タイトルがWorking Stable Diffusion WebUI for Strix Halo (gfx1151) on Linuxとなっており、ドンピシャな内容である。
早速、記載の通り環境構築をしてみる。
手順は非常にシンプルで、任意のディレクトリに下記のファイルをコピーして実行するだけ。
$ wget https://raw.githubusercontent.com/scottt/rocm-TheRock/dc0b3a9963c0b4e064e503b1e9ffe6f70575c026/dockerfiles/apps/stable-diffusion-webui/run-stable-diffusion-webui
$ chmod a+x run-stable-diffusion-webui
$ ./run-stable-diffusion-webui
しかし、おそらく実行時に下記のエラーが出る。
$ ./run-stable-diffusion-webui
Error: short-name "stable-diffusion-webui:latest" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
gemini-2.5-proに相談し、run-stable-diffusion-webui
を下記のように修正することで解決した。
run-stable-diffusion-webui
#!/bin/bash
mkdir -p $HOME/.cache/stable-diffusion-webui/{repositories,models,cache,miopen}
# MIOpen usually uses $HOME/.config/miopen
mkdir -p $HOME/Pictures
BIND_MOUNT_FLAG=
if getenforce 2>/dev/null | grep Enforcing > /dev/null; then
if getsebool container_use_devices | grep ' off$' > /dev/null ; then
printf 'Grant container GPU access with:\n\tsudo setsebool container_use_devices 1\n'>&2
exit 1
fi
# SELinux is in enforcing mode, see https://discussion.fedoraproject.org/t/how-do-i-give-rootless-podman-permissions-to-a-directory/22066/5
BIND_MOUNT_FLAG=:z
fi
podman run \
--name stable-diffusion-webui \
--replace \
-v $HOME/.cache/stable-diffusion-webui/repositories:/opt/stable-diffusion-webui/repositories$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/models:/opt/stable-diffusion-webui/models$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/cache:/opt/stable-diffusion-webui/cache$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/miopen:/root/.config/miopen$BIND_MOUNT_FLAG \
-v $HOME/Pictures:/opt/stable-diffusion-webui/log/images$BIND_MOUNT_FLAG \
--device /dev/kfd --device /dev/dri --net=host --security-opt=no-new-privileges \
docker.io/scottt/stable-diffusion-webui:gfx1151
また、redditのスレッドにも記載されているが、/dev/kfd
と/dev/dri
のpermissionを変更する必要がある。そこで下記のようなシェルスクリプトを作成する。
server.sh
sudo chmod 777 /dev/kfd /dev/dri
./run-stable-diffusion-webui
その後、bashでsh server.sh
を実行すれば問題なくstable diffusionを実行できるはず。
エラーが出なければ、モデル等がダウンロードされるため、しばらく待つ。
最終的にRunning on local URL: http://127.0.0.1:7860
というメッセージが出力されたら、ここにアクセスすることでStable DiffusionのWebUIが使えるはず。
ちなみにモデルは$HOME/.cache/stable-diffusion-webui/models
に配置され、永続化されている。
RTX 3060との比較
RTX 3060との比較についてはこちらのポストに記載の通り、同じパラメータ条件ならRTX 3060の方がRadeon 8060Sの方が生成速度が速いことがわかった。
ただし、RTX 3060のforgeと比べると同程度のスピードになる。
課題
一応これで画像生成ができるようになっているはずだが、使っているうちにいくつかの課題が表面化した。
以下にそれらの課題についてまとめる。ここで、解決済のものにはチェックをつけている。
いくつかの課題はすでに解決済であり、その方法は以下に示す。
永続化(解決済)
上述したように、せっかくUIやプロンプト、パラメータ設定をしても、dockerを再起動するとリセットされてしまい、非常に使いづらい。
また、出力画像やエクステンションもdockerを再起動するたびにリセットされてしまう。
これを解決するために、gemini-2.5-proに相談して修正した最終的なrun-stable-diffusion-webui
を以下に示す。
run-stable-diffusion-webui
#!/bin/bash
mkdir -p $HOME/.cache/stable-diffusion-webui/{repositories,models,cache,miopen}
# MIOpen usually uses $HOME/.config/miopen
mkdir -p $HOME/Pictures
# ホスト側の設定保存用ディレクトリを作成
mkdir -p $HOME/.config/stable-diffusion-webui
# --- 設定ファイルの初期作成(存在しない場合のみ) ---
CONFIG_FILE="$HOME/.config/stable-diffusion-webui/config.json"
UI_CONFIG_FILE="$HOME/.config/stable-diffusion-webui/ui-config.json"
STYLES_FILE="$HOME/.config/stable-diffusion-webui/styles.csv"
PARAMS_FILE="$HOME/.config/stable-diffusion-webui/params.txt"
if [ ! -f "$CONFIG_FILE" ]; then
echo "{}" > "$CONFIG_FILE"
echo "Created initial empty config.json"
fi
if [ ! -f "$UI_CONFIG_FILE" ]; then
echo "{}" > "$UI_CONFIG_FILE"
echo "Created initial empty ui-config.json"
fi
if [ ! -f "$STYLES_FILE" ]; then
touch "$STYLES_FILE"
echo "Created initial empty styles.csv"
fi
if [ ! -f "$PARAMS_FILE" ]; then
touch "$PARAMS_FILE"
echo "Created initial empty params.txt"
fi
# --- 設定ファイルの初期作成ここまで ---
BIND_MOUNT_FLAG=
if getenforce 2>/dev/null | grep Enforcing > /dev/null; then
if getsebool container_use_devices | grep ' off$' > /dev/null ; then
printf 'Grant container GPU access with:\n\tsudo setsebool container_use_devices 1\n'>&2
exit 1
fi
# SELinux is in enforcing mode, see https://discussion.fedoraproject.org/t/how-do-i-give-rootless-podman-permissions-to-a-directory/22066/5
BIND_MOUNT_FLAG=:z
fi
podman run \
--name stable-diffusion-webui \
--replace \
-v $HOME/.cache/stable-diffusion-webui/repositories:/opt/stable-diffusion-webui/repositories$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/models:/opt/stable-diffusion-webui/models$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/cache:/opt/stable-diffusion-webui/cache$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/outputs:/opt/stable-diffusion-webui/outputs$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/extensions:/opt/stable-diffusion-webui/extensions$BIND_MOUNT_FLAG \
-v $HOME/.cache/stable-diffusion-webui/miopen:/root/.config/miopen$BIND_MOUNT_FLAG \
-v $HOME/Pictures:/opt/stable-diffusion-webui/log/images$BIND_MOUNT_FLAG \
-v $HOME/.config/stable-diffusion-webui/config.json:/opt/stable-diffusion-webui/config.json$BIND_MOUNT_FLAG \
-v $HOME/.config/stable-diffusion-webui/ui-config.json:/opt/stable-diffusion-webui/ui-config.json$BIND_MOUNT_FLAG \
-v $HOME/.config/stable-diffusion-webui/styles.csv:/opt/stable-diffusion-webui/styles.csv$BIND_MOUNT_FLAG \
-v $HOME/.config/stable-diffusion-webui/params.txt:/opt/stable-diffusion-webui/params.txt$BIND_MOUNT_FLAG \
--device /dev/kfd --device /dev/dri --net=host --security-opt=no-new-privileges \
docker.io/scottt/stable-diffusion-webui:gfx1151
これで永続化の問題は解決するはず。
高解像度画像が作れない問題(未解決)
これは、コンパイル中に動作が不安定になる件とも関係している。
上記で述べたように、解像度を含めたパラメータを変更すると最初にコンパイルが走って動作が不安定になる。
そして、解像度が大きくなってくるとコンパイルに時間がかかるようになる。
例として、1216×832の画像は問題なく出力できるが、それにHires. fixを適用して1.5倍の解像度にしようとすると、OSがハングアップして再起動を余儀なくされるか、強制的にログアウトされ、ログイン画面からやり直しになる。
メモリもVRAMも余裕があるため、ハングアップする理由がよくわからない。多少時間がかかっても良いので、安定動作するようにしてほしい。
EVO-X2を一週間使った所感
箇条書きで、記事の執筆中に思い浮かんだ所感を書き留めておく。
-
残念だった点
- Ryzen AI MaxはAI PC向けを謳っているが、現状はサポートが追いついておらず、AI用途を主目的として購入するのは控えたほうが良い。
- さらにLinuxではなくWindowsサポートを優先しているのも、AI向けというよりゲーマー向けでは?と感じてしまう。
- 現状、AMD GPU×生成AIの情報が圧倒的に少ない。グラボの載っていないMacよりも少ないとは思わなかった。
-
良かった点
- 汎用性、コスパが高い:「ユニファイドメモリ128GB」という制約の中で比較したときに、Mac StudioやNVIDIA GB10搭載のマシン(今後発売予定のDGX Sparkなど)より汎用性が高い上にコストが低いことが最大のメリット
- 小型、省電力性も期待以上で◎
参考までに下記の3製品の中で私が薦めるとしたら、下記のようなイメージ(異論は認めます)。
機種 | おすすめする人 |
---|---|
Mac Studio (Apple silicon) | ・Apple好き ・生成AIはローカルLLM推論ができれば満足 ・リセールバリューを気にする ・トラブルが生じたときに自力で解決できる自信がない |
DGX Spark(GB10) | ・AI玄人 ・CUDAが使えないマシンに価値がないと思っている ・学習したい ・動画生成、画像生成がしたい ・AI性能>>汎用性 |
EVO-X2(Ryzen AI MAX+ 395) | ・コスパ重視 ・汎用性重視 ・Windows/Linuxが使いたい ・サーバー運用も考えている |
おまけ
最後に、GPUの使用率を可視化したいと思って見つけたツールを紹介する。
amdgpu_top
今回の記事では、下記についてまとめました。
- AMD Ryzen AI Max+ 395でStable Diffusionを動かす方法
- 課題と一部課題の解決策
- EVO-X2を一週間使った所感
結論としては、一応RTX 3060並かそれより高速に動くことは確認できたものの、情報が少なく正式なサポートをしていない中で環境構築をしたので安定性に欠けるのが大きな課題だと感じました。
EVO-X2については、汎用性やコスパ重視な製品であるが故に、中途半端感が否めないものの長年メインマシンやサーバとして使えるポテンシャルを秘めており非常に満足しています。
今回の記事では言及してませんがローカルLLMについても少し触ってみました。別途機会があれば記事にするかもしれません。
最後まで読んでいただきありがとうございました。次回もぜひよろしくお願いします。
Views: 2