PyTorch 2.0 Google Colab で Stable Diffusion WebUI 入門 (ブログ)
作成 : Masashi Okumura (@ClassCat)
作成日時 : 04/06/2023
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく 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 つの作業を忘れないでください :
- メニュー [ファイル] > [保存] (or Ctrl-S) でノートブックをセーブする。
- メニュー [ランタイム] > [ランタイムを接続解除して削除] でリソースを解放する。
2. のランタイム削除を実行しないと、いつまでも GPU などのリソースを専有していることになりますので注意してください。
以上