※2024.10.13 「ColabでStable Diffusionが起動しないエラー」の修正を行いました。※2024.03.20 「ColabでStable Diffusionが起動しないエラー」の修正を行いました。※2023.06.23 「ColabでStable Diffusionが起動しないエラー」の修正を行いました。
※Colab無料版は、非常に不安定で、頻繁に接続が解除されます。また、接続すらできないことも多々あります。Colab無料版でStable Diffusion WebUIを使用することはお勧めしません。
ローカル環境にStable Diffusionをインストールする前。Google Colabの無料版でお試しをしていた筆者ですが、その時は本当にお試し程度で、 controlnet などの拡張機能などはほとんど入れず、プロンプトやSampling method、CFG Scale、Seed値などをいじるのみの基本的な使い方をしていました。
ある意味革命的な変化をもたらした拡張機能「controlnet」ですが、最近になって、ふと浮かんだ疑問。。。
Colab上でcontrolnetって動かせるのかな?
自宅のPCで当たり前のように使用しているcontrolnetですが、「Colab無料版でcontrolnetは使えるのか?」がどうしても気になってしまったので、急遽確かめてみることに。
果たして、Colab無料版でcontrolnetを使えるのか?
実際に検証してみたいと思います。
1.Google Colabとは
Google Colabとは、無料(諸々の制限あり)でGPUやTPUが使用でき、Pythonや機械学習、深層学習の環境を使えるサービスです。
Stable Diffusionを動かすためには、GPUとそれなりのメモリ容量が必要ですが、このColabを使えばGPUとそれなりのメモリ容量が提供されるのでStable Diffusionを動かせる訳です。
Colabには、以下の4つのサービスが用意されています。
- 無料版
- Pay As You Go(有料版:1,179円)
- Pro(有料版:月額1,179円)
- Pro+(有料版:月額5,767円) ※2023年5月31日現在
下に行くほど、提供される環境やできることが増えていきます。
有料版になるとGPUを選択できるようになります。また、Pro以上になるとハイメモリが使用でき、より多くのメモリを使用できます。
今回は、無料版とProの環境で検証してみました。
Colab料金プランの詳細については、こちらをご覧ください。→ Colab料金プラン
2.ColabでStable Diffusion WebUIを動かすには
ColabでStable Diffusion WebUIを動かすためには、WebUI本体、拡張機能、モデル、VAEなどをColab内にインストール・ダウンロードする必要があります。
Colab Notebookに必要なコードを入力して実行するのですが、コードが分からなくても大丈夫です。
あらかじめWebUIを動かすために必要なコードが入力されているNotebookが数多く公開されています。
簡単なものから複雑なものまで多種多様です。
Githubで公開されているNootobookのリンクを記載しておきます。
今回の検証では、以下の自前で用意した必要最低限のコードを使用します。
拡張機能は、controlnetの他にmov2movを組み込みます。
Notebookに貼り付けるコード①(インストール用コード)
# Googleドライブをマウント
from google.colab import drive
drive.mount('/content/drive')
# pytorch
!pip install lmdb
!pip install torch==2.1.2 torchvision==0.16.2+cu121 torchaudio==2.1.2 torchtext==0.16.2+cpu --index-url https://download.pytorch.org/whl/cu121
!pip install -U xformers --index-url https://download.pytorch.org/whl/cu121
# WebUI
!git clone --branch v1.7.0 https://github.com/AUTOMATIC1111/stable-diffusion-webui
# 拡張機能
%cd /content/stable-diffusion-webui/extensions/
!git clone https://github.com/yfszzx/stable-diffusion-webui-images-browser /content/stable-diffusion-webui/extensions/stable-diffusion-webui-images-browser
!git clone https://github.com/DominikDoom/a1111-sd-webui-tagcomplete /content/stable-diffusion-webui/extensions/a1111-sd-webui-tagcomplete
!git clone https://github.com/Scholar01/sd-webui-mov2mov /content/stable-diffusion-webui/extensions/sd-webui-mov2mov
!git clone https://github.com/Mikubill/sd-webui-controlnet /content/stable-diffusion-webui/extensions/sd-webui-controlnet
# controlnet用モデルファイル
%cd /content/stable-diffusion-webui/extensions/sd-webui-controlnet/models/
!wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1p_sd15_depth.pth
!wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_canny.pth
!wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose.pth
!wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_softedge.pth
!wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15s2_lineart_anime.pth
!wget https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/ip-adapter_sd15.pth
!wget https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/ip-adapter_sd15_plus.pth
# VAEファイル、モデルファイルなど
!wget https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.ckpt -O /content/stable-diffusion-webui/models/VAE/vae-ft-mse-840000-ema-pruned.ckpt
!wget https://huggingface.co/stb/animelike2d/resolve/main/animelike25D_animelike25DV11Pruned.safetensors -O /content/stable-diffusion-webui/models/Stable-diffusion/animelike25D_animelike25DV11Pruned.safetensors
!wget https://huggingface.co/nolanaatama/embeddings/resolve/main/bad-picture-chill-75v.pt -O /content/stable-diffusion-webui/embeddings/bad-picture-chill-75v.pt
Notebookに貼り付けるコード②(起動用コード)
# Stable Doffusion WebUI起動
%cd /content/stable-diffusion-webui
!COMMANDLINE_ARGS="--share --xformers --enable-insecure-extension-access --skip-torch-cuda-test --precision full --no-half" python launch.py
WebUI起動後にMulti controlnetを使用するためにsettingsの変更を行う都合上、インストール用コードとWebUI起動用コードを分けています。
※Mov2Movを動かすため、Stable Diffusion WebUIのバージョンをv1.7.0に設定しています。
※ControlnetやGoogle Colabにインストールされているパッケージなどのアップデートの影響で、ここに記載したコードが使用できなくなる場合があります。予めご了承ください。
3.Colab無料版での検証
まずは、使用できるGPUや割り当てられるメモリ容量が少ない無料プラン相当で検証します。
3-1.ノートブックの設定
無料版で使用できるGPU、メモリは以下の通りです。
GPU:NVIDIA Tesla T4
GPU RAM:15GB
システムRAM:12.7GB
3-2.WebUIのインストールと起動
上記の自前コードのインストール用コードをNotebookに貼り付けてインストール開始。
インストールは、問題なく完了です。
インストールが完了したら起動用コードを実行します。
これも問題なく完了しました。
3-3.Multi controlnet の設定(この作業は不要です)
現在のWebUIで、以下の作業は不要です。
標準設定でMulti Controlnetが使用できます。
WebUI起動後にsettingsタブからcontrolnetの設定を変更し、Multi controlnetにします。手順は以下の通りです。
①画面左列の「controlnet」を選択
②Multi Controlnet:Max models amountを4に変更
③Allow other script to control this extensionをチェック
④Apply settingsをクリック ※Reload UIをクリックしてはダメ
⑤WebUIを閉じる
⑥Colab画面に戻り起動用コードを中断
⑦起動用コードの出力結果を消去
⑧起動用コードを再度実行
⑨WebUIを起動
Multi controlnetが使用できるようになりました。
Multi Controlnet:Max models amountを4に設定したので、Controlnet Unitが0~3の計4つに変更されています。
とりあえず、controlnetを使用せずtxt2imgで2枚づつ(Batch size)2回(Batch count)画像を生成します。
この時のメモリ使用量は、システムRAMが9GB弱、GPU RAMが4GB弱でした。Batch sizeを2に設定し並列処理で画像生成しましたが、全く問題ありません。
3-4. controlnet を使用して画像生成
さて、本題です。controlnet Unitを1つ使用して画像を生成します。
使用したプリプロセッサは、openpose_fullです。
問題なく数秒で生成できました。ちゃんとポーズも取れています。
controlnet Unitを1つ使用した時のメモリ使用量は、先ほどより増えています。GPU RAMの使用量は変わりませんが、先ほどは9GB弱だったシステムRAMの使用量が12GB弱になりました。
では、次にContorolnet Unitを2つ使用して画像を生成します。
1つ目のプリプロセッサは、先ほどと同じopenpose_full。2つ目のプリプロセッサは、cannyを使用してみました。
生成開始から数秒でシステムRAMの使用量が12GBを超えてレッドゾーンに突入してしまいました。その後、メモリ使用量がガクッと減り機能が停止しました。
GPU RAMには、まだ余裕がありますが、システムRAMの容量が不足した様です。
この後、WebUIのインストールと起動を幾度となく繰り返し、プリプロセッサの変更等をしながらcontorolnet Unitを2つ使用した画像生成を試みましたが、結局メモリ不足となり100%の確率で機能が停止しました。
4.Colab Pro(有料版)での検証
続いてColab Pro(有料版)で検証します。ランタイムの仕様で「ハイメモリ」を選択できます。これにより無料版、Pay As You Go版の倍のシステムRAMを使用できます。
GPU:NVIDIA Tesla T4 ←無料版と同じ
GPU RAM:15GB ←無料版と同じ
システムRAM:25.5GB ←無料版の倍!
Colab Proでの検証は、いきなり4つのControlnet Unitで検証します。
使用したプリプロセッサは、以下の通りです。
※Multi controlnetが動くか否かの検証なので使用したプリプロセッサに深い意味はありません。
- openpose_full
- softedge_hed
- canny
- lineart_anime_denoise
結果としては、全く問題なし。
生成された画像の下にopenpose_full、softedge_hed、canny、lineart_anime_denoiseのサムネ画像も表示されています。
システムRAMの使用量は、最高で18GB弱。GPU RAMは、6GB弱でした。
5.mov2movはどうなるか?
4つのControlnet Unitを使い、且つmov2movで動画を生成したらどうなるかについても検証してみました。
検証した動画は、以下のようなものです。
画像サイズ:512×910
フレームレート:30fps
尺:10秒
画像総数:251枚
結果は、全く問題なしです。
下図のようにシステムRAMは、最高で18GB程度。処理中は、13GB程度で安定していました。GPU RAMに関しても8GB程度で安定していました。
6.結論
Colab無料版でもcontrolnetは使用できるが、複数のControlnet Unitを使用するMulti controlnetは厳しい。
Controlnet Unitを1つのみに限定すれば、特に大きな問題もなく画像生成できました。
ただ、Colab無料版、Pay As You Goで使用できる12.7GBのシステムRAMでは限界ギリギリという印象です。
画像生成時にメモリ使用量を抑える技術があるのかもしれませんが、そこまでの技術と知識がない筆者としては、このような結論となりました。
無料版では、使用できるGPUやメモリ容量、安定性、使用できる時間等々の様々な制限があるため、可能であればローカル環境へのインストールをお勧めします。
最後までお読みいただき、ありがとうございました。
コメント
初めまして。
MOV2MOVを利用したく、上記コードをインストールしましたが、
ステイブルディフュージョンが起動しません。
ご教示頂けたら幸いです。
はじめまして。
記事内のコードを変更しましたので、試してみてください。
※多少エラーが出ますが、画像生成可能です。
Mov2Movは、現在のWebUIのバージョン(v1.10.1)では動かないのでv1.7.0(執筆時のバージョン)にダウングレードしています。
記事にも追記しましたが、今後のControlnetやGoogle Colabのパッケージなどのアップデートによって、本記事のコードが使用できなくなる可能性が非常に高いです。
これは定期的に発生するもので、Google Colabの宿命かもしれません。
予めご了承ください。
Mov2Movはアップデートする気配がないので、動画生成は他の拡張機能や動画生成AIを使用した方が良いかもしれませんね。