見出し画像

Diffusers-multifolder形式のモデルをダウンロードしてComfyUIで使用するコマンドを考えて見た@paperspace

表題だけを見ると、分かりにくいかも知れませんが、Huggingfaceを見ていると、civitaiなどにあるのと同じ名前のモデルが公開されていることがあります。
ただ、開いてみると、Stable diffusionで使用している様な「・・・・.safetensors」という1つのファイルからなるものではなくて、いくつかのフォルダに分かれているものが多いです。
この形式はどういったものかというのは、上のサイトに説明がありました。
①Diffusers-multifolder形式のモデル:今回該当するもの
②single-file形式のモデル:Stable diffusionで使用しているいつもの

イメージしやすいように、Diffusers-multifolder形式のモデルの例を挙げておくと以下のようなものになっています。

Paperspaceだと、civitaiより、huggingfaceの方がダウンロード速度が速いこともあり、これをsingle-file形式のモデルにすればよいのでは?という話に行きつきます。

すでにだれかがコマンドを公開してくれていればよいのですが、paperspace民が少ないのか、調べるまでも無い常識的なことなのか、調べてもうまく出てきません。

上のhuggingfaceのサイトを見ていると、下の方に変換用のパイソンコマンドが公開されていました。ここまで行き着くのにもかなり時間がかかりました。。
GPTさんにもhuggingfaceのサイトを読み込ませたりしたのですが、見事にスルーしてくれました。。。。

気を取り直してGPTさんに聞きながら、色々と模索した結果、とりあえずコマンドが出来たので備忘録的に記事にしました。

<コマンドの大きな流れ>

以下の2つを行うことになります。
①モデルが公開されている該当サイトのファイルをダウンロードする
②ダウンロードしたファイル群を統合して、一つのsafetensorファイルに変換する

<モデルのダウンロード>

ダウンロードするのは「text_encorder」「text_encorder_2」「unet」「vae」の4つのフォルダにあるsafetensorファイルになります。
例:ComfyUIの一時ディレクトリにダウンロードするコマンド
これは公開されているポニー系のモデルの一つです。長いですが、フォルダを作って、ファイルをダウンロードしているだけです。

!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder
!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder_2
!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/unet
!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/vae

!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/text_encoder/model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder/model.safetensors
!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/text_encoder_2/model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder_2/model.safetensors
!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/unet/diffusion_pytorch_model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/unet/diffusion_pytorch_model.safetensors
!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/vae/diffusion_pytorch_model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/vae/diffusion_pytorch_model.safetensors

<ダウンロードしたモデルの統合をする>

以下のファイルをnotebooksに配置しておいてからコマンドを実行する

!python /notebooks/convert_diffusers_to_original_sdxl.py --model_path /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl --checkpoint_path /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl.safetensors --use_safetensors --half

以下のような感じのものが出たら、無事に変換されているはず。。。

<いらないファイルを削除する>

このままだと、フォルダにダウンロードしたファイルも、チェックポイントを選ぶ際に選択肢に出てくるので削除しておきます。

import os
import shutil

# 確実にディレクトリを削除
dir_path = "/tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl"
if os.path.exists(dir_path):
    shutil.rmtree(dir_path)

# 削除確認
if not os.path.exists(dir_path):
    print("Directory successfully deleted")
else:
    print("Failed to delete the directory")

<上記の3パートをまとめたコマンド>

import os
import shutil

# 必要なディレクトリを作成してファイルをダウンロード
!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder
!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder_2
!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/unet
!mkdir -p /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/vae

!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/text_encoder/model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder/model.safetensors
!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/text_encoder_2/model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/text_encoder_2/model.safetensors
!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/unet/diffusion_pytorch_model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/unet/diffusion_pytorch_model.safetensors
!wget -nc https://huggingface.co/John6666/maple-mix-pony-v1-sdxl/resolve/main/vae/diffusion_pytorch_model.safetensors -O /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl/vae/diffusion_pytorch_model.safetensors

# モデルの変換
!python /notebooks/convert_diffusers_to_original_sdxl.py --model_path /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl --checkpoint_path /tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl.safetensors --use_safetensors --half

# 確実にディレクトリを削除
dir_path = "/tmp/ComfyUI/models/checkpoints/maple-mix-pony-v1-sdxl"
if os.path.exists(dir_path):
    shutil.rmtree(dir_path)

# 削除確認
if not os.path.exists(dir_path):
    print("Directory successfully deleted")
else:
    print("Failed to delete the directory")

長いですね。
ただ、よく見ると分かりますが、変わるのはモデルの名前的な所だけになります。
これらをいちいち書き換えるのは大変です。

<作成したコマンドを自分で作る方法>

GPTに作ってもらうのが一番楽だと思います。
URLを貼ったら、コードが出てくる感じですね。GPTsを作成しましたが、公開名的なところで、プライベートにしてます。

上のやつを手本にして作ってもらえば良いと思います。

次に汎用的なのは、Pythonコードを使うものですが、私(GPT)の実力だと後一息の所で失敗してしまい、放置してます。
使用頻度が高いものでは無いため、この辺りは個々の努力になるのでしょうか。

今回はComfyUIですが、保存先とか変えればforgeやA1111でも使えるので、有用な方法かと思います。

ちなみに統合するのに1分くらい時間はかかりますので、ダウンロード時間と合わせて少し長くなります。



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