Automatic 1111 / Google Colab で SDXL 入門 (ブログ)
作成 : Masashi Okumura (@ClassCat)
作成日時 : 10/13/2023
* サンプルコードの動作確認はしておりますが、動作環境によりコードの追加変更が必要な場合はあるかもしれません。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Website: www.classcat.com ; ClassCatJP
Automatic 1111 / Google Colab で SDXL 入門
半年ほど前に PyTorch 2.0 : Google Colab で Stable Diffusion WebUI 入門 を投稿しましたが、SD 1.5 から SDXL 1.0 への移行を考えている人も増えているかと思います。
単に Google Colab 環境で Stable Diffusion WebUI (AUTOMATIC1111) を基本的な使い方をするだけならば SDXL でも特に違いはないのですが、一応 SDXL に特化してインストール・起動方法を簡単に説明します。
- 時間の経過により一部のライブラリのバージョンは更新されています。
Google Colab の設定
Google Colab では以下の設定が必要になります :
- GPU が利用できるようにします。Tesla T4 でも動作します。
いずれも [ランタイム] > [ランタイムのタイプを変更] メニューから設定可能です :
- ハードウェアアクセラレータ : T4 GPU
- ランタイムの仕様 : デフォルト
※「ハイメモリ」設定でなくても起動しました。
環境の確認
接続したら、最初に動作環境の確認をしておきます。
まずは GPU から。Tesla T4 が利用可能になっています :
!nvidia-smi
Fri Oct 13 06:53:38 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 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 59C P8 12W / 70W | 0MiB / 15360MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
次にシステムメモリです :
!free -h
total used free shared buff/cache available Mem: 12Gi 558Mi 9.8Gi 1.0Mi 2.3Gi 11Gi Swap: 0B 0B 0B
デフォルトでインストールされている PyTorch のバージョンを確認します。CUDA 11.8 用の PyTorch 2.0.1 がインストールされています :
!pip list | grep -y torch
torch 2.0.1+cu118 torchaudio 2.0.2+cu118 torchdata 0.6.1 torchsummary 1.5.1 torchtext 0.15.2 torchvision 0.15.2+cu118
xFormers のインストール
xFormers は FAIR が開発したメモリ効率的なアテンションのための Transformers 用ライブラリです。利用する Stable Diffusion WebUI が xFomers を想定してるので依存関係ライブラリとともに事前にインストールしておきます :
!pip install -q xformers==0.0.20 triton
xformers 0.0.17 から PyTorch 2.0 対応になっています。既に 0.0.21 と 0.0.22 がリリースされていますが、動作確認はまだしておりませんので、ここでは 0.0.20 を使用しています。
Stable Diffusion WebUI のインストール
準備ができましたので、Stable Diffusion WebUI のインストールを開始します。と言っても git で複製するだけです :
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui -b v1.6.0 /content/stable-diffusion-webui
Stable Diffusion WebUI は AUTOMATIC1111 (オートマチック・イレブンイレブンと読む場合が多いです) のものを使用しています。派生したプロジェクトは多いですが、ここではオリジナルのものを利用しました。
現時点での最新ステーブル版である v1.6.0 のブランチを使用しています。
基本モデル・チェックポイントのインストール
Stable Diffusion WebUI にはデフォルトではモデル・チェックポイントは含まれていません。
今回は SDXL モデルを利用することが目的ですので、🤗 ハブ上のベースモデル stabilityai/stable-diffusion-xl-base-1.0 のチェックポイントを取得しましょう :
!wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors \
-O /content/stable-diffusion-webui/models/sd_xl_base_1.0.safetensors
取得したモデル・チェックポイントはディレクトリ models/Stable-diffusion に収めるのが基本です。なお、suffix safetensors は ckpt よりも安全な形式です。
Stable Diffusion WebUI の起動
これで Stable Diffusion WebUI の起動が可能になります。いきなり起動することもできますが、依存関係のインストールのフェイズが長いので “–exit” フラグで先に依存関係のインストールだけを済ませます :
%cd /content/stable-diffusion-webui
!python launch.py --exit
/content/stable-diffusion-webui Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] Version: v1.6.0 Commit hash: 5ef669de080814067961f28357256e8fe27544f4 Installing clip Installing open_clip Cloning Stable Diffusion into /content/stable-diffusion-webui/repositories/stable-diffusion-stability-ai... Cloning into '/content/stable-diffusion-webui/repositories/stable-diffusion-stability-ai'... remote: Enumerating objects: 577, done. remote: Counting objects: 100% (307/307), done. remote: Compressing objects: 100% (91/91), done. remote: Total 577 (delta 246), reused 217 (delta 216), pack-reused 270 Receiving objects: 100% (577/577), 73.43 MiB | 15.88 MiB/s, done. Resolving deltas: 100% (278/278), done. Cloning Stable Diffusion XL into /content/stable-diffusion-webui/repositories/generative-models... Cloning into '/content/stable-diffusion-webui/repositories/generative-models'... remote: Enumerating objects: 740, done. remote: Counting objects: 100% (393/393), done. remote: Compressing objects: 100% (157/157), done. remote: Total 740 (delta 307), reused 236 (delta 236), pack-reused 347 Receiving objects: 100% (740/740), 22.31 MiB | 9.79 MiB/s, done. Resolving deltas: 100% (378/378), done. Cloning K-diffusion into /content/stable-diffusion-webui/repositories/k-diffusion... Cloning into '/content/stable-diffusion-webui/repositories/k-diffusion'... remote: Enumerating objects: 1302, done. remote: Counting objects: 100% (628/628), done. remote: Compressing objects: 100% (122/122), done. remote: Total 1302 (delta 540), reused 566 (delta 506), pack-reused 674 Receiving objects: 100% (1302/1302), 246.83 KiB | 12.99 MiB/s, done. Resolving deltas: 100% (901/901), done. Cloning CodeFormer into /content/stable-diffusion-webui/repositories/CodeFormer... Cloning into '/content/stable-diffusion-webui/repositories/CodeFormer'... remote: Enumerating objects: 594, done. remote: Counting objects: 100% (245/245), done. remote: Compressing objects: 100% (90/90), done. remote: Total 594 (delta 176), reused 170 (delta 155), pack-reused 349 Receiving objects: 100% (594/594), 17.30 MiB | 9.04 MiB/s, done. Resolving deltas: 100% (287/287), done. Cloning BLIP into /content/stable-diffusion-webui/repositories/BLIP... Cloning into '/content/stable-diffusion-webui/repositories/BLIP'... remote: Enumerating objects: 277, done. remote: Counting objects: 100% (165/165), done. remote: Compressing objects: 100% (30/30), done. remote: Total 277 (delta 137), reused 136 (delta 135), pack-reused 112 Receiving objects: 100% (277/277), 7.03 MiB | 21.83 MiB/s, done. Resolving deltas: 100% (152/152), done. Installing requirements for CodeFormer Installing requirements Exiting because of --exit argument
依存関係のインストールが完了するのに数分かかります。
問題がなければいよいよ起動です。引数は最適化と gradio 用が中心ですが、テーマはダークにしてみます :
!python launch.py --xformers --opt-sdp-attention --opt-sdp-no-mem-attention --no-half-vae --share --gradio-debug --theme dark
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] Version: v1.6.0 Commit hash: 5ef669de080814067961f28357256e8fe27544f4 Launching Web UI with arguments: --xformers --opt-sdp-attention --opt-sdp-no-mem-attention --no-half-vae --share --gradio-debug --theme dark 2023-10-13 07:01:30.738928: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT Moving sd_xl_base_1.0.safetensors from /content/stable-diffusion-webui/models to /content/stable-diffusion-webui/models/Stable-diffusion. Calculating sha256 for /content/stable-diffusion-webui/models/Stable-diffusion/sd_xl_base_1.0.safetensors: Running on local URL: http://127.0.0.1:7860 Running on public URL: https://7ded1e2f2e94d136ca.gradio.live This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces) 31e35c80fc4829d14f90153f4c74cd59c90b779f6afe05a74cd6120b893f7e5b Loading weights [31e35c80fc] from /content/stable-diffusion-webui/models/Stable-diffusion/sd_xl_base_1.0.safetensors Creating model from config: /content/stable-diffusion-webui/repositories/generative-models/configs/inference/sd_xl_base.yaml (…)it-large-patch14/resolve/main/vocab.json: 100% 961k/961k [00:00<00:00, 71.3MB/s] (…)it-large-patch14/resolve/main/merges.txt: 100% 525k/525k [00:00<00:00, 44.9MB/s] (…)h14/resolve/main/special_tokens_map.json: 100% 389/389 [00:00<00:00, 1.99MB/s] (…)tch14/resolve/main/tokenizer_config.json: 100% 905/905 [00:00<00:00, 5.14MB/s] (…)t-large-patch14/resolve/main/config.json: 100% 4.52k/4.52k [00:00<00:00, 19.2MB/s] Applying attention optimization: xformers... done. Model loaded in 81.4s (calculate hash: 40.6s, load weights from disk: 2.3s, create model: 3.5s, apply weights to model: 33.3s, apply half(): 0.2s, move model to device: 0.1s, load textual inversion embeddings: 0.2s, calculate empty prompt: 0.9s). Downloading VAEApprox model to: /content/stable-diffusion-webui/models/VAE-approx/vaeapprox-sdxl.pt 100% 209k/209k [00:00<00:00, 64.5MB/s]
Stable Diffusion WebUI への接続と動作確認
起動シークエンスが成功すると、(無料の) Gradio 動作環境が準備されて最後に以下のような出力が確認できます :
Running on local URL: http://127.0.0.1:7860 Running on public URL: https://7ded1e2f2e94d136ca.gradio.live This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)
public URL "https://xxx.gradio.live" をクリックすれば以下のような Stable Diffusion WebUI にアクセスできます。
例えば、プロンプトとして "a cat sitting on a tree with autumn leaves" を入力して、画面右サイドにある "Generate" ボタンをクリックすれば 10 秒ほどで画像が生成されます :
Stable Diffusion WebUI の終了
WebUI を終了するには、Colab の起動したセルを強制終了するだけです (該当セルの左側の実行中を示す、クルクル回転しているボタンをマウスでクリックすれば良いです)。
終了後は以下の 2 つの作業を忘れないでください :
- メニュー [ファイル] > [保存] (or Ctrl-S) でノートブックをセーブする。
- メニュー [ランタイム] > [ランタイムを接続解除して削除] でリソースを解放する。
2. のランタイム削除を実行しないと、いつまでも GPU などのリソースを専有していることになりますので注意してください。
以上