Colab1111でGoogleドライブからモデルを読み込む

Last-modified: 2024-01-15 (月) 18:15:09

新しくColab版の導入方法を書いたので、こちらも新しく編集しておきます。
見てない人は→Colab版導入の方法

今回の場合はGoogle driveをColabにマウントして、そこからモデルデータをダウンロードして使えるようにするためのものです。

モデルデータのダウンロード

まず使用したいモデルデータを、予めGoogle driveに入れておきます。
新しくフォルダを作って、そのフォルダに好きな名前(なるべく英語のほうが良い)を付けてフォルダの中にモデルデータをいれてください。
ここではフォルダ名を「Model」とします。
あ、モデルデータの名前もなるべく英語にするのを忘れずに。
そして、同じフォルダの中に複数のモデルデータを入れて読み込むことができるらしいので、容量に空きがある人は活用してみてください。
Colab版導入の方法の中にも書きましたが、7GB越えのモデルデータは読み込めなくて落ちるらしいです。対策を練っています。

コードのコピー

保存出来たら、Colab版導入で書いたコードを使用していきます。
まず、左上の「+コード」を追加してください。
追加したら、作ったコードの下に新しく細長い四角の枠が出てきたと思います。
その四角の枠の右に小さい正方形の枠が9個あると思います。
その小さい正方形の枠の、「↑」を押してください。
そうすると、細長い四角の枠が作ったコードの上に移動したと思います。
そしたら、このコードを入力してください。

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

こちらはGoogle drive内のデータを、Colabで使えるようにマウントするためのコードです。
※もし、ほかのアカウントの共有フォルダで使おうとしてる人は注意です。自分がやった限り、共有フォルダでの使用はできないらしいです。自分のdrive内に保存しましょう。
コードを入力出来たら左にある、白丸に三角のボタンがあるのでそこを押してください。
そしたら、「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」と出てくると思います。そしたら、「Google driveに接続」を押してください。
そしたら、新しいウィンドウがでて、アカウント選択の欄が出ると思います。
枠の中にあるアカウントを選択してください。
「Google Drive for desktop が Google アカウントへのアクセスをリクエストしています」と出ると思います。
下にスクロールして、「許可」を押してください。
そして、

Mounted at /content/drive

と、出ると思います。
こちらの文字が出たらマウント成功です。

起動コマンドの追加

マウントができたら作っていたコードのほうに移ります。
一番下に、

!python launch.py --share --xformers --no-half-vae

の、文字があると思います。
「--no-half-vaeの後ろにに新しく、

--ckpt-dir /content/drive/MyDrive/Model

と追加します。
こうなれば良いです。

!python launch.py --share --xformers --no-half-vae --ckpt-dir /content/drive/MyDrive/Model

ちなみに、ここで使っている--ckpt-dir…というコードは、Google driveにあるフォルダを指定したコードです、
もし、「Model」の名前が違う人なら、

--ckpt-dir /content/drive/MyDrive/「名前」

「名前」の所に、指定した名前を入力すれば良いです。

そして、起動の時間です。
Google driveからモデルデータを持ってくるので、時間がかかるかもしれないです。

あとは、
Running on public URL: https:000000000000000000.gradio.live
 ※0のところは例です。本来なら、英数字が色々混ざってるURLです。
ただ現在の状況だとAnything V3が選択されてる状態なので、左上の選択するモデルからもう片方のモデルを選択してください。
driveにあるモデルデータを選択したときコード側で、

Loading weights…

との表示が出ると思います。
そして、

Weights loaded.

との表示が出たら読み込みが完了したので、存分に絵を作っていきましょう!

おまけ(driveからVAEを読み込む方法)

こちらは、下にある古い情報を少し改変して作ったものになります。
もしかしたら非対応…?後で検証してみます。

例で使うVAEは○○.ckpt、使用フォルダは上で作った同じフォルダ、「Model」を使って行きます。
Google driveのフォルダ、「Model」内にvaeを入れていきます。
入れ終わったら、先ほどのコード、

!python launch.py --share --xformers --no-half-vae --ckpt-dir /content/drive/MyDrive/Model

の最後のところに、

--vae-path /content/drive/MyDrive/Model/○○.ckpt

と、入力してください。
こうなれば、OKです。

!python launch.py --share --xformers --no-half-vae --ckpt-dir /content/drive/MyDrive/Model --vae-path /content/drive/MyDrive/Model/○○.ckpt

これでVAEが使えるようになりますが、UI上でのSetting項目でVAEを選択しておいてください。
一応VAEの設定場所を記しておきます。
UI開いた→Settings→Stable Diffusion→SD VAE→○○.ckpt
選択したら、「Apply settings」を押してください。
UI側では、「Apply settings」の下に文字がうじゃうじゃ出てきたらVAEの切り替えが終了した合図です。
コード側では、

VAE weights loaded.

と出たら切り替え完了です。

長文章、お疲れさまでした。

古めの情報

古いほうを一応起こしておきます。見たい人は見てね

