見出し画像

Google Colab無料分でStable Diffusion v2-1モデル(768x768)が動作するAUTOMATIC1111版っぽいGUIを作りたかった

供養としての記事。
Colab無料分の環境だと、RAMが足りなくて落ちるんだもん

要約

https://note.com/it_navi/n/n64fd73e6b531  さんの記事で紹介されている、

https://github.com/qunash/stable-diffusion-2-gui のようなものを作りたかった

いきさつ

 休養中に Stable Diffusion などのAI画像生成のトレンドがあることを知って、これはゲーム作成にも使えそう面白そうだと遊びはじめて約一ヶ月。手元に開発環境もお金もないので、10年近く前のノートPCから、Google Colab上でAUTOMATIC1111 web UI を動かしてAI画像生成を試行錯誤しています。利用制限がよくかかるけど、本当にいい時代になった…無料内で使えるTesla T4でも、自前では到底買えないですし…
 そんな中、Stable Diffusion 2.0, 2.1がモデルとともに公開されたので自分でも試してみたかったんです。

Stable Diffusion v2-1モデル(768x768)がロードできない

 いつもの通りColab上のAUTOMATIC1111 web UIからStable Diffusion v2-1モデルを読もうとすると、RAMのゲージが途中で真っ赤になって、そのまま強制終了。そんな… Stable Diffusion v2-1-base モデル(512x512)なら起動できるので、おそらくモデルの容量の問題。
 ソースコードを追って調べたところ、原因がなんとなく分かりました。
このweb UIでは、モデルファイルを一度に読み込んで起動します。このとき、まずCPU側のRAM(ColabではシステムRAM)に全体をロードし、その後GPUに転送されるようです。で、このロード時にCPU側のRAMの限界を超えてしまうのが原因のようです。ちなみに、一度ロードが完了するとRAMは解放されます。

Diffusers なら起動した。なんでや

 ダメ元でというか、Google Colabでも動作するのがStability AI公式の売りでもある(言ってない)のにバージョンを上げたらColabで動作しなくなるようには設計しないだろう、と見込んで、公式が推奨しているDiffusersでの起動を試してみたら、無事に起動して画像まで作れました。なんでや。
 今度はgithubにあるDiffusersのソースからpytorchのソースまで追って調べました。オープンソースってほんと素晴らしい。どうやら、Diffusersはモデルを分割してロードしているため、CPU側のRAMを枯渇させずに済んでいるようです。具体的には、Diffusersが参照するhugging faceのリポジトリでは、vae, unet, text encoder等のサブモデルごとにディレクトリが分かれていて、そのサブモデルを一つずつロードしているようです。
 そのためDiffusersを使えば、無料分のColab環境でも強制終了することなく768x768モデルのStable Diffusionが動作しました。
 ただしノートブックにコードを直に書いて実行したので、プロンプトを調整するだけでも毎回コードを書き換えないといけないです。

やっぱりGUI欲しいよね

 生成画像を見ながらいろいろパラメータをいじっていきたいです。あとパラメータを変えようとしてコードの部分にカーソルが行ったまま打ち込んだりとか時々。不器用なもので。

AUTOMATIC1111 web UI の改造ではダメなんですか

 outpainting, inpaintingなどの編集や、公式のDiffusersにないサンプラーや拡張スクリプトなど魅力的な機能を使いたいんですが、内部がPipelineとSchedulerで組まれてないので、内部に触るのは厳しそう、というか無理だと思いました(ソースを追った感想)。ゼロから実装するのと大差なさそう。

結果

 自分用にAUTOMATIC1111 web UIっぽい外見のGUIを組んで、DiffusersベースでStable Diffusion 2.1 の画像生成を楽しもうと目論みました。
 サーバとして動かすつもりがないのでipywidgetsで組みましたが、外見はともかく、もっとドキュメントが欲しいところ。特にクラスのリファレンスマニュアル。

作ったGUI

セットアップ中。Diffusersをそのまま使うので、モデルとリビジョンを選択してから起動。
コンソール出力をリダイレクトして表示
メインのtxt2imgタブ。本家から機能も見た目もグレードダウン。
画像やサムネイルの保存は右クリックで(ブラウザの機能)
本家にもあるPNG Info機能。PNGファイルに埋め込んだ生成パラメータを確認できる。
この機能だけ別のノートブックに切り出して使うくらい便利

img2img機能は未実装。

 上のスクリーンショットとタイトル画像を作った時に実感したのですが、特に画像一覧のサムネイルに生成パラメータを埋め込んだのが結構便利で、生成画像が分かるパラメータのセーブデータとして使えそうです。ファイルサイズが実画像より格段に小さいのがうれしい。

その後

 改めてColabでAUTOMATIC1111 web UIの起動を試してみたら、RAMがぎりぎりの使用率で踏みとどまって起動、画像生成もOK。なんでや。
 リソースメーターを見ながら何度か再現させてみたところ、ランタイムの接続直後ならRAMの空き具合によってはロードが通るみたいです。今後どうするか微妙な結論。AUTOMATIC1111版を元に分割ロードを実装するのもなぁ…DiffusersベースのGUIも見つかったしなぁ(冒頭)

AUTOMATIC1111 web UI 起動成功時のリソースメータ。システムRAMの使用率がギリギリ
Diffusersベースの自作GUIのリソースメータ。システムRAM使用率のピークは軽減

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