MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

【改訂Akaibu1.3】 colabでAUTOMATIC1111を便利に使う

colab ノートAkaibu1.3対応

簡単かつエラーが出なくなった新しいcolabノートが利用出来るので、そちらをベースに記事を書き直した。またモデルやVAEファイルなどを動的に切り替え可能とすべく、正規の場所に配置する内容に改訂した。

想定する読者

  • Google colabでAUTOMATIC1111を使いたい
  • 起動時間を速くしたい
  • モデルのダウンロード量や時間を削減したい
  • Waifu DiffusionやTrinart Diffusionなど色々なモデルを使いたい
  • 複数のモデルやVAEなどを動的に切り替えたい

注意点

  • Google colab proまたはpro+の利用を推奨。5GBを超えるモデルの場合、colab無料版ではメモリ不足によるエラーが発生する場合がある
  • Google Driveの容量確保。それぞれモデルの容量は3~7GB程度あるため保存領域が必要
  • NSFWフィルターが最初から外れている。リスクのある画像作成を避けたい方はセッティングでNSFWフィルターをONにできる

利用別に4つの方法を記載

  1. モデルをサイトからDLして実行する(最も時間がかかる、GoogleDriveの保存量は最も少ない)
  2. 実行一式を保存して再開する様に実行する(最も高速、GoogleDriveの保存量を一番使う)
  3. モデルをGoogleDriveからコピーして実行する(次に高速、GoogleDriveの保存量をモデル分だけ使う)
  4. モデルをサイトから直接GoogleDriveにコピー(モデル格納専用)

1はcolabノートのAkaibu1.3での使用方法を記載する。

2はcolab上に展開したファイルをGoogleDriveに保存することで、あたかも自分のPCで使う感覚でAUTOMATIC1111を高速起動出来る様になる(RAMへのロード時間は必要)。ただしこの方法はStable DiffusionやAUTOMATIC1111に必要な各モジュールを保存するため、かなりの容量が必要となる。使用するモデルが少しならこれでも良いが、数十のモデルを使い分けする様な場合はGoogleDriveの容量を圧迫しかねない。

そこで3は、利用したいモデルをあらかじめ自分のGoogleDriveに保存しておくことで、サイトからDLする通信量や時間を短くすることができる。

またサイトにあるモデルを一旦ローカルPCにダウンロードしてからGoogleDriveにアップロードするモデルの格納手順に対して、4はサイトから直接GoogleDriveにモデルをダウンロードする方法を解説する。この方法であればPCとクラウド間の通信がほとんど無くなり、作業時間も半分以下になる。

それでは以下、順に説明する。なお修正コードは記事の最後にまとめている。

①モデルをサイトからDLして実行する

1-1 colabのノートを開く

下記のAkaibu1.3のノートを開く

Google Colab

以前とは異なり、2つのコードセルの実行だけで動く様になった。エラーも出ない。

1-2 使いたいモデルに変更する

このノートはStable Diffusion1.5 モデルが使える記載になっている。2番目のセルのwget部を変更することでWaifu Diffusionなど他のモデルも使える。

!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
#@title SD1.5
# get a token from https://huggingface.co/settings/tokens
user_token = "" #@param {type:"string"}
user_header = f"\"Authorization: Bearer {user_token}\""
!wget --header={user_header} https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt -O /content/stable-diffusion-webui/model.ckpt

※Stable Diffusion1.5までのモデルを利用する際は5行目のuser_token, 6行目のuser_headerが必要 ※Waifu Diffusionなどは5-6行目は不要(残していても問題ない) ※7行目のhttps://****.ckptを利用したいモデルがある箇所のURLに書き換える

1-3 順に実行

2つのコードセルを順に実行すればAUTOMATIC1111が起動する。この利用方法で特に問題なければこのまま1を利用してもよい。

 

②colabの実行一式を保存して次回再開して実行

通常はcolab上にAUTOMATIC1111をcloneするが、そのclone先をGoogleDriveに変更して保存し、その保存した状態から起動する方法は最速となる。但しAUTOMATIC1111一式+そこにセットしたモデル分だけドライブのディスク容量を食う点に注意。記事が長くなるためこの方法は別記事でまとめた。

programmingforever.hatenablog.com    

