何日か前にStable Diffusion WebUI DirectML版をMicrosoft Oliveを利用して速度を上げる方法がAMDのHPに公開されていました。
なんと、DirectML版の9.9倍も速くなるとのこと。
これが実用的に使えるのであれば、ついにRadeonでWindows上で実用的なStable Diffusion WebUI環境が構築できることになります。
これが本当であれば、DirectML版のハローアスカベンチマーク55秒台ですから5.5秒台で512x512の画像が10枚生成できるということになり、RTX4090の性能を超えることになります。
ちょっと驚かされる性能です。
結論から先に書きます。
「性能はともかくとして実用上、使い物にならない」といのがやってみた感想です。
あまりに実用的でなかったため、途中で放棄しました。
手順は最初に自分なりの手順でやってみましたが駄目だったので、下のページに書いてある通りに実行しました。
[How-To] Running Optimized Automatic1111 Stable Diffusion WebUI on AMD GPUs
大まかな手順としては以下の通り
大本の手順ではMinicondaを使うことになっていましたが、私はMinicondaを使ったことが無かったのでなんとかvenv環境でできないかどうか試してみました。
準備
- Git for Windows最新版をインストール
- python3.9をインストール
学習済みモデルの最適化
- git.exe clone https://github.com/microsoft/olive --branch v0.2.1 SDv15_Trans
- CD \SDv15_Trans
- python -m venv venv
- python venv\script\activate.bat
- pip install olive-ai[directml]==0.2.1
- pip install -r requirements.txt
- pip install pydantic==1.10.12
- cd examples\directml\stable_diffusion
python stable_diffusion.py --optimize
上の手順で試してみましたが、うまくいきませんでしたので、あきらめてMinicondaを使ってみることにしました。
準備
- Git for Windowsをインストール
- Miniconda for Windowsをインストール
- 最新のRadeonドライバをインストール
学習済みモデルの最適化
- conda create --name olive python=3.9
- conda activate olive
- git.exe clone https://github.com/microsoft/olive --branch v0.2.1 SDv15_Trans
- pip install olive-ai[directml]==0.2.1
- pip install -r requirements.txt
- pip install pydantic==1.10.12
- cd SDv15_Trans\examples\directml\stable_diffusion
この辺は書いてある通りの手順です。
書いてある方法だけあって、かなりスムーズに進みました。
python stable_diffusion.py --optimize
を実行して学習済みモデルデータを変換するのですが、変換するモデルデータはStable Diffusion WebUIでもおなじみ、モデルデータが何もない状態にデフォルトでインストールされるモデルデータです。
上記のコマンドを実行すると勝手にHuggingfaceからダウンロードして勝手に変換します。
runwayml/stable-diffusion-v1-5
HuggingfaceのHPで言えば上のモデルになります。
無事、変換は終わって、書いてある通りに「SDv15_Trans\examples\directml\stable_diffusion」以下にmodelsと言うフォルダが作成され、変換済みデータが作成されました。
しかし、驚くことにモデルデータは一つのファイルではなく、フォルダの中にいくつかのサブフォルダを含む複数のファイルに分かれていました。
私はこの時点で、「あまり実用的には使えないかな」と思い始めていました。
他のモデルデータは変換できないのだろうかとAMDのページを探してみましたが、
python stable_diffusion.py –help
を実行して確認してくださいと書いてあったので実行してみました。
ちなみに上のコマンドは間違いで正しくは
python stable_diffusion.py –-help
python stable_diffusion.py –h
の何れかになります。
しかし、特にモデルデータに関する記述はありません。
結局方々を探してみたところ、
Microsoft Oliveのgitページ内に記述がありました。
それによるとモデルデータの変換は
python stable_diffusion.py --optimize --model_id <string>
となるようです。
<string>はHuggingface内のモデルデータHPに書いてある文字列を入れるようです。
例えば上で紹介したデフォルトのモデルデータを例にすると
runwayml/stable-diffusion-v1-5
となります。
※ ただしデフォルトの場合は何も指定しないと勝手にダウンロードされるので指定する必要は無いです。
その他のモデルデータの場合は必要
Stringの例
CompVis/stable-diffusion-v1-4
runwayml/stable-diffusion-v1-5
(default)sayakpaul/sd-model-finetuned-lora-t4
stabilityai/stable-diffusion-2
また、以前私が紹介したモデルデータでも試してみました。(HuggingFaceにアップロードされているのもののみ)
結果はデフォルトのもの以外「一つもうまくいきません」でした。(苦笑
なお、変換したモデルデータが使えるかどうかは
python stable_diffusion.py --interactive --num_images 2
でテスト出来ますがこちらはうまくいきました。
お城の画像が2枚生成されます。
というわけで、デフォルトのモデルデータ以外は一つも変換できなかったので実用的ではないと判断してこの時点で使用をあきらめました。
なお、onnx型式に変換する別のやり方でも9.9倍も速度はあがらないようですが、Radeonで使えるようでそちらの手順を公開されている方の情報を見ると、
- 変換スクリプトはエラーで止まることがある
- vaeは自分でマージして変換する
- エラーが出た学習済みモデルデータはスクリプトを自分で手直しすると使えることがある
と言うような情報があったことは付け加えておきます。
出来ると書いてあっても、オリジナルのpytorch版と同じような使い勝手で出来るとは限らない
今回改めて思ったのは「出来る」ことがイコールオリジナルのpytorch版と同じ使い勝手で出来るとは限らないということです。
恐らく上の手順でも努力してスクリプトなどを書き換え、手間を惜しまなければ使えないことはないのでしょう。
しかし、LoRAやembeded、Controlnetなどを使うことを考えるたびにどのように変換していくか頭を悩ませることを想うととても実用的に使えるようには思えません。
Stable diffusion WebUIはとても進化が速く、機能の追加がいくつもあり、extensionも独自の進化を続けています。
実用的に使えることと、単純に使えるということの間には天と地ほども差があるということが実感できた出来事でした。
いくつもの技術者を抱えている組織での活用ならば運用できないことは無いのかもしれません。
しかし、ホビーユーザーが使い続けるのはあまりにハードルが高すぎると思います。
現状で、RadeonでStable Diffusion WebUIを使う上での最適解はやはりLinuxでROCmを使うことなのかなと思います。
LinuxにおけるROCmはサーバーでnVIDIAのGPUと同じようにRadeonが使えるようにAMDがかなりの手間と人材を投入して作成しているものです。
インストールに12GBも必要とされる巨大なファイル群ですので、やはりこれらがRadeonでAI/ML環境を整えるにあたっては最強なのかなと思います。
RadeonでAI/ML環境を整えるならば、LinuxでROCm以外には選択肢は無いと思った方がよいでしょう。
更新:Stable Diffusion WebUIのROCm 5.6(Linux)用セットアップスクリプト配布
上の記事にLinux+最新のROCm5.6でStable diffusion WebUIをセットアップできるスクリプトを配布しておりますので是非参考にしてください。
RadeonでもWindows環境が使いたいという気持ちはよくわかりますが、余計な苦労をしたくなければLinux版のROCmを使う方が無難です。
ソフトが使えるか使えないかの環境を整備するのに頭を悩ませるより、Linuxを使って確実にソフトが使える環境を整え、イラストAIを使うことに時間を使いましょう。
これらはNMKD Stable Diffusion GUIやSharkなどRadeonのWindows環境で使えるとされるその他の亜種にも該当することだと思います。
というわけで、RadeonでのAI/MLにまつわる試行錯誤の一つでした。
参考になればうれしいです。
AMDのGPU Radeonシリーズ
Radeon 7000シリーズ
Radeon RX 6000シリーズ
※ SAPPHIREはAMD Radeon専業のメーカーであり、Radeonのリファレンス的なメーカーです。