Harukaのnote

Linuxやプログラミング,写真,旅行等の記録帳

ROG Zephyrus G14 (2022) Radeon GPUでStable Diffussion WEB UIを実行

久しぶりのブログ更新になりました。

今回は自分のノートPCであるROG Zephyrus G14 (2022) GA402にLinuxデュアルブートして、Stable Diffusion WEB UIの実行が確認できたので残して置きたいと思います。

ROG Zephyrus G14 (2022) はノートでは珍しくRadeon RX6700s(VRAM: 8GB)を搭載するPCです。そのためNVIDIAのCUDAではなくAMDROCm(CUDAに相当するライブラリ)を使用する必要があります。

今回の備忘録はROG Zephyrus G14に限らず、Radeon eGPUを搭載するデスクトップでも同等の手順で再現できるかと思います。

前提として、WSL等のWinodws環境では実行していません。がLinuxの方が対応しているためです。 そのため、実行環境はデュアルブートしたManjaro Linuxとなります。ちなみにOpenSUSE Leap 15.5で試しましたがうまくROCm環境を整えることができませんでした…

「個人PCはUbuntu以外のLinuxを使う」という縛りプレイを自分に課しているため、Ubuntuは試していません。申し訳ございません。

Manjaro Linuxのインストール(デュアルブート

Manjaroのインストール記事はネット上に多数存在するため、そちらを参考に願います。 もしくは多少古いですが過去記事(Windows 11 と Manjaro をデュアルブートする際のメモ - Harukaのnote)を参照ください。

手順:

  1. UEFIでSecure bootをdisableに変更
  2. Windows 11のコントロールパネルから、パーティション設定を呼び出して空き容量を作成(プライマリパーティションの縮小)
  3. Rufus等でManjaroのLive USBを作成
  4. Shiftを押しながら再起動 → 回復メニュー → UEFIの起動(起動時のDel長押しでUEFIに入れなかったため)
  5. F8でboot menuに入りUSBを選択してManjaroのLive USBを起動
  6. 空けたスペースにManjaroをインストール

ROCmの準備

ROCmのインストール

sudo pacman -Sy && sudo pacman -S rocm-hip-sdk rocm-opencl-sdk rocm-llvm rocm-hip-runtime rocminfo

参考: stable-diffusion-webuiをインストールする (Arch Linux, AMD ROCm)

環境変数の設定

環境変数HSA_OVERRIDE_GFX_VERSION=10.3.0を設定します。 HSA_OVERRIDE_GFX_VERSION=10.3.0はgfx1030を意味し、gfx1030とは異なるコードネームを持つRDNA2 GPU(gfx1031、gfx1032など)を正しくROCmを実行できるようにします。RX6700sはgfx1032に該当します。

sudo vim /etc/environment
# 以下を記入
HSA_OVERRIDE_GFX_VERSION=10.3.0

参考: Does ROCm support the RX 6700S (laptop GPU) · Issue #1756 · RadeonOpenCompute/ROCm · GitHub

pyenvの設定

Python venvを使ってもいいですが、自分はpyenvの方が好みのためインストールします。

まず、依存ライブラリをインストールします。

sudo pacman -S git readline sqlite3 zlib openssl libffi gcc tk cairo pkgconf make cmake

pyenv、pyenv-virtualenv、pyenv-updateを以下の長いコマンドでインストールします。

git clone https://github.com/yyuu/pyenv.git ~/.pyenv && git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv && git clone https://github.com/yyuu/pyenv-update.git ~/.pyenv/plugins/pyenv-update

pathを通します。最新のManjaroはデフォルトシェルがzshになっていたので、.zshrcを編集します。

sudo vim ~/.zshrc
# 以下を追記
# pyenv settings
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

pathを反映させます。

source ~/.zshrc

pyenvのインストールが完了したので、pyenvを使ってpython 3.10をインストールします。

pyenv install -list | grep 3.10
# インストール可能な3.10系一覧を取得
︙
3.10.11
3.10.12
3.10.13 ←最新
︙

python 3.10.13をインストールします。

pyenv install 3.10.13

3.10.13をもとにStable Diffusion用の仮想環境を作成します。

pyenv virtualenv 3.10.13 sd-webui 

この手順とその他のpyenvの概要は以下の過去記事にあります。

参考: Linux(OpenSUSE)にPyenvをインストールする - Harukaのnote

Stable Diffusionの実行

Stable Diffusionを落としてきて、ディレクトリを移動します。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

cd stable-diffusion-webui

ここで作った仮想環境(sd-webui)を使えるようにします。

pyenv local sd-webui

pip等を最新の状態に更新し、pytorchのROCm版をインストールします。

python -m pip install --upgrade pip wheel && pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm5.4.2

WEB UIの起動

以下のコマンドでWEB UIが実行されます。

TORCH_COMMAND='pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm5.4.2' python launch.py --precision full --no-half

http://127.0.0.1:7860にアクセスすると以下のような画面になります。

Stable Diffusion WEB UI

以上です。うまく動かせられましたら幸いです。 ノートPC用AMD GPUというニッチな環境下のため、なかなか情報がなく大変でしたがManjaroはデフォルトリポジトリにROCmがあったりとサポートが行き届いている印象です。