③モデルをGoogleDriveからコピーして実行する

あらかじめGoogleDriveに保存していたモデルをコピーすることで高速起動する方法。多数のモデルを使いたい場合はおそらく一番リーズナブルな方法ではないかと思われる。

3-1 あらかじめモデルをGoogleDriveに保存する

使いたいモデルをサイトからGoogleDriveに保存する方法を記載する。なお無駄なくサイトから直接GoogleDriveにコピーできる方法を最後に記載した(4番目)。

ここではGitHubからのモデルデータを一旦PCに保存してからGoogle Driveにコピーする方法を説明する。とりあえず有名な3モデルのダウンロード方法を全て記載したが、1つだけでも良いし他のモデルを追加してもよい。

なお慣れた方には別のノートブックを作成してGitHubからGoogle Driveに直接ダウンロードする方法の方が高速かつ無駄な通信を避けられるのでおすすめ。方法はこの記事の最後に追記した。

3-1-1:Waifu 1.3 のモデルをGoogle Driveに保存する
  • Waifu Diffusion1.3 モデルを提供するサイト(下のURL)をクリック

hakurei/waifu-diffusion-v1-3 · Hugging Face

  • 画面にある下記のいずれかを選択

    • Float 16 EMA Pruned
    • Float 32 EMA Pruned
    • Float 32 Full Weights
  • お薦めはFloat 16 EMA Pruned。容量が少なくGoogle colabの無料版でも動作すると思う

  • 選んだ先にある「This file is stored with Git LFS . It is too big to display, but you can still download it.」のdownloadをクリックするとダウンロードを開始する
  • (Fullを選ぶと7GBもあるのでかなり時間がかかる)
  • ダウンロードフォルダにwd-v1-3-float16.ckptがあることを確認
  • Google Driveに「model」フォルダを追加、その中にダウンロードしたwd-v1-3-float16.ckptをコピー
3-1-2:Trinart V2 のモデルをGoogle Driveに保存する
  • Trinart Diffusion V2モデルを提供するサイト(下のURL)をクリック

naclbit/trinart_stable_diffusion_v2 at main

  • 画面の中の trinart_step60000.ckpt をクリック(他のステップ数のものでもよい)
  • するとダウンロードを開始するのでしばらく待つ(2.4GB)
  • ダウンロードフォルダにtrinart_step60000.ckptがあることを確認
  • Google Driveの「model」フォルダに移動(または追加)し、そこにダウンロードしたtrinart_step60000.ckptをコピー
3-1-3:Stable 1.4/1.5のモデルをGoogle Driveに保存する
Stable Diffusion1.5 モデルを提供するサイト(下のURL)をクリック

runwayml/stable-diffusion-v1-5 at main

  • 初訪問の場合、認証を最初に行う(認証ボタンをクリック、無い場合は承認済み)
  • 画面の中の Download the weightsの中のv1-5-pruned-emaonly.ckpt をクリック
  • するとダウンロードを開始するのでしばらく待つ(3.7GB)
  • ダウンロードフォルダに選んだ`v1-5-pruned-emaonly.ckptがあることを確認
  • Google Driveの「model」フォルダに移動(または追加)し、そこにダウンロードした`v1-5-pruned-emaonly.ckptをコピー
Stable Diffusion1.4 モデルを提供するサイト(下のURL)をクリック

CompVis/stable-diffusion-v-1-4-original · Hugging Face

  • 初訪問の場合、認証を最初に行う(認証ボタンをクリック、無い場合は承認済み)
  • 画面の中の Download the weightsの中のsd-v1-4.ckptsd-v1-4-full-ema.ckpt をクリック
  • するとダウンロードを開始するのでしばらく待つ(3.7GB)
  • ダウンロードフォルダに選んだSD-v***.ckptがあることを確認
  • Google Driveの「model」フォルダに移動(または追加)し、そこにダウンロードしたSD-v***.ckptをコピー
3-1-4:DreamBoostで作った新モデル
  • DreamBoostで作った新モデルを格納しているフォルダ名を確認する。
  • 通常は下記のはず(タグ名をhanakoにした場合)
/content/drive/MyDrive/stable_diffusion_weights/hanako/model.ckpt

