From 882da270e9cf9e0c96e5fc74d6662b866c5dae1b Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 13 Nov 2023 18:42:02 -0500 Subject: [PATCH] add SD_LORA_DIFFUSERS --- .../Lora/extra_networks_lora.py | 2 ++ extensions-builtin/Lora/networks.py | 23 ++++++++++++++++++- modules/generation_parameters_copypaste.py | 1 - modules/shared.py | 1 - 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/extensions-builtin/Lora/extra_networks_lora.py b/extensions-builtin/Lora/extra_networks_lora.py index 708e1f1e5..40ac8b909 100644 --- a/extensions-builtin/Lora/extra_networks_lora.py +++ b/extensions-builtin/Lora/extra_networks_lora.py @@ -64,6 +64,8 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork): self.active = False def deactivate(self, p): + if shared.backend == shared.Backend.DIFFUSERS: + shared.sd_model.unload_lora_weights() if not self.active and getattr(networks, "originals", None ) is not None: networks.originals.undo() # remove patches if networks.debug: diff --git a/extensions-builtin/Lora/networks.py b/extensions-builtin/Lora/networks.py index 3f83e7f3f..974d9faac 100644 --- a/extensions-builtin/Lora/networks.py +++ b/extensions-builtin/Lora/networks.py @@ -74,6 +74,24 @@ def assign_network_names_to_compvis_modules(sd_model): sd_model.network_layer_mapping = network_layer_mapping +def load_diffusers(name, network_on_disk): + t0 = time.time() + cached = lora_cache.get(name, None) + if debug: + shared.log.debug(f'LoRA load: name={name} file={network_on_disk.filename} {"cached" if cached else ""}') + if cached is not None: + return cached + if shared.backend != shared.Backend.DIFFUSERS: + return None + shared.sd_model.load_lora_weights(network_on_disk.filename) + net = network.Network(name, network_on_disk) + net.mtime = os.path.getmtime(network_on_disk.filename) + lora_cache[name] = net + t1 = time.time() + timer['load'] += t1 - t0 + return net + + def load_network(name, network_on_disk): t0 = time.time() cached = lora_cache.get(name, None) @@ -142,7 +160,10 @@ def load_networks(names, te_multipliers=None, unet_multipliers=None, dyn_dims=No net = None if network_on_disk is not None: try: - net = load_network(name, network_on_disk) + if shared.backend == shared.Backend.DIFFUSERS and os.environ.get('SD_LORA_DIFFUSERS', None): + net = load_diffusers(name, network_on_disk) + else: + net = load_network(name, network_on_disk) except Exception as e: shared.log.error(f"LoRA load failed: file={network_on_disk.filename}") if debug: diff --git a/modules/generation_parameters_copypaste.py b/modules/generation_parameters_copypaste.py index 3d6090398..7aba397a6 100644 --- a/modules/generation_parameters_copypaste.py +++ b/modules/generation_parameters_copypaste.py @@ -247,7 +247,6 @@ infotext_to_setting_name_mapping = [ ('VAE', 'sd_vae'), ('Parser', 'prompt_attention'), ('Color correction', 'img2img_color_correction'), - ('LoRA method', 'diffusers_lora_loader'), # Samplers ('Sampler Eta', 'scheduler_eta'), ('Sampler ENSD', 'eta_noise_seed_delta'), diff --git a/modules/shared.py b/modules/shared.py index c571c299d..17ce2bd54 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -347,7 +347,6 @@ options_templates.update(options_section(('diffusers', "Diffusers Settings"), { "diffusers_model_load_variant": OptionInfo("default", "Diffusers model loading variant", gr.Radio, {"choices": ['default', 'fp32', 'fp16']}), "diffusers_vae_load_variant": OptionInfo("default", "Diffusers VAE loading variant", gr.Radio, {"choices": ['default', 'fp32', 'fp16']}), "custom_diffusers_pipeline": OptionInfo('', 'Load custom Diffusers pipeline'), - "diffusers_lora_loader": OptionInfo("diffusers" if cmd_opts.use_openvino else "sequential apply", "Diffusers LoRA loading variant", gr.Radio, {"choices": ['diffusers', 'sequential apply', 'merge and apply']}), "diffusers_eval": OptionInfo(True, "Force model eval"), "diffusers_force_zeros": OptionInfo(True, "Force zeros for prompts when empty"), "diffusers_aesthetics_score": OptionInfo(False, "Require aesthetics score"),