MarkdownとBullet Journal

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

【高速化】Stable Diffusion web UI : AUTOMATIC1111をGoogle colabで便利に使う

AUTOMATIC1111上でStable / Waifu / Trinartの各モデルを使ってtxt2imgで生成した。プロンプトは cute cat ear maid

2022.11.26追記

この記事の内容は古く、よりシンプルでエラーも出ないcolabノートに対応した下の記事を推奨

programmingforever.hatenablog.com

2022.10.21追記

Stable Diffusion 1.5の一般公開に対応

2022.10.15追記
1. Stable Diffusion web UIのV1.4が登場

AUTOMATIC1111版ではないが簡単に利用できる。但し起動に2倍ほど時間がかかる(10分以上)。利用方法の記事は以下。

programmingforever.hatenablog.com

2. Waifu Diffusion 1.3対応

Waifu Diffusion1.3に合わせて記事を修正。なおcolab無料版でFULLを用いるとGRAMの容量オーバーでエラー停止するので、wd-v1-3-float16.ckptの利用をお勧めする。wd-v1-3-float16.ckptは下のURL先にある「This file is stored with Git LFS . It is too big to display, but you can still download it.」のdownloadをクリックするとダウンロードできる。

wd-v1-3-float16.ckpt · hakurei/waifu-diffusion-v1-3 at main

2022.10.3追記
  1. AUTOMATIC1111がVer1.2になり手順が変更されたため内容を修正。主な変更点としてweb UI(生成画面)が立ち上がった時にユーザー名とパスワードを聞かれるので、オリジナルコードのままならユーザー名:me、パスワード:qwerty で使える。なおこの追加機能は無効にできる。
  2. 処理が高速化され起動まで5分を切る様になった
  3. 人物や動物、アイテムなど特定対象を学習させてその対象を画像生成させる技術のDreamBoostを使うと、モデルに特定対象の学習データをマージした新モデルを作ることができる。その新モデルをAUTOMATIC1111で扱う方法を追記した。DreamBoostの利用説明は以下の記事参照。

programmingforever.hatenablog.com

この記事は前回の続き

前回はGoogle colabにAUTOMATIC1111を導入する方法を解説した。本記事だけでは分からない方は下の前回の記事を先に読んで頂けたらと思う。

今回の記事は前回の内容を改良して、高速化やWaifu Diffusionなどを使う方法をまとめている。

programmingforever.hatenablog.com

想定する読者

モデルをGoogle Driveにコピーして利用する方法の説明記事。想定する読者は以下の通り。

  • Google colabでAUTOMATIC1111を使いたい
  • 起動時間を速くしたい
  • 高負荷なモデルのダウンロード量や時間を削減したい
  • Waifu DiffusionやTrinart Diffusionを使いたい

注意点

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

 

導入①:必要なモデルをダウンロード:

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

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

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をコピー

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をコピー

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をコピー

1-4:DreamBoostで作った新モデル

  • DreamBoostで作った新モデルを格納しているフォルダ名を確認する。
  • 通常は下記のはず(タグ名をhanakoにした場合)
/content/drive/MyDrive/stable_diffusion_weights/hanako/model.ckpt

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

導入②:AUTOMATIC1111用Google colabを編集:

以下の手順で進める。

現在のバージョンはV1.2。StableDiffusionUI-Voldemort V1.2.ipynb

2-1:web UIのサイトにアクセス

github.com

Readme.mdの中の「Installation and Running」の中に、「 Colab, maintained by Akaibu」、があるのでクリックすると Google colabのノートブックが現れる。

Google Colabの初期画面

2-2:編集作業

ノートブックのコードを以下の通り編集する

2-3:Google colabがGoogle driveを扱える様にする

  • 1番のセル(コードブロック、1行目にimport osがある)の下にセルを追加
  • そのセルにGoogle colabがGoolge Driveにアクセス出来る(マウント)コードを記載(下記)
from google.colab import drive
drive.mount('/content/drive')

2-4:モデルをGoogle Driveからcolabにコピー

  • モデルをダウンロード済みなのでモデルをダウンロードするコードを無効化する
  • 4番目のセル「Normal 1.4 model」のダウンロード用のコードは不要なので全て先頭に#を付けてコメント化する