その1、Googleドライブにckptファイルを保管する [#w0f67108]
保存する場所は任意ですが、今回はドライブに「SDM」という名前のフォルダを作成し、そこへckptファイルを保管します。
例として「animefp.ckpt」という名前のモノとします。
また、同様にvaeも読み込む事が可能なので、「animefp.vae.ckpt」を読み込むとします。
尚、vaeは専用の起動引数「--vae-path」を使用し直接vae.ptファイルを読み込むことが可能です。
余談ですが、ckptファイル等はファイル名に日本語が使用されていても認識し使用可能でした。

その2、Googleドライブを連携させる [#sb765924]
左上「+コード」を押す。
すると

Adapted from: https://colab.research.google.com/drive/1AfAmwLMd_Vx33O9IwY2TmO9wKZ8ABRRa

の文章の下に一つコードブロックが作られる。
そこへ下記のコードをコピペし、

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

[▶]で実行する。
別ウィンドウが開き
「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」⇒Googleドライブに接続

「アカウントの選択」

「Google Drive for desktop が Google アカウントへのアクセスをリクエストしています」⇒許可
とする。
実行完了後には

Mounted at /content/drive

と出るはず。

その3、起動時に引数を指定する [#o6f951cf]
初期状態はおそらく下記の様になっているでしょう。

!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py

それを、下記の状態に書き換えます。

!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty --ckpt-dir /content/drive/MyDrive/SDM" REQS_FILE="requirements.txt" python launch.py

「--ckpt-dir」でckptの置き場所(読み込み先)が指定されます。
※半角全角の間違いやスペースなど注意
※もちろんUSERNAMEやPASSWORDは自分で別のモノを指定しよう。

Python 3.7.14 (default, Sep  8 2022, 00:06:44)
[GCC 7.5.0]
Commit hash: cccc5a20fce4bde9a4299f8790366790735f1d05
Installing requirements for Web UI
Launching Web UI with arguments: --share --gradio-debug --gradio-auth me:qwerty --ckpt-dir /content/drive/MyDrive/SDM
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
making attention of type 'vanilla' with 512 in_channels
Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
making attention of type 'vanilla' with 512 in_channels
Downloading: 100% 939k/939k [00:00<00:00, 8.19MB/s]
Downloading: 100% 512k/512k [00:00<00:00, 5.57MB/s]
Downloading: 100% 389/389 [00:00<00:00, 520kB/s]
Downloading: 100% 905/905 [00:00<00:00, 1.28MB/s]
Downloading: 100% 4.41k/4.41k [00:00<00:00, 3.77MB/s]
Downloading: 100% 1.59G/1.59G [00:26<00:00, 63.9MB/s]
Loading weights [925997e9] from /content/drive/MyDrive/SDM/animefp.ckpt
Loading VAE weights from: /content/drive/MyDrive/SDM/animefp.vae.pt
Applying cross attention optimization (Doggettx).
Model loaded.
Loaded a total of 0 textual inversion embeddings.
Embeddings:
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://b62ae1a0f217a48f.gradio.app

This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces

の様になり、vaeとckptが両方読み込まれました。


またvaeファイルを直接指定する場合は

!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty --ckpt-dir /content/drive/MyDrive/SDM" --vae-path /content/drive/MyDrive/SDM/123vae.pt" REQS_FILE="requirements.txt" python launch.py

googleドライブのSDMフォルダにある「123vae.pt」ファイルを指定し読み込ませる場合の例です。
「--vae-path」でvaeの置き場所(読み込み先フォルダ)のvaeファイルを直接指定します。

その4、2つ以上のモデルを切り替えるも可能です。 [#y6b632e0]
同じように「SDM」フォルダにさえ保存していれば、webui起動後左上のmodel選択にて別のモデルを選択することも可能です。

例として「Lain-LD.ckpt」をいれ、「animefp.ckpt」を読み込み起動後に「Lain-LD.ckpt」読み込んだ場合には

Python 3.7.14 (default, Sep  8 2022, 00:06:44)
[GCC 7.5.0]
Commit hash: cccc5a20fce4bde9a4299f8790366790735f1d05
Installing requirements for Web UI
Launching Web UI with arguments: --share --gradio-debug --gradio-auth me:qwerty --ckpt-dir /content/drive/MyDrive/SDM
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
making attention of type 'vanilla' with 512 in_channels
Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
making attention of type 'vanilla' with 512 in_channels
Downloading: 100% 939k/939k [00:00<00:00, 3.09MB/s]
Downloading: 100% 512k/512k [00:00<00:00, 1.69MB/s]
Downloading: 100% 389/389 [00:00<00:00, 437kB/s]
Downloading: 100% 905/905 [00:00<00:00, 994kB/s]
Downloading: 100% 4.41k/4.41k [00:00<00:00, 4.01MB/s]
Downloading: 100% 1.59G/1.59G [00:25<00:00, 67.5MB/s]
Loading weights [925997e9] from /content/drive/MyDrive/SDM/animefp.ckpt
Loading VAE weights from: /content/drive/MyDrive/SDM/animefp.vae.pt
Applying cross attention optimization (Doggettx).
Model loaded.
Loaded a total of 0 textual inversion embeddings.
Embeddings:
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://0dec677db40148b5.gradio.app

This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces
Loading weights [e3dedcc4] from /content/drive/MyDrive/SDM/Lain-LD.ckpt
Global Step: 498209
Applying cross attention optimization (Doggettx).
Weights loaded.

とColab上の画面に出るはずです。

ここで注意点
モデルをwebui上で選択すると
Colab上では

Loading weights [925997e9] from /content/drive/MyDrive/SDM/モデル名.ckpt

と出ます。この段階ではまだ読み込み中であり、
「Weights loaded.」の文字が出ると読み込みが完了となるので、それが表示された後にGenerateしましょう。

コメント

  • google drive上にwebui,モデルVAEを配置して、「!COMMANDLINE_ARGS="--share --gradio-debug --xformers" REQS_FILE="requirements.txt" python launch.py」を実行しようとしましたがエラーとなってしまいました。エラー内容は「RuntimeError: Couldn't checkout commit 5b3af030dd83e0297272d861c19477735d0317ec for K-diffusion.Command: "git" -C "repositories/k-diffusion" checkout 5b3af030dd83e0297272d861c19477735d0317ecError code: 1stdout: <empty>stderr: error: Your local changes to the following files would be overwritten by checkout: train.pyPlease commit your changes or stash them before you switch branches.」です。k-diffusionのクローンに問題があるよ、って書いてるように見えるのですが解決方法を知っている方はいらっしゃらないでしょうか? or 同じエラー起こしている方いらっしゃいますか? -- awk? 2023-02-22 (水) 23:52:17
  • 同じ現象を起こしています。解決策はまだわかっていません。何か方法はありましたか? -- 2023-02-27 (月) 13:15:33
  • 英語分からないなりに調べてみるに、「K-diffusion」というモデル内に存在する「train.py」というファイルが古いみたいです。gitで引っ張ってきても元のサイトに格納されている「train.py」が古いみたいなのでこちらからはどうすることもできそうにないかもです。回避方法も現時点ではわかりません……… -- awk? 2023-02-27 (月) 22:55:23
  • 原因が(正確ではないかもしれませんが)わかりました。原因はドライブ上で保存してあるファイルと、「launch.py」の156行目(git_clone関数)で引っ張ってくるファイルが競合してしまうことみたいです。とりあえずの回避策として「launch.py」を編集し、156行目の「run(f'"{git}" -C "{dir}" checkout {commithash}', f"Checking out commit for {name} with hash: {commithash}...", f"Couldn't checkout commit {commithash} for {name}")」をコメントアウト(先頭に「#」を付ける)してみてください。詳細は「git clone pull 違い」などで調べてみてください -- awk? 2023-03-01 (水) 21:58:19
  • 時間かかるけど書き直すの楽しい -- 書き直した人? 2023-03-31 (金) 15:06:02
  • k-diffusion の件は launch.py の257行目の K_DIFFUSION_COMMIT_HAS の値を "5b3af030dd83e0297272d861c19477735d0317ec" から "2b0653b" に書き換えれば回避はできた。 -- 2023-04-01 (土) 20:41:09
  • ファイルを一時退避したら一応動きました。git checkoutしたいけど変更済みファイルがあるから、commitかstashしろとのことだったので、エラーに出た、train.pyとcrop_align_face.pyを逃してlaunch.pyしました。 -- nanas3? 2023-04-14 (金) 10:23:14
  • ! wget --save-cookies cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=ファイルID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/Code: \1\n/p'一行開ける ! wget --load-cookies cookies.txt 'https://docs.google.com/uc?export=download&confirm=CODE_FROM_ABOVE&id=ファイルID' -O /content/stable-diffusion-webui/models/Stable-diffusion/ファイル名.safetensors このコードでファイルIDとそのファイルへのアクセス権限さえあればいけるはず。 -- 2023-06-11 (日) 09:39:04
  • ! wget --save-cookies cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=ファイルID' -O /content/stable-diffusion-webui/models/Lora/ファイル名.safetensors Loraなどの軽いファイルならこんな感じでいけるはず。 -- 2023-06-11 (日) 12:34:35
  • 最新のstable deffusion web uiでも同様のエラーが発生しているけど、launch.pyのファイルを確認してみたら48行しかない。どうやってこれを修正すれば良いんだ? -- 2023-12-27 (水) 23:09:38
  • 1.6.0では「launch.py」の内容が変わっていて、/modules/launch_utils.py の181行目あたりに "run_git(dir, name, f'checkout {commithash}', f"Checking out commit for {name} with hash: {commithash}...", f"Couldn't checkout commit {commithash} for {name}", live=True)" があるのでコメントアウト(先頭に「#」を付ける)してみてください。 -- 2024-01-15 (月) 00:00:00
  • 最新版1.7.0では/modules/initialize_util.py #187行目をコメントアウト:run_git(dir, name, f'checkout {commithash}'...。続いて/repositories/k-diffusion/k_diffusion/layers.py の#4行目をコメントアウト:from dctorch import functional as df -- 2024-01-15 (月) 00:18:00