diff --git a/backend/memory_management.py b/backend/memory_management.py index 66f89c07..5f0c8312 100644 --- a/backend/memory_management.py +++ b/backend/memory_management.py @@ -560,6 +560,11 @@ def unload_model_clones(model): def free_memory(memory_required, device, keep_loaded=[], free_all=False): + # this check fully unloads any 'abandoned' models + for i in range(len(current_loaded_models) - 1, -1, -1): + if sys.getrefcount(current_loaded_models[i].model) <= 2: + current_loaded_models.pop(i).model_unload(avoid_model_moving=True) + if free_all: memory_required = 1e30 print(f"[Unload] Trying to free all memory for {device} with {len(keep_loaded)} models keep loaded ... ", end="") diff --git a/modules/sd_models.py b/modules/sd_models.py index 3359603e..76940ecc 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -450,7 +450,7 @@ def reload_model_weights(sd_model=None, info=None, forced_reload=False): def unload_model_weights(sd_model=None, info=None): memory_management.unload_all_models() - pass + return def apply_token_merging(sd_model, token_merging_ratio):