はじめに
最近話題なStable Diffusionを自分も使いたいと思っていたのですが、未だに Radeon Rx570(4GB) を使用しているためCUDAコアが使用できないという状態になっていました...。
「CPUで実行しても時間が掛かるしな...」と思いつつCPUで生成していたところ、Direct Machine Learning (DirectML) というAMDとMicrosoftが協力して開発した機械学習向けの低レベルAPIというものがあるらしく、これを使用したStable Diffusion WebUIがあることが分かった。
そこで今回は、それを導入する方法と結果などを紹介していきます。
実行環境
- CPU : Ryzen7 3700x (8c16t)
- RAM : DDR4-3200 16GB
- GPU : Radeon RX570 4GB
- Python : 3.10.6
- Windows 11 22H2
導入
Stable Diffusionのインストール
Python(3.10.6)やGitは既にインストールされているものとして進めます。
任意の場所にフォルダを作成し、Gitで必要なファイルをダウンロードします。
$ git clone https://github.com/lshqqytiger/stable-diffusion-webui-directml
以下のコマンドを実行します。
$ cd stable-diffusion-webui-directml
$ git submodule init
$ git submodule update
Modelのダウンロード
Hugging Faceから任意のモデルをダウンロードします。
例えばrunwayml/stable-diffusion-v1-5をダウンロードする場合、Files and versionsからv1-5-pruned.ckptをダウンロードし、./stable-diffusion-webui-directml/model/に配置して下さい。
起動
./stable-diffusion-webui-directmlにあるwebui-user.batをダブルクリックで起動すると足りないパッケージやモジュールのインストールがされ、http://127.0.0.1:7860/ こちらにアクセスすると画像を生成するWebが立ち上がります。
あとは任意のプロンプトで生成して下さい。
runtimeerror: could not allocate tensor with ~~ bytes. there is not enough gpu video memory available!
上記のエラーは、グラボのメモリが画像の生成に足りないときに発生します。私の場合4GBしかないためこのエラーが発生しました。
対処法として、webui-user.batの設定を次のように変更することで解決します。
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--lowvram --always-batch-cond-uncond --opt-split-attention
call webui.bat
メモリの使用をなるべく使用しないように設定になります。これで512x512の生成が可能になりました。
結果
で、Radeonでも生成が出来るようになってどうなったのか?
ぶっちゃけあまり早いとは言えない...
まあ使っているグラボの性能を考えると当たり前ですがね
結論
もっと良いグラボかGoogle Colabを使おう
参考