ModalでStable Diffusion を使う(2)
この記事の情報は2023年10月1日が最終更新日です。
現在Modalはあまり使っていないのですが、情報が少ないため一応公開状態で残してあります。
- 前回の記事
- 別のモデルの入れ方
- 拡張機能の入れ方(日本語化など)
- VAE、LoRA、TIの入れ方
- ControlNetの入れ方
- アップロードしたものを削除したいとき
- 生成したイラストを削除したいとき
前回の記事
前回の記事の方法でWebUIをインストールしていることを前提としています。前回紹介した参考記事に載っているコードを改変しますので、この記事だけ見ても無意味です。
(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を立ち上げている窓ではできないので、新しい窓を開いて入力してください。
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学習の方法などちょっと応用的なことについては分かりません。ごめんね。
ディスカッション
コメント一覧
こちらの記事の方法でcontorlnetを導入したのですが、有効化(enable)のチェックボックスにチェックを入れることができません。enableを選ぼうとすると、その上にカーソルがある時だけカーソルが禁止マークに代わり、クリックが利かなくなります。ちなみに、他のWebサイトの方法でcontrolnetを導入しても同じ症状でした。解決方法をご存じでしたらご教授いただきたいです。
私の環境ではそういう状態にはなったことないですね~
そういう話も見かけたことがないし、解決法はちょっとわかりません。
お役に立てずにすみません。
もし自分ならwebuiを最新にしたり、もしくは安定版に戻したり、どうしてもダメなら環境再構築ですかね…。
令五さん、ご返信ありがとうございます。
先ほど画像生成をしていたところ、以下のようなエラーが出ているのを見つけました。
—–
WARNING – No ControlNetUnit detected in args. It is very likely that you are having an extension conflict.Here are args received by ControlNet: ().
—–
調べてみたところ、
・ControlNetのアップデート
・move2moveの削除?
等の解決策見つかりましたが、どちらも方法がわかりませんでした。
度々申し訳ありませんが、解決策をご存じでしたらお力添えいただいただきたいです。
はるさんこんにちは。
move2moveのことはわからないのですが、
ControlNetのアップデートなら「webui 拡張機能 アップデート」とかで検索すればやり方が出てくると思います。
直るといいですね~