#@title Normal 1.4 model
# get a token from https://huggingface.co/settings/tokens
#user_token = "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" #@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/stable-diffusion-webui/model.ckpt
  • そのすぐ下にセルを追加して、Google driveに保存したモデルをコピーするコードをセルに記載する(下記)
  • Waifu, Trinart, Stable Diffusion, DreamBoost作成モデルをそれぞれ使用する例をまとめて記載するので、この中から使用するものを1つだけ記載する
  • 現段階ではモデル名がmodel.ckptでなければならないため、末尾に下記の様にmodel.ckptを記載する(リネーム機能)

注:下記は例なので自分がダウンロードしたファイル名を正確に入力すること。大文字小文字にも注意。フォルダ構成やフォルダ名を変えた場合もそれを用いること

# Waifu Diffusionのモデルを入れたい場合
!cp /content/drive/MyDrive/model/wifu-v1-3-float16.ckpt  /content/stable-diffusion-webui/model.ckpt

# Trinart Diffusionのモデルを入れたい場合
!cp /content/drive/MyDrive/model/trinart_step60000.ckpt  /content/stable-diffusion-webui/model.ckpt

# Stable Diffusion1.5のモデルを入れたい場合
!cp /content/drive/MyDrive/models/v1-5-pruned-emaonly.ckpt /content/stable-diffusion-webui/model.ckpt

# Stable Diffusion1.4のモデルを入れたい場合
!cp /content/drive/MyDrive/model/sd-v1-4.ckpt  /content/stable-diffusion-webui/model.ckpt

# DreamBoostで作った新モデルを入れたい場合(タグ名がhanakoの場合)
!cp  /content/drive/MyDrive/stable_diffusion_weights/hanako/model.ckpt /content/stable-diffusion-webui/model.ckpt

# NovelAIDIffusionのモデルを入れたい場合
!cp /content/drive/MyDrive/NovelAi/animefull-final-pruned.ckpt /content/stable-diffusion-webui/model.ckpt
!cp /content/drive/MyDrive/NovelAi/animevae.pt /content/stable-diffusion-webui/model.vae.pt

2-5

「hange into Web UI directory and download updates」とあるセルの1行目は不要なので#でコメントアウトする

# %cd stable-diffusion-webui       #でコメントアウトする
!git pull

導入③:AUTOMATIC1111を起動:

1番上のセルから実行する。いきなりエラーが出るがスルーして良い。その他実行の際に色々と注意すべき点があるので困った時は前の記事を参照してほしい。完了したら現れるURLをクリックすると、web UIが別画面で現れる。

新しくweb UI起動時にユーザー名とパスワードを入力するようになったので(ページ公開を想定したものと思われる)、8番目のセル「Launch web ui. You will get a link to nnn.gradio.app, follow it.」のコードの中で記載されている通り、ユーザー名:me、パスワード:qwerty を入力すると使える。このユーザー名とパスワードは自由に編集できる。

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

プロンプト:cute cat ear maid

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

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

 

補足①

AUTOMATIC1111は複数のモデルを入れるとsettingでモデルを切り替えたり混ぜたりする機能が用意されているが、colab版で複数のモデルをロードする方法が不明で、また複数のモデルをロードするとGRAMを圧迫する。

 

補足②:ノートブックを使ってモデルを直接Google DriveにDLする方法

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

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

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

フォルダ名は適当に付けたものなので各自で好きな名前を付けて良い(コードの修正は必要)。またこの例では複数のモデルをダウンロードしているが、Google Drive容量の関係もあってどれか一つだけでも良い

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

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

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

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

1-3a:追加2番目のセル:バグ回避

何故かこのままだとGoogleDriveを認識しない様なので?、単にモデルを格納する先のフォルダの内容を表示するLSコマンドを書く。

!ls /content/drive/MyDrive/models/

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

1-4:3番目のセル:Stable DIffusionのモデルをダウンロードするコードを書く(必要時)

  • 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のモデルは認証が必要なのでトークンを送るコードを記載する(下記)
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/

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

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