はじめに
久しぶりにStable DiffusionをAMD製GPUのWindows PCで使おうとしたのですが、環境構築方法をすっかり忘れていてたので、CPUのみを使う場合とGPUを使う場合の両方の手順をメモしておきます。
環境
実行環境はミニPCなので性能は高くないのですが、一応軽いゲームであれば動くレベルのGPU(Memory 8GB)がついている機種です。このGPUを使ってStable Diffusionで画像生成を実行できるようにしたいと思います。
ミニPC Minisforum HX80G
CPU AMD Ryzen7 5800H (8コア)
GPU Radeon RX 6600M (8GB)
Memory DDR4 32GB
OS Windows 11 Pro
インストール
前提条件
OS Windows 11 Pro
Python3 , Git for Windowsをインストール済み
手順(CPU利用)
Gitの以下のレポジトリを任意のフォルダにクローン
git clone https://github.com/lshqqytiger/stable-diffusion-webui-directml
Exploreでクローンしたフォルダは以下の
stable-diffusion-webui-directml
フォルダを開き
webui-user.batをダブルクリックし起動
GPU関連のエラーが発生するので、GPUチェックをスキップしCPUを使うようにwebui-user.batを書き換え
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--update-all-extensions --skip-torch-cuda-test --medvram --opt-sub-quad-attention --opt-split-attention --no-half --precision full --no-half-vae --upcast-sampling --update-check
call webui.bat
生成中のCPU,GPU使用率は以下の通り、GPUが使われておらずCPU使用率が高くなっています。
手順(GPU利用)
Gitの以下のレポジトリをクローン
git clone https://github.com/lshqqytiger/stable-diffusion-webui-directml
stable diffusion webui directml
webui-user.bat
を実行すると、必要なファイルのインストールが実行される。
途中で以下のエラーが発生する
Traceback (most recent call last):
File "C:\temp\stable-diffusion-webui-directml\launch.py", line 48, in <module>
main()
File "C:\temp\stable-diffusion-webui-directml\launch.py", line 39, in main
prepare_environment()
File "C:\temp\stable-diffusion-webui-directml\modules\launch_utils.py", line 590, in prepare_environment
raise RuntimeError(
RuntimeError: Torch is not able to use GPU; add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check
途中でエラーが発生するので
torchのdirectmlをインストールする。
cd venv\Scripts
activate
Torch(PyTorch)がGPUでは使えないというメッセージのようなので、direct MLに対応したTorchをインストールする必要があります。
Stable Diffusionの起動バッチwebui.batの中身をみると、以下の記述がありPythonの仮想環境への切り替えはstable-diffusion-webui-directml配下のvenv\Scripts/activate.batで切り変えていることが分かります。
set PYTHON="%VENV_DIR%\Scripts\Python.exe"
call "%VENV_DIR%\Scripts\activate.bat"
echo venv %PYTHON%
コマンドプロンプト上で次のコマンドを入力しactivate.batを実行てPythonの仮想環境を有効化します。
cd C:\GitでCloneを実行したフォルダのパス\stable-diffusion-webui-directml\venv\Scripts
activate.bat
このコマンドを実行すると、コマンドプロンプトの先頭に (venv) と表示されるようになります。
これは、仮想環境が有効化されたことを示しています。
仮想環境が有効化された状態で、torch_directmlなどの必要なパッケージをインストールします。
pip install torch_directml
解説
仮想環境が有効化された状態では、pipコマンドでインストールするすべてのパッケージは、仮想環境内にインストールされ、システム全体には影響を与えません。この状態でインストールを行うことで、他のプロジェクトやシステム環境に影響を与えることなく、必要な依存関係を管理することができます。
その後、
webui-user.batを以下のように編集
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--use-directml --update-all-extensions --medvram --opt-sub-quad-attention --opt-split-attention --no-half --precision full --no-half-vae --upcast-sampling --update-check
call webui.bat
COMMANDLINE_ARGSで指定するオプションは環境と好みにより調整
--use-directml は必須。
--medvram はメモリが少ないので指定。
webui-user.batを実行するとwebuiが起動しブラウザから画像生成ができます。
CPU 使用率が低く、GPUが99%とGPUをしっかり使えているようです。
実行時間は一枚40秒程度
まとめ
CPU Ryzen7 5800H | GPU RX6600M |
---|---|
280秒 | 40秒 |
Mini PCのGPUを使いStable Diffusionで画像生成したところ、
CPUのみの場合と比較して約7倍高速に生成できることが分かりました。
2024/8/10 追記
手順(GPU)の後、webui-user.batで起動しようとすると、エラーが発生するようになっていました。
from .onnxruntime_pybind11_state import * # noqa
ImportError: DLL load failed while importing onnxruntime_pybind11_state: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
環境依存の問題のようですが、私の環境ではVisual C++の再配布可能パッケージを更新したところ起動できるようになりました。