見出し画像

素人がGoogle ColabでStable Diffusionを動かしてみる話(その2)

こちらの続き。

前回挙げたデメリットがなんとか解消できないものか。
すでに拡張機能やLoRAは幾つか仕込まれているわけだから、そのコマンド部分を真似ればできるはずだと思うのだが・・・
参考にさせていただいたのはこちら。

前回の記事(その1)で拾ってきたコードをベースに改造するので、ベースが違うため、そのまんま同じというわけにはいかないですが、基本的な考え方が同じなのと、丁寧な解説なので、見ておくと勉強になります。

それでは本論。
あ、前回の繰り返しですが、ここから先は素人故に用語を含め間違いがあるかもしれないことはご容赦の上で。

1.やりたいこと

今回の改造で追加したいのはこちら。

  • 拡張機能を追加する

  • 複数モデルを選択できるようにする

  • VAEやLoRA、Styleを追加する

  • 生成画像を一括ダウンロードする

2.googleドライブの下準備

今回やることは、基本的にgoogleドライブにいろんなファイルを置いて、それを読込ながらStable Diffusionを起動する、というもの。
特にモデルなんかは数ギガになるし、生成した画像ファイルの保存先にもなるので、その1で触れたようにGoogleドライブに課金して、容量をアップしたのはそのため。
そのあたりは個々人のGoogleドライブの空き容量次第ということで。

とりあえず、モデルファイルなどの保存用フォルダをわかりやすく作っておく。今回自分はマイドライブの下に"\_SD"というフォルダを作ってその下に、"model","lora","vae","tags","file","etc"というフォルダを作成。

あと、その1でドライブにコピーした"anything_5_webui_colab.ipyndのコピー”をGoogleドライブの”Colab Notebooks"から開いておく。
ただ、その1では"lite"のボタンを押して開いたものなので、拡張機能の”ControlNet”も使いたい場合は"stable"のボタンで開いたものをドライブにコピーして使ってください。
これで下準備は完了です。

3.拡張機能を追加する

追加したい拡張機能は3つ。
・sdweb-easy-prompt-selector(よく使うプロンプトを登録しておける)
・sd-dynamic-prompts(複数枚作成するとき、プロンプトをランダム化)
・sd-webui-train-tools(LoRA学習用)

まずはコードをよく見てみると、以下の"extensions"を含むあたりがそれっぽい。(水色のラインが引かれているところ)

その一文の左側前半のURLはWebUIのExtensions>installedにある前半部分(”install from url”でインストールする際に指定するやつ)と一致する。

つまり、コマンドの構成としては"インストールの命令”・”インストール元”・”インストール先”と推測。インストール先のフォルダ名は、自分の場合はローカルにStable Diffusionの環境があるので、そこと合わせながら書けるからよいが、Colabだけで環境構築する場合、決められたフォルダ名を指定しなければならないのか、ここに書いたフォルダ名が単純にインストール先になるだけなのかは不明。知識不足で済みません。

とりあえず今回は、"%cd /content/stable-diffusion-webui"の前に以下を追加

!git clone https://github.com/blue-pen5805/sdweb-easy-prompt-selector.git /content/stable-diffusion-webui/extensions/sdweb-easy-prompt-selector/
!git clone 	https://github.com/adieyal/sd-dynamic-prompts.git /content/stable-diffusion-webui/extensions/sd-dynamic-prompts/
!git clone 	https://github.com/liasece/sd-webui-train-tools /content/stable-diffusion-webui/extensions/sd-webui-train-tools/

こんな感じになればOKかと。

4.複数モデルを選択できるようにする

ほとんど始めにに参考としてご紹介したサイトのままで恐縮ですが・・・
手順としては、
(1)下準備で作成した、googleドライブの"\_SD\model\"フォルダ
 (名称は任意)にモデルファイルをコピー。
(2)googleドライブを接続するコマンドを追加
(3)googleドライブからColabにモデルをコピーするコマンドを追加

(1)のモデルの入手についてはご紹介したサイト、もしくはその他ググってみてください。(雑ですみません)
(2)まずはgoogleドライブを接続するコードを追加します。
もともとコードが書かれていたところの最上部中央辺りにカーソルをあてると、以下の様に「+コード」と「+テキスト」と表示されるので、「+コード」を選択。

出てきたセルに以下のコードをコピペしておきます。

from google.colab import drive
drive.mount('/content/drive')

(3)については、もともとのコードの下から4行目が、”AnythingV5V3”をダウンロードしているコードらしく。

拡張機能と同様、コマンドの作りとしては、インストールの命令”・”インストール元”・”インストール先”の並びっぽい。
ローカル環境で複数モデルを使用している人はわかると思うが、いつものRoLA格納フォルダと同じ。つまり、複数個モデルを入れておけば、Colab環境でも、切替ながら使用できるだろう、というのは推測は容易になり立つ。なので、同様にダウンロードしてくるコマンド文をコピペして、複数行にすれば複数個のモデルを切替ながら使えるようになるらしい。