ここまでの作業で、自分のGoogle Driveにいつでも取り出せるモデルが配置できたので次に進む。

3-2 ノートにGoogleDriveマウントを追加

  • 最初にcolabのAUTOMATIC1111:Akaibuのノートを開く(下記リンク)。

Google Colab

  • 1番目のコードセルの上にコードセルを追加する(セルのライン上にマウスを移動すると「+コード」と出るのでそれを選択)
  • 追加したコードセルに下記のコードを追記
from google.colab import drive
drive.mount('/content/drive')

これでGoogleDriveのファイルにアクセスできる様になる。

3-3 ノートのwgetコマンドを無効にする

モデルをサイトからロードするための5-7行の頭に#を着けてコメントアウトする(GoogleDriveのモデルを使うため不要)

!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
#@title SD1.5
# get a token from https://huggingface.co/settings/tokens
#user_token = "" #@param {type:"string"}
#user_header = f"\"Authorization: Bearer {user_token}\""
#!wget --header={user_header} https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt -O /content/stable-diffusion-webui/model.ckpt

3-4 GoogleDriveからモデルをコピーするコマンドを追加

AUTOMATIC1111のフォルダにモデルとVAEをコピーする。複数のモデルの切替やVAEの切替、モデルのマージも可能になっている。

  • 前記のコードセルの下側に新たなコードセルを追加
  • そこにコピーコマンドを追記
  • 利用やマージしたいモデルは全て/content/stable-diffusion-webui/models/Stable-diffusion/フォルダにコピーする
  • VAEは全て/content/stable-diffusion-webui/models/VAE/フォルダにコピーする
  • ファイル名は変更しない(ファイル名を見てモデルを切り替えるため)
  • (下記にサンプルとしてよく利用されるモデルの例を記載、いずれかを選択)

例として、Elysium_Anime_V2モデルとデリダモデルの2つとWaifuのVAEをコピーする場合を示す。

#!cp /content/drive/MyDrive/models/Elysium_Anime_V2.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/derrida_final.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/

同様によく利用されているモデルの例を示す。

# Waifu Diffusion1.3のモデルを使う場合
!cp /content/drive/MyDrive/models/wifu-v1-3-float16.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/

# Trinart Diffusion2.0のモデルを使う場合
!cp /content/drive/MyDrive/models/trinart_step60000.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/

# Stable Diffusion1.5のモデルを使う場合
!cp /content/drive/MyDrive/models/v1-5-pruned-emaonly.ckpt   /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/vae-ft-mse-840000-ema-pruned /content/stable-diffusion-webui/models/VAE/

# DreamBoostで作った新モデルを使う場合(タグ名がhanakoの場合)
!cp  /content/drive/MyDrive/stable_diffusion_weights/hanako/model.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/vae-ft-mse-840000-ema-pruned /content/stable-diffusion-webui/models/VAE/

# NovelAIDIffusionのモデルを使う場合
!cp /content/drive/MyDrive/models/animefull-final-pruned.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/animevae.pt /content/stable-diffusion-webui/models/VAE/

# Anything3.0のモデルを使う場合
!cp /content/drive/MyDrive/models/Anything-V3.0.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/stable-diffusion-webui/models/VAE/

# EimisAnimeDiffusionのモデルを使う場合
!cp /content/drive/MyDrive/models/EimisAnimeDiffusion_1-0v.ckpt /content/table-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/stable-diffusion-webui/models/VAE/

# Evt_V2のモデルを使う場合
!cp /content/drive/MyDrive/models/evt_v2-ema-pruned.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/stable-diffusion-webui/models/VAE/

# HENTAI Diffusion 17のモデルを使う場合
!cp /content/drive/MyDrive/models/HD-17.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/
※上記のAnything3.0以降のモデルの入手方法:

programmingforever.hatenablog.com

※モデルをマージする方法:

programmingforever.hatenablog.com

※その他Textual Inversionなどのファイルの配置方法:

programmingforever.hatenablog.com

3-5 最初から実行

1番上のセルから実行する。エラーも発生しなくなり一式完了したら現れるURL(ローカルではない2番目の方)をクリックすると、web UIが別画面で起動する。

