mirror of
https://github.com/lllyasviel/stable-diffusion-webui-forge.git
synced 2026-04-29 18:51:31 +00:00
Update sd_models.py
This commit is contained in:
@@ -641,53 +641,7 @@ def load_model(checkpoint_info=None, already_loaded_state_dict=None):
|
|||||||
|
|
||||||
|
|
||||||
def reuse_model_from_already_loaded(sd_model, checkpoint_info, timer):
|
def reuse_model_from_already_loaded(sd_model, checkpoint_info, timer):
|
||||||
"""
|
pass
|
||||||
Checks if the desired checkpoint from checkpoint_info is not already loaded in model_data.loaded_sd_models.
|
|
||||||
If it is loaded, returns that (moving it to GPU if necessary, and moving the currently loadded model to CPU if necessary).
|
|
||||||
If not, returns the model that can be used to load weights from checkpoint_info's file.
|
|
||||||
If no such model exists, returns None.
|
|
||||||
Additionaly deletes loaded models that are over the limit set in settings (sd_checkpoints_limit).
|
|
||||||
"""
|
|
||||||
|
|
||||||
already_loaded = None
|
|
||||||
for i in reversed(range(len(model_data.loaded_sd_models))):
|
|
||||||
loaded_model = model_data.loaded_sd_models[i]
|
|
||||||
if loaded_model.sd_checkpoint_info.filename == checkpoint_info.filename:
|
|
||||||
already_loaded = loaded_model
|
|
||||||
continue
|
|
||||||
|
|
||||||
if len(model_data.loaded_sd_models) > shared.opts.sd_checkpoints_limit > 0:
|
|
||||||
print(f"Unloading model {len(model_data.loaded_sd_models)} over the limit of {shared.opts.sd_checkpoints_limit}: {loaded_model.sd_checkpoint_info.title}")
|
|
||||||
model_data.loaded_sd_models.pop()
|
|
||||||
|
|
||||||
if already_loaded is not None:
|
|
||||||
model_data.set_sd_model(already_loaded, already_loaded=True)
|
|
||||||
|
|
||||||
if not SkipWritingToConfig.skip:
|
|
||||||
shared.opts.data["sd_model_checkpoint"] = already_loaded.sd_checkpoint_info.title
|
|
||||||
shared.opts.data["sd_checkpoint_hash"] = already_loaded.sd_checkpoint_info.sha256
|
|
||||||
|
|
||||||
print(f"Using already loaded model {already_loaded.sd_checkpoint_info.title}: done in {timer.summary()}")
|
|
||||||
sd_vae.reload_vae_weights(already_loaded)
|
|
||||||
return model_data.sd_model
|
|
||||||
elif shared.opts.sd_checkpoints_limit > 1 and len(model_data.loaded_sd_models) < shared.opts.sd_checkpoints_limit:
|
|
||||||
print(f"Loading model {checkpoint_info.title} ({len(model_data.loaded_sd_models) + 1} out of {shared.opts.sd_checkpoints_limit})")
|
|
||||||
|
|
||||||
model_data.sd_model = None
|
|
||||||
load_model(checkpoint_info)
|
|
||||||
return model_data.sd_model
|
|
||||||
elif len(model_data.loaded_sd_models) > 0:
|
|
||||||
sd_model = model_data.loaded_sd_models.pop()
|
|
||||||
model_data.sd_model = sd_model
|
|
||||||
|
|
||||||
sd_vae.base_vae = getattr(sd_model, "base_vae", None)
|
|
||||||
sd_vae.loaded_vae_file = getattr(sd_model, "loaded_vae_file", None)
|
|
||||||
sd_vae.checkpoint_info = sd_model.sd_checkpoint_info
|
|
||||||
|
|
||||||
print(f"Reusing loaded model {sd_model.sd_checkpoint_info.title} to load {checkpoint_info.title}")
|
|
||||||
return sd_model
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def reload_model_weights(sd_model=None, info=None, forced_reload=False):
|
def reload_model_weights(sd_model=None, info=None, forced_reload=False):
|
||||||
|
|||||||
Reference in New Issue
Block a user