ただ、ダウンロードしてくるよりは、Googleドライブに保存しておいたものを読み込む方が速い(ような気がする)。
ということで、googleドライブから、Colab環境にコピーするコマンドがこちら。例は"chilloutmix"。

!cp /content/drive/MyDrive/_SD/model/chilloutmix_NiPrunedFp32Fix.safetensors  /content/stable-diffusion-webui/models/Stable-diffusion/

左辺の"/content/gdrive/MyDrive/"以降は、実際に保存しているフォルダ・ファイル名を指定のこと。

3つモデルを追加するとこんな感じ。”anythingV5”のダウンロードをしない場合は、行頭に"#" を入れておくとその行のコマンドが無効になる。
ただし、増やせば増やすだけ起動に時間がかかるので注意。

5.VAEやLoRA、Styleを追加する

ここまで書くともう想像できると思うが、VAEやLoRAについても、モデル同様、googleドライブに保存していたものを、Colab環境にコピーしてやればいい、ということ。VAE、LoRAはそれぞれ、以下のフォルダに。
”/content/stable-diffusion-webui/models/VAE/”
”/content/stable-diffusion-webui/models/Lora/”
自分が追加した拡張機能”easy-prompt-selector"のタグファイルは
”/content/stable-diffusion-webui/extensions/sdweb-easy-prompt-selector/tags”に。
プロンプトを保存しておく”style.csv”は”/content/stable-diffusion-webui/”に(ただ、これはColab上では保存しておけないので、ローカルで作成したものをアップするだけ)。
”!cp 「コピー元ファイル」 「コピー先フォルダ」”というコマンドでGドライブからコピーが可能になる。
今回の自分の修正は最終的にこんな感じ。

6.生成画像を一括保存する

最後に、生成画像を一括保存するコードを追加。
最初のGoogleドライブ接続とは逆に、最下部の中央辺りでカーソルを合わせると出てくる、「+コード」をクリックして、以下のコードを貼る。参考にさせていただいたサイトにたどり着けず・・・誠に申し訳ない。

# ダウンロードしたいフォルダを zip 圧縮する
!zip -r /content/drive/MyDrive/_SD/file/download.zip /content/stable-diffusion-webui/outputs

# 圧縮した zip ファイルをダウンロードする
#from google.colab import files
#files.download("/content/drive/MyDrive/_SD_Model/file/download.zip")

前段はoutputsフォルダを全部ZIPファイル化して、Googleドライブに保存が可能。Googleドライブからあらためてダウンロードするのが面倒であれば、下2行の行頭の#を削除し、有効化してやれば、自動的にダウンロードする。
ただ、ダウンロードの時間もコンピューティングユニットは消費されていくので、少しでも節約したければ、このままでよいかと。

7.実行する

これで、コマンドが書かれた3つのセルが出来上がったので、順番に実行する。
1つめのgoogleドライブの接続を実行すると、Googleアカウント等が聞かれるので、選択してOKを。完了したら次に進む。
2つめは読み込むモデル等の量によって実行時間が変わると思うが、ひたすら”Public WebUI Colab URL: https://*******.live”のリンクが出るまで待つ。途中で、Colabから以下のメッセージが出ることもあると思うが、無視で。ちなみに上で作った1モデルダウンロード、3モデルコピーのものが使用可能になるまで、13分程度。
リンクをクリックすると、Stable diffusionのWebUIが立ち上がる。

3つめは、画像生成が終わって「今日の作業は終わり~」というときに。
2つめのセルの停止ボタンを押した後、完全にセッションを閉じる前に、実行。
ZIP作成が完了したら、その1で書いたように、確実にセッションを閉じる・・・という感じ。

とりあえず、これで自分好みの環境でColabで作業ができるはず。
あとは、100コンピューティングユニットでどのくらい遊べるものか・・・という感じ。
次はLoRA作成にチャレンジしてみよう!

8.おまけ(ランタイムのタイプ)

自分もきちんと理解できていないがツールバーの「ランタイム」>「ランタイムのタイプ」から「GPUのタイプ」を設定できる。

A100が一番GPUの性能がよい代わりに、コンピューティングユニットの使用率も高い。プロンプトを悩んでいる時間もコンピューティングユニットは消費されるので、ひたすら画像生成するか、悩みながらやるかで切り替える、というのもありだろうが、実は自分の環境では切り替えても、使用率が変わらない。"Pay As You Go"の一回払いきりなので、何を選ぼうが上位のGPUを割り当てて貰えていない、ということではないかと推測しているが、使用率に影響する場合はちょっと気にしながら使った方が良いかもしれない。



この記事が気に入ったらサポートをしてみませんか?