web UI起動時にユーザー名とパスワードを入力するようになったので(コードでカットも可能)、起動時にユーザー名:me、パスワード:qwerty を入力すると使える。このユーザー名とパスワードは自由に編集できる。

画面はプロンプトにcute cat ear maidを入れて生成した例。

プロンプト:cute cat ear maid

完成したノートブックはいつでも使える様に保存することをお勧めする。

今回の方法であれば、web UIを起動するまでの時間も5分を切る。Google colabでAUTOMATIC1111を運用したい方には是非お勧めしたい。

 

④モデルをサイトから直接GoogleDriveにコピー

サイトにあるモデルをPCを経由せず直接GoogleDriveにダウンロードする方法。この方法であれば、PCにダウンロード&Google Driveにアップロードする通信が不要となり、通信時間の大幅な短縮と通信量の削減が期待できる。またこのノートブックを保存すれば、類似のモデルを保存する際にも役立つ。

4-1:モデル格納用のフォルダを用意する

  • Google Driveにログイン
  • MyDriveの下に「models」フォルダを追加しておく

フォルダ名は適当に付けたものなので各自で好きな名前を付けて良い(コードの修正は必要)

4-2:colabで新規ノートブックを作成

  • Google colabにログイン
  • 新規ノートブックを作成

4-3:1番目のセルを作成:colabがGoogleDriveを使える様にする

  • 1番目のセルに、colabがGoogle Driveにアクセスできる様にマウントする以下のコードを記載
from google.colab import drive
drive.mount('/content/drive')

4-4:2番目のセル:バグ回避

次にすぐにwgetコマンドを実行すると何故かGoogleDriveを認識しない様なので?、単に上記で用意したモデルを格納する先のフォルダの内容を表示するlsコマンドだけを書く。

!ls /content/drive/MyDrive/models/

中にファイルがあれば表示、何も無ければ表示されない(ここでエラーが出なければOK)

4-5:3番目のセル:モデルをダウンロードするコード

  • 3番目のセルに入力:Stable Diffusion 1.4をダウンロードする場合の例:
  • 3番目のセルに、GitHubからstable-diffusion-v-1-4-originalをGoogle Driveの中にダウンロードするコードを作成
  • 注意:あらかじめstable-diffusion-v-1-4-originalのサイトのログインして認証を済ませておく(以下サイト)

CompVis/stable-diffusion-v-1-4-original · Hugging Face

  • Stable Diffusionの1.5までのモデルは認証が必要なのでトークンを送るコードが必要(下記)
# Stable Diffusion1.5までuser_token, user_headerが必要
user_token = "<自分のアクセストークンを入れる>" #@param {type:"string"}
user_header = f"\"Authorization: Bearer {user_token}\""
!wget --header={user_header}  https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt -O /content/drive/MyDrive/models/
  • Waifu Diffusionなどそれ以外のモデルはwgetコードのみで良い
# それ以外のモデルはwgetコードのみでOK(例:Waifu Diffusion1.3 float16)
!wget https://huggingface.co/hakurei/waifu-diffusion-v1-3/blob/main/wd-v1-3-float16.ckpt -O /content/drive/MyDrive/models/

4-6:ノートブックを保存

このノートブックをモデル保存用としてstore_modelなどの名前で保存すると、次回以降も簡単に保存できる

 

まとめ:③のコード一式

# ①GoogleDriveをマウントする
from google.colab import drive
drive.mount('/content/drive')
# ②実行コードのロード (wgetなど不要な3行目以降を割愛)
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
# ③GoogleDriveからモデルやVAEをコピー
!cp /content/drive/MyDrive/models/wd-v1-3-float16.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/trinart_step60000.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/
# ④実行コマンド
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py

 

まとめ:④のコード一式

# ①GoogleDriveをマウントする
from google.colab import drive
drive.mount('/content/drive')
# ②バグ回避でlsコマンド
!ls /content/drive/MyDrive/models/
# サイトにあるモデルを直接GoogleDriveにダウンロード
# Stable Diffusion1.5まではuser_token, user_headerが必要、それ以外は1-2行目不要
user_token = "<自分のアクセストークンを入れる>" #@param {type:"string"}
user_header = f"\"Authorization: Bearer {user_token}\""
!wget --header={user_header}  https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt -O /content/drive/MyDrive/models/