Stable DiffusionをGoogle Colaboratoryで動かしてAI画像生成を試す

2023年2月10日金曜日

stable-diffusion

t f B! P L

はじめに

Stable Stable Diffusionを試した。動かすまでの過程をメモしておく。

  • (2023/06/08: webui無料枠で遊びにくくなったことを追記した)
  • (2023/02/15: 少し追記)

やりたいこと

注意点

GPUの利用制限がある

正確な時間はわからないが数時間使うとGPUがしばらく使えなくなる。一度制限が来ると24時間ほどGPUが使えなくなる。

なので遊び終わったらColaboratoryのメニューにあるランタイムからランタイムを接続解除して削除でちゃんと切っておく。

(必要なら)AI用のgoogleアカウントを作る

Google Google ドライブにセンシティブな画像があるとひっかかる可能性があるらしい。ドライブに生成した画像を保存する場合は心に留めておく。気になる場合は別アカウントを作って作業する。

参考: Colab版導入

準備1: Google Driveの操作

学習済みモデルデータの入手

今回はAbyssOrangeMix2 (AOM2)を利用する。ModelsVAEをダウンロードする。

safetensorsなModelが3個あるが、AbyssOrangeMix2_sfw.safetensorsはSFW(健全)、AbyssOrangeMix2_nsfw.safetensorsがSFWから軽いNSFW、AbyssOrangeMix2_hard.safetensorsがSFWからhard NSFWとある。AbyssOrangeMix2_sfw.safetensorsを選んだものとして進める。他のモデルを選ぶ場合は適宜読み替えてください。

参考: https://huggingface.co/WarriorMama777/OrangeMixs#abyssorangemix2-aom2

Google driveを開く。適当にフォルダを新規に作ってそこにデータを入れる。フォルダの名前はSDとした。

準備2: Colaboratoryでの操作

まずColaboratoryのメニューのランタイムからランタイムのタイプを変更、ハードウェアアクセラレータをGPUに設定する。

GPUが使えるか確認。実行は再生ボタンのようなやつを押すかCTRL+ENTER。

!nvidia-smi

有効だとこのようになる。

Tue Feb  7 01:44:08 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   56C    P0    30W /  70W |      0MiB / 15360MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

stable-diffusion-webuiのクローンとGoogle driveのマウントを行う。

!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
from google.colab import drive
drive.mount('/content/drive')

driveにアクセスするかを聞かれるので許可。

マウントできているか確認。ModelとVAEがある。

!ls drive/MyDrive/SD/
(↓結果)
AbyssOrangeMix2_sfw.safetensors  orangemix.vae.pt

stable-diffusion-webuiに行ってpythonで動かす。起動完了に数分かかるかもしれない。

%cd /content/stable-diffusion-webui
!python launch.py --share --xformers --ckpt-dir /content/drive/MyDrive/SD --vae-path /content/drive/MyDrive/SD/orangemix.vae.pt

Running on public URL: https://(文字列).gradio.liveと出てくるのでこのURLを開く。

(2023/02/15追記)起動直後にエラーがでたり、または起動中に生成したURLが機能しなくなることがある。アクセスするとNo interface is running right nowなどと言われる。そのときは再起動する。

参考: Colab1111でGoogleドライブからモデルを読み込む

launch.pyの引数メモ

  • --share: 公開用のurlが設定される。
  • --xformers: あると画像の生成が速い。
  • --ckpt-dir: モデルデータがあるディレクトリの指定。マウントしたdriveを使うので必要。
  • --vae-path: VAEの指定。これが無くても後でwebuiのsettingsから設定できる。

追記したときに変更した部分

VAEを切り替えるとき、settingsで変更しても反映されないことがあったので--vae-pathを外した。

以前に書いてたもの

%cd /content/stable-diffusion-webui
!python launch.py --share --xformers --ckpt-dir /content/drive/MyDrive/SD --vae-path /content/drive/MyDrive/SD/orangemix.vae.pt

コマンドライン引数はlaunch.py, webui.py, shared.pyなどを見て参考にする。

コマンドライン引数はhttps://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Command-Line-Arguments-and-Settingsを見る。

遊ぶ

settingsのStable DiffusionにあるSD VAEをorangemix.vae.ptにしてApply settingsする。起動時に指定しているが気になったのでしておいた。

準備ができたので遊んでみる。適当にプロンプトを入力してSampling methodをDPM++ SDE KarrasにしてGenerateする。

スシ!何かと聞かれたら寿司と答えるしかなさそうな食べ物を食べている女の子が生成された。食べ物は難しい。

難しいことをしなければいいイラストが簡単に作れる。

AbyssOrangeMix2の場合は

  • プロンプト(呪文)はシンプルなほうがよく
  • SamplerはDPM++ SDE Karrasがよく
  • Sampling Stepsはテストとして12ぐらい、イラストとして出力は12以上
  • CFG Scaleは5か6

がいいらしい。個人的にはCFG Scaleはプロンプトがシンプルなときは小さく、複雑なときは大きくしてお祈りする印象。

(2023/02/15追記)画像を保存するときはSaveをクリックして生成されたリンクをクリックするとダウンロードできる。ある時突然Saveを押しても新しい画像へのリンクが生成されなくなることがある。このときはページを再読み込み(F5など)するといい。

生成された画像はstable-diffusion-webui/outputsにあることを知っておくと、保存し逃した画像を回収できる。zipなどを使ってまとめてダウンロードしてもいい。ランタイムを接続解除して削除するとファイルが消えるので注意する。

outputs以下をzipにまとめる。

!zip -r /content/images.zip /content/stable-diffusion-webui/outputs

ダウンロードは少し時間がかかる。

おわりに

おわり。Colaboratoryやモデル、UIを公開してくれている方々のおかげで簡単に試すことができてとてもありがたい。

QooQ