ModalでStable Diffusion を使う(2)

2024年10月15日

この記事の情報は2023年10月1日が最終更新日です。
現在Modalはあまり使っていないのですが、情報が少ないため一応公開状態で残してあります。

目次
  • 前回の記事
  • 別のモデルの入れ方
  • 拡張機能の入れ方(日本語化など)
  • VAE、LoRA、TIの入れ方
  • ControlNetの入れ方
  • アップロードしたものを削除したいとき
  • 生成したイラストを削除したいとき

前回の記事

前回の記事の方法でWebUIをインストールしていることを前提としています。前回紹介した参考記事に載っているコードを改変しますので、この記事だけ見ても無意味です。

10/1追記

(1)の記事でコードの修正・追加が必要な胸を更新しました。ので、この記事に書いている行数(画像に載ってるものや「○行目」の記載)がずれていると思います。ご注意ください。

別のモデルの入れ方

WebUIを立ち上げるPythonファイル(stable-diffusion-webui.py)の中に、「モデルのID」という部分があります。ここを使いたいモデルのものに書き換えます。

  model_ids = [
    {
        "repo_id": "gsdf/Counterfeit-V2.5",
        "model_path": "Counterfeit-V2.5.safetensors",
        # "config_file_path": "your_new_model_config_file_path",  # コンフィグファイルがない場合、この行を省略します
    },
]

たとえば「Counterfeit-V2.5」だとこんな感じです。"config_file_path"は無い場合は行頭に#をつけてコメントアウトしておけば大丈夫。

huggingfaceで任意のモデルのページの「Files」に.safetensorsか.ckptがあるのでそれがモデルのデータです。軽量版として「fp16」とファイル名についてるものもあります。内容はあんまり変わらないみたいなのでfp16の方がいいかも。違いを詳しく知りたい方はググってください。

model_ids = [
    {
        "repo_id": "hakurei/waifu-diffusion-v1-4",
        "model_path": "wd-1-4-anime_e1.ckpt",
        "config_file_path": "wd-1-4-anime_e1.yaml",
    },
    {
        "repo_id": "gsdf/Counterfeit-V2.5",
        "model_path": "Counterfeit-V2.5.safetensors",
        # "config_file_path": "your_new_model_config_file_path",  # コンフィグファイルがない場合、この行を省略します
    },
]

こんな風にして一度に複数入れることもできました。

拡張機能の入れ方(日本語化など)

WebUIを立ち上げるPythonファイル(stable-diffusion-webui.py)そのままだと拡張機能を入れることができません。136行目におまじないを追加します。

    prepare_environment()
    # 最初のargumentは無視されるので注意
    sys.argv = shlex.split("--a --gradio-debug --share --xformers --enable-insecure-extension-access")
    start()

セキュリティ的によろしくないらしいので、拡張機能を入れるときだけ追加するようにした方がいいかもしれません。

VAE、LoRA、TIの入れ方

Modalで使えるコマンドは上記リンク先で確認できます。VAE、LoRA、TIを入れるのに必要な部分だけまとめます。

まずVEA、LoRA、TIなどModalにアップロードしたいデータをローカルにダウンロードしてください。

それぞれのコマンドは、そのままコマンドプロンプトに入力します。WebUIを立ち上げている窓ではできないので、新しい窓を開いて入力してください。

10/1追記

volumeではなくnfsを使うようになったみたいです。

VAE

modal volume put stable-diffusion-webui-main "ローカルにあるVAEのパス" models/VAE/
modal nfs put stable-diffusion-webui-main "ローカルにあるVAEのパス" models/VAE/

LoRA

modal volume put stable-diffusion-webui-main "ローカルにあるLoRAのパス" models/Lora/
modal nfs put stable-diffusion-webui-main "ローカルにあるLoRAのパス" models/Lora/

TI

modal volume put stable-diffusion-webui-main "ローカルにあるTIのパス" embeddings/
modal nfs put stable-diffusion-webui-main "ローカルにあるTIのパス" embeddings/

TIって、具体的に言うとEasyNegativeとかのことです。

ControlNetの入れ方

ControlNetはWebUIの拡張機能からインストールしたのち、モデルを持ってくる必要があります。拡張機能のインストール部分はいくらでも情報があるので省きます。

モデルはローカルにダウンロードして、putでアップロードしてもいいんですが、私は二度手間が嫌だったのでstable-diffusion-webui.pyを改変してhuggingfaceから取ってきました。「# 色んなパスの定義」も変えているので注意してください。

# 色んなパスの定義
webui_dir = "/content/stable-diffusion-webui"
webui_model_dir = webui_dir + "/extensions/sd-webui-controlnet/models/"

# モデルのID
model_ids = [
        {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11e_sd15_ip2p.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11e_sd15_shuffle.pth",
    },
                {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11f1e_sd15_tile.pth",
    },
                {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11f1p_sd15_depth.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_canny.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_inpaint.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_lineart.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_mlsd.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_normalbae.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_openpose.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_scribble.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_seg.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15_softedge.pth",
    },
            {
        "repo_id": "lllyasviel/ControlNet-v1-1",
        "model_path": "control_v11p_sd15s2_lineart_anime.pth",
    },
]

↑のコードは1ヶ月以上前なので古いと思います。最新版を確認して、足したり変えたりしてください。ちなみにこれはSD1.5系で使えるモデルなので、SD2系では別のモデルと設定ファイルが必要です。ググってね。

アップロードしたものを削除したいとき

「modal volume ls」でデータの有りかやファイル名を確認して「modal volume rm」で消そう!

「modal nfs ls」でデータの有りかやファイル名を確認して「modal nfs rm」で消そう!

モデル

modal volume ls stable-diffusion-webui-main models/Stable-diffusion/
modal nfs ls stable-diffusion-webui-main models/Stable-diffusion/

これをコマンドプロンプトにいれると、アップロードされてるモデルがずらずら出てくるのでそでれでファイル名を確認してください。

modal volume rm stable-diffusion-webui-main models/Stable-diffusion/モデルのファイル名
modal nfs rm stable-diffusion-webui-main models/Stable-diffusion/モデルのファイル名

rmすると削除されます。

VAE

modal volume ls stable-diffusion-webui-main models/VAE/
modal nfs ls stable-diffusion-webui-main models/VAE/

LoRA

modal volume ls stable-diffusion-webui-main models/Lora/
modal nfs ls stable-diffusion-webui-main models/Lora/

TI

modal volume ls stable-diffusion-webui-main models/embeddings/
modal nfs ls stable-diffusion-webui-main models/embeddings/

生成したイラストを削除したいとき

modal volume rm -r stable-diffusion-webui-main outputs/
modal nfs rm -r stable-diffusion-webui-main outputs/

おわり

終わりです。とりあえずこれで一通りは使えると思います。LoRA学習の方法などちょっと応用的なことについては分かりません。ごめんね。

Modal環境

Posted by 令五