checkpointが読み込めない【バグ:RuntimeError】
記事内容
stable-diffusion-webuiのバージョンを「v1.4.0」に更新後に一部のcheckpointがランタムエラーで読み込めない現象の回避方法を紹介します。
症状
checkpoint(モデル)ファイルを沢山集めていますがstable-diffusion-webuiのバージョンアップ後に、ホンの一部ですがモデルが読み込めない状態に陥りました。
読み込めないcheckpointモデルは「facebombmix_v1.safetensors」と他、数点 ありました。
エラーの症状から説明します。
facebombmixに切り替えようとすると読み込む動作はしますがエラーが出てしまい、切り替え前のcheckpointモデルに戻ってしまいます。
エラーログの一部は以下の通り、(データー量が多くて1/10程度の記載)
Loading weights [aad629159b] from F:\stable-diffusion-webui\models\Stable-diffusion\3D\facebombmix_v1.safetensors
Loading VAE weights found near the checkpoint: F:\stable-diffusion-webui\models\VAE\facebombmix_v1Bakedvae.safetensors
Failed to load checkpoint, restoring previous
Loading weights [07f029f6d1] from F:\stable-diffusion-webui\models\Stable-diffusion\3D\cartoonish_v1.safetensors
Applying attention optimization: Doggettx... done.
changing setting sd_model_checkpoint to 3D\facebombmix_v1.safetensors [aad629159b]: RuntimeError
Traceback (most recent call last):
File "F:\stable-diffusion-webui\modules\shared.py", line 605, in set
self.data_labels[key].onchange()
File "F:\stable-diffusion-webui\modules\call_queue.py", line 13, in f
res = func(*args, **kwargs)
File "F:\stable-diffusion-webui\webui.py", line 226, in <lambda>
shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights()), call=False)
File "F:\stable-diffusion-webui\modules\sd_models.py", line 556, in reload_model_weights
load_model_weights(sd_model, checkpoint_info, state_dict, timer)
File "F:\stable-diffusion-webui\modules\sd_models.py", line 336, in load_model_weights
sd_vae.load_vae(model, vae_file, vae_source)
File "F:\stable-diffusion-webui\modules\sd_vae.py", line 143, in load_vae
_load_vae_dict(model, vae_dict_1)
File "F:\stable-diffusion-webui\modules\sd_vae.py", line 168, in _load_vae_dict
model.first_stage_model.load_state_dict(vae_dict_1)
File "F:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 2041, in load_state_dict
raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
RuntimeError: Error(s) in loading state_dict for AutoencoderKL:
Missing key(s) in state_dict: "encoder.conv_in.weight", "encoder.conv_in.bias", "encoder.down.0.block.0.norm1.weight", "encoder.down.0.block.0.norm1.bias", "encoder.down.0.block.0.conv1.weight", "encoder.down.0.block.0.conv1.bias", "encoder.down.0.block.0.norm2.weight", "encoder.down.0.block.0.norm2.bias", "encoder.down.0.block.0.conv2.weight", "encoder.down.0.block.0.conv2.bias", "encoder.down.0.block.1.norm1.weight", "encoder.down.0.block.1.norm1.bias", "encoder.down.0.block.1.conv1.weight", "encoder.down.0.block.1.conv1.bias", "encoder.down.0.block.1.norm2.weight", "encoder.down.0.block.1.norm2.bias", "encoder.down.0.block.1.conv2.weight", "encoder.down.0.block.1.conv2.bias", "encoder.down.0.downsample.conv.weight", "encoder.down.0.downsample.conv.bias", "encoder.down.1.block.0.norm1.weight", "encoder.down.1.block.0.norm1.bias", "encoder.down.1.block.0.conv1.weight", "encoder.down.1.block.0.conv1.bias", "encoder.down.1.block.0.norm2.weight", "encoder.down.1.block.0.norm2.bias", "encoder.down.1.block.0.conv2.weight", "encoder.down.1.block.0.conv2.bias", "encoder.down.1.block.0.nin_shortcut.weight", "encoder.down.1.block.0.nin_shortcut.bias", "encoder.down.1.block.1.norm1.weight", "encoder.down.1.block.1.norm1.bias", "encoder.down.1.block.1.conv1.weight", "encoder.down.1.block.1.conv1.bias", "encoder.down.1.block.1.norm2.weight", "encoder.down.1.block.1.norm2.bias", "encoder.down.1.block.1.conv2.weight", "encoder.down.1.block.1.conv2.bias", "encoder.down.1.downsample.conv.weight", "encoder.down.1.downsample.conv.bias", "encoder.down.2.block.0.norm1.weight", "encoder.down.2.block.0.norm1.bias",
ネット上の情報
ネツト上にも少ないですが情報は存在します。
この記事に書かれている対策を行いましたが 結論としては上手く機能しませんでした。
内容は以下のデーターをメモ帳に貼り付け、ファイル名を「facebombmix_v1」に、拡張子を「,YAML]に変更してcheckpointモデルと同じフォルダーに保管すると読み込める様に成ると書かれています、ですがこの情報2022年の物ですのでstable-diffusionバージョンアップで対策は行われていると思われます。
model:
base_learning_rate: 1.0e-4
target: ldm.models.diffusion.ddpm.LatentDiffusion
params:
parameterization: "v"
linear_start: 0.00085
linear_end: 0.0120
num_timesteps_cond: 1
log_every_t: 200
timesteps: 1000
first_stage_key: "jpg"
cond_stage_key: "txt"
image_size: 64
channels: 4
cond_stage_trainable: false
conditioning_key: crossattn
monitor: val/loss_simple_ema
scale_factor: 0.18215
use_ema: False # we set this to false because this is an inference only config
unet_config:
target: ldm.modules.diffusionmodules.openaimodel.UNetModel
params:
use_checkpoint: True
use_fp16: True
image_size: 32 # unused
in_channels: 4
out_channels: 4
model_channels: 320
attention_resolutions: [ 4, 2, 1 ]
num_res_blocks: 2
channel_mult: [ 1, 2, 4, 4 ]
num_head_channels: 64 # need to fix for flash-attn
use_spatial_transformer: True
use_linear_in_transformer: True
transformer_depth: 1
context_dim: 1024
legacy: False
first_stage_config:
target: ldm.models.autoencoder.AutoencoderKL
params:
embed_dim: 4
monitor: val/rec_loss
ddconfig:
#attn_type: "vanilla-xformers"
double_z: true
z_channels: 4
resolution: 256
in_channels: 3
out_ch: 3
ch: 128
ch_mult:
- 1
- 2
- 4
- 4
num_res_blocks: 2
attn_resolutions: []
dropout: 0.0
lossconfig:
target: torch.nn.Identity
cond_stage_config:
target: ldm.modules.encoders.modules.FrozenOpenCLIPEmbedder
params:
freeze: True
layer: "penultimate"
ハードの状態
checkpointモデルは (2,082,643KB)意外と大きなデーターですPythonの使用メモリー不足を疑いましたが物理メモリー量の半分50%程度ですので問題は無いようです。
stable-diffusionはVRAMを使うので物理メモリー量は対して問題になりません、分かっては居たのですが念のためです。
改善方法
説明でネタバレしてますが、問題なのは「facebombmix_v1.safetensors」のファイル名です。「f]の文字なのか「facebombmix」全体が問題なのか原因は定かでは有りませんがファイル名を崩してやれば問題は解決します。
「facebombmix_v1.safetensors」の頭の「f」の文字を消す、又は 「1_facebombmix_v1.safetensors」の様に最初に「1_」を加えて「f」が先頭にならない様にすると読み込まれる様になります。
原因が分かれば簡単に対応できますが、原因の特定に苦戦してしまいました。
恐らくface(フェイス)と言う単語がプログラム上で使われており、ファイル名を習得した時点でエラーを誘発させたのではないのかと思います。顔・手・足など良く使われる単語のファイル名はエラーになる可能性が高いかもしれません。