sd-scripts で"RuntimeError: Setting different lr values in different parameter groups is only supported for values of 0" エラーが発生する現象と対処法の紹介です。
sd-scritpsを実行すると、次のエラーが発生します。
いくつかの可能性が考えられますが、よくある原因の一つとして、
Text Encoderの学習率が設定されていない場合があります。
network_train_unet_only
が false に設定されており、テキストエンコーダーの学習を実行する設定ですが、
学習率の設定は、unet_lr = 1
により、U-NETの学習率のみが設定されており、テキストエンコーダーの学習率が設定されていません。[additional_network_arguments]
network_train_unet_only = false
cache_text_encoder_outputs = false
network_module = "networks.lora"
[optimizer_arguments]
optimizer_type = "prodigy"
optimizer_args = ["betas=0.9,0.999", "weight_decay=0"]
unet_lr = 1
network_dim = 16
network_alpha = 1
network_args = ["conv_dim=8"]
lr_scheduler="cosine"
...(以下略)
learning_rate
を設定すると、U-NETとテキストエンコーダーの両方の学習率を設定できます。[additional_network_arguments]
network_train_unet_only = false
cache_text_encoder_outputs = false
network_module = "networks.lora"
[optimizer_arguments]
optimizer_type = "prodigy"
optimizer_args = ["betas=0.9,0.999", "weight_decay=0"]
learning_rate = 1
network_dim = 16
network_alpha = 1
network_args = ["conv_dim=8"]
lr_scheduler="cosine"
...(以下略)
unet_lr
と text_encoder_lr
の2つのパラメーターを設定する方法もあります。[additional_network_arguments]
network_train_unet_only = false
cache_text_encoder_outputs = false
network_module = "networks.lora"
[optimizer_arguments]
optimizer_type = "AdamW"
text_encoder_lr = 5e-4
unet_lr = 1e-3
network_dim = 16
network_alpha = 1
lr_scheduler="cosine"
...(以下略)
tomlファイルを修正してsd-scriptsを実行し、エラーが発生しないことを確認します。