PyTorch 2.0 : Google Colab で Stable Diffusion WebUI 入門

PyTorch 2.0 Google Colab で Stable Diffusion WebUI 入門 (ブログ)

作成 : Masashi Okumura (@ClassCat)
作成日時 : 04/06/2023

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

ClassCat Chatbot

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Website: www.classcat.com  ;   ClassCatJP

 

 

PyTorch 2.0 : Google Colab で Stable Diffusion WebUI 入門

🤗 Diffusers は拡散モデルの最先端技術を活発に取り入れ続ける、包括的で優れたプロジェクトですが、WebUI を自作するためには Gradio や 🤗 Spaces の知識が必要ですし、🤗 Spaces で GPU を利用するためにはもちろん課金も必要です。

そのため Stable Diffusion WebUI をローカル環境に導入して利用している人も多いでしょう。

PyTorch 2.0 がデフォルトでインストール済みの Google Colab 環境で Stable Diffusion WebUI の動作確認ができましたので、この記事では Stable Diffusion WebUI を無料で手軽に利用する方法を簡単に説明します。取り敢えずは最小限の構成で起動するまでを説明します。

 

Google Colab の設定

Google Colab では以下の設定が必要になります :

  • GPU が利用できるようにします。Tesla T4 で十分です。
  • (CPU) ハイメモリの設定が必要になります。

いずれも [ランタイム] > [ランタイムのタイプを変更] メニューから設定可能です :

  • ハードウェアアクセラレータ : GPU
  • GPU のタイプ : T4
  • ランタイムの仕様 : ハイメモリ

※「ハイメモリ」設定でないと起動時に落ちますので注意してください。

 

環境の確認

接続したら、最初に動作環境の確認をしておきます。

まずは GPU から。Tesla T4 が利用可能になっています :

!nvidia-smi
Wed Apr  5 21:03:32 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12    Driver Version: 525.85.12    CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| 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   41C    P8    11W /  70W |      0MiB / 15360MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

次に CPU メモリです。ハイメモリ設定ですので十分な大きさがあります :

!free -h
              total        used        free      shared  buff/cache   available
Mem:           51Gi       738Mi        46Gi       1.0Mi       3.3Gi        49Gi
Swap:            0B          0B          0B

デフォルトでインストールされている PyTorch のバージョンを確認します。CUDA 11.8 用の PyTorch 2.0.0 がインストールされています :

!pip list | grep -y torch
torch                         2.0.0+cu118
torchaudio                    2.0.1+cu118
torchdata                     0.6.0
torchsummary                  1.5.1
torchtext                     0.15.1
torchvision                   0.15.1+cu118

 

xFormers のインストール

xFormers は FAIR が開発したメモリ効率的なアテンションのための Transformers 用ライブラリですが、PyTorch 2.0 では同等の機能が組み込まれています。

そのため本来は不要ですし、実際に GPU メモリ削減に寄与していないようにも見えますが、利用する Stable Diffusion WebUI が xFomers を想定してるので依存関係ライブラリとともに事前にインストールしておきます :

!pip install xformers==0.0.18
!pip install -U --pre triton

xformers 0.0.17 から PyTorch 2.0 対応になっています。03/31 に 0.0.18 がリリースされています。

 

Stable Diffusion WebUI のインストール

準備ができましたので、Stable Diffusion WebUI のインストールを開始します。と言っても git で複製するだけです :

!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui /content/stable-diffusion-webui

Stable Diffusion WebUI は AUTOMATIC1111 (オートマチック・イレブンイレブンと読む場合が多いです) のものを使用しています。派生したプロジェクトは多いですが、ここではオリジナルのものを利用しました。

 

基本モデル・チェックポイントのインストール

Stable Diffusion WebUI にはデフォルトではモデル・チェックポイントは含まれていませんので、取り敢えず 🤗 ハブ上のベースモデル runwayml/stable-diffusion-v1-5 のチェックポイントを取得しておきましょう :

!wget https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors -O /content/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors

取得したモデル・チェックポイントはディレクトリ models/Stable-diffusion に収めるのが基本です。なお、suffix safetensors は ckpt よりも安全な形式です。

 

Stable Diffusion WebUI の起動

これで Stable Diffusion WebUI の起動が可能になります。いきなり起動することもできますが、依存関係のインストールのフェイズが長いので “–exit” フラグで先に依存関係のインストールだけを済ませます :

%cd /content/stable-diffusion-webui
!python launch.py --exit
Python 3.9.16 (main, Dec  7 2022, 01:11:51) 
[GCC 9.4.0]
Commit hash: 22bcc7be428c94e9408f589966c2040187245d81
Installing gfpgan
Installing clip
Installing open_clip
Cloning Stable Diffusion into /content/stable-diffusion-webui/repositories/stable-diffusion-stability-ai...
Cloning Taming Transformers into /content/stable-diffusion-webui/repositories/taming-transformers...
Cloning K-diffusion into /content/stable-diffusion-webui/repositories/k-diffusion...
Cloning CodeFormer into /content/stable-diffusion-webui/repositories/CodeFormer...
Cloning BLIP into /content/stable-diffusion-webui/repositories/BLIP...
Installing requirements for CodeFormer
Installing requirements for Web UI
Exiting because of --exit argument

依存関係のインストールが完了するのに 2,3 分かかります。

問題がなければいよいよ起動です。引数は最適化と gradio 用です :

!python launch.py --xformers --opt-sdp-attention --opt-sdp-no-mem-attention --share --gradio-debug
Python 3.9.16 (main, Dec  7 2022, 01:11:51) 
[GCC 9.4.0]
Commit hash: 22bcc7be428c94e9408f589966c2040187245d81
Installing requirements for Web UI
Launching Web UI with arguments: --xformers --opt-sdp-attention --opt-sdp-no-mem-attention --share --gradio-debug
2023-04-05 21:15:27.815898: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-04-05 21:15:28.701269: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
/usr/local/lib/python3.9/dist-packages/torchvision/transforms/functional_tensor.py:5: UserWarning: The torchvision.transforms.functional_tensor module is deprecated in 0.15 and will be **removed in 0.17**. Please don't rely on it. You probably just need to use APIs in torchvision.transforms.functional or in torchvision.transforms.v2.functional.
  warnings.warn(
Calculating sha256 for /content/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors: 6ce0161689b3853acaa03779ec93eafe75a02f4ced659bee03f50797806fa2fa
Loading weights [6ce0161689] from /content/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
Creating model from config: /content/stable-diffusion-webui/configs/v1-inference.yaml
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
Downloading (…)olve/main/vocab.json: 961kB [00:00, 1.52MB/s]
Downloading (…)olve/main/merges.txt: 525kB [00:00, 1.18MB/s]
Downloading (…)cial_tokens_map.json: 100% 389/389 [00:00<00:00, 63.4kB/s]
Downloading (…)okenizer_config.json: 100% 905/905 [00:00<00:00, 309kB/s]
Downloading (…)lve/main/config.json: 4.52kB [00:00, 3.73MB/s]
Applying xformers cross attention optimization.
Textual inversion embeddings loaded(0): 
Model loaded in 18.5s (calculate hash: 12.0s, load weights from disk: 0.3s, create model: 4.2s, apply weights to model: 0.8s, apply half(): 0.5s, move model to device: 0.6s).
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://xxx.gradio.live

This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces

 

Stable Diffusion WebUI への接続と動作確認

起動シークエンスが成功すると、(無料の) Gradio 動作環境が準備されて最後に以下のような出力が確認できます :

Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://xxx.gradio.live

This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces

public URL "https://xxx.gradio.live" をクリックすれば以下のような Stable Diffusion WebUI にアクセスできます。

例えば、プロンプトとして "cherry blossoms are falling and scattering on a black cat on the lawn." を入力して、画面右サイドにある "Generate" ボタンをクリックすれば 10 秒ほどで画像が生成されます :

なお、この時の GPU メモリは 2.2 GB, CPU メモリは 5.9 GB ほどが消費されています。

 

Stable Diffusion WebUI の終了

WebUI を終了するには、Colab の起動したセルを強制終了するだけです (該当セルの左側の実行中を示す、クルクル回転しているボタンをマウスでクリックすれば良いです)。

終了後は以下の 2 つの作業を忘れないでください :

  1. メニュー [ファイル] > [保存] (or Ctrl-S) でノートブックをセーブする。
  2. メニュー [ランタイム] > [ランタイムを接続解除して削除] でリソースを解放する。

2. のランタイム削除を実行しないと、いつまでも GPU などのリソースを専有していることになりますので注意してください。

 

以上