🙄

ROCm非対応のAMDのGPUでもStable Diffusionがしたい

2023/01/17に公開

ということで、ネットで検索すると先駆者様が記事を書いてくださっていました。
ありがとうございます!
https://dolls.tokyo/howto-amd-sd-win/
本記事は「ブログの内容をやってみた」記事になります。
環境が違うのか、記事が書かれてから3か月すぎたからなのか、正しく動かすには記事の内容と異なる作業が少し発生しているのでそのあたりを記録として残します。(記事と異なる箇所には"★"を記載しています。)
筆者はモダンなプログラミング環境はほとんど触ったことがない素人ですので、不必要なコマンドを実行しているかもです。

弊環境

  • CPU:Ryzen 5 5600
  • GPU:Radeon RX 7900 XTX
  • OS:Windows 10 バージョン 21H2

やってみた

Pythonのインストール

記事通りにPython3.10.7をインストールします。古いバージョンのPythonがPCに入っていたのであらかじめアンインストールしておきました。

Powershellを管理者権限で起動し、Pythonの仮想環境を作成します。
以下のコマンドをPowershellで実行します。「⇒」はコマンドではなくウィザードへの回答です

cd [任意の作業フォルダ]
python -m venv ./virtualenv
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
⇒Y
./virtualenv/Scripts/Activate.ps1
virtualenv\Scripts\activate.bat

★引用記事には記載のなかったコマンド「virtualenv\Scripts\activate.bat」を追加で実行しました。引用記事でも参考にしている以下の記事を参考にしました。
https://www.travelneil.com/stable-diffusion-windows-amd.html

Pythonパッケージインストール

以下のコマンドを実行します

pip install diffusers==0.3.0
pip install transformers
pip install onnxruntime

Onnxのダウンロード

記事に従いORT-Nightly – Azure Artifactsにアクセスし、Python3.10用である”ort_nightly_directml-1.13.0.dev20221003004-cp310-cp310-win_amd64.whl”をダウンロード。ファイルは★作業フォルダに保存しました。(記事ではvirtualenvディレクトリに保存)
★以下のコマンドを実行(記事ではコマンドのファイル名が少し古いファイルになっている)

pip install ort_nightly_directml-1.13.0.dev20220908001-cp310-cp310-win_amd64.whl --force-reinstall

HuggingfaceにCLIログイン

ブラウザからHuggingfaceにアクセスしアカウント登録を行います、その後サービスにログインし自分のアカウントの[Setting] -> [Access Token]からTokenを発行しその内容をメモっておきます。

次にPowerShellに戻り、以下のコマンドを実行し、Token:で止まったらメモったトークを入力します。コピペでオッケーです。

huggingface-cli.exe login
⇒[メモったTokenの内容]

記事に従いonnxをインストール

pip install onnx

学習データのダウンロードとOnnxへの変換

以下のURLをブラウザで開くとPythonのスクリプトが記載されているのでその内容をクリップボードにコピーしておきます。
https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_stable_diffusion_checkpoint_to_onnx.py
作業フォルダに空のファイルを作成し、名前を変更"convert_stable_diffusion_checkpoint_to_onnx.py"Pythonファイルを作ります。作ったPythonファイルを開き、先ほどコピーした内容を貼り付け保存します。
準備が出来たら以下のコマンドを実行します。

python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="CompVis/stable-diffusion-v1-4" --output_path="./stable_diffusion_onnx"

★上記のコマンド実行時に以下のエラーが出ましたが、diffusersをインストールしなおすと出なくなりました。

エラー「cannot import name 'StableDiffusionPipeline' from 'diffusers'
pip uninstall diffusers
pip install diffusers

★また、エラーと一緒に、"pip install accelerate"をやたらとコンソールがおススメしてきたので一応しておきました。

pip install accelerate

いよいよ実行

作業フォルダに"text2img.py"という名前のPythonファイルを作成し、以下の内容をコピーします。★(ファイル名をtext2img.pyと少し変え、英語の記事の方のスクリプトを採用した)

text2img.py
from diffusers import StableDiffusionOnnxPipeline
pipe = StableDiffusionOnnxPipeline.from_pretrained("./stable_diffusion_onnx", provider="DmlExecutionProvider")

prompt = "A happy celebrating robot on a mountaintop, happy, landscape, dramatic lighting, art by artgerm greg rutkowski alphonse mucha, 4k uhd'"

image = pipe(prompt).images[0] 
image.save("output.png")

PowerShellにて以下のコマンドを実行しPythonスクリプトを実行します。作業フォルダにoutput.pngというファイルが出力されれば成功です。

python.exe .\text2img.py

★上記のコマンド実行時に以下のエラーが出ましたがnumpyのバージョンを落としてインストールしなおすと出なくなりました。

エラー「'numpy' has no attribute 'float' in Python?」
pip uninstall numpy
pip install numpy==1.23.3

参考:stackoverlow - How to solve error 'numpy' has no attribute 'float' in Python?

今後

引用元のブログの作者様がさらに未開を切り開いてくれていたので、以下の記事などもやってみようかなと思ってます。
https://dolls.tokyo/amd_anything_webui_verup/

Discussion