improve lora detection, logging and error handling

This commit is contained in:
Vladimir Mandic
2024-09-26 10:55:27 -04:00
parent b8055d1527
commit d9b594e3a7
3 changed files with 18 additions and 13 deletions
+3 -1
View File
@@ -1,6 +1,6 @@
# Change Log for SD.Next
## Update for 2024-09-24
## Update for 2024-09-26
- **reprocess**
- new top-level button: reprocess your last generated image(s)
@@ -54,6 +54,8 @@
- loras are no longer filtered per detected type vs loaded model type as its unreliable
- loras display in networks now shows possible version in top-left corner
- correct using of `extra_networks_default_multiplier` if not scale is specified
- improve lora base model detection
- improve lora error handling and logging
- setting `lora_load_gpu` to load LoRA directly to GPU
*default*: true unless lovwram
- **huggingface**:
@@ -126,10 +126,10 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork):
names, te_multipliers, unet_multipliers, dyn_dims = self.parse(p, params_list, step)
networks.load_networks(names, te_multipliers, unet_multipliers, dyn_dims)
t2 = time.time()
if len(names) > 0 and step == 0:
if len(networks.loaded_networks) > 0 and step == 0:
self.infotext(p)
self.prompt(p)
shared.log.info(f'Load network: type=LoRA apply={names} patch={t1-t0:.2f} te={te_multipliers} unet={unet_multipliers} dims={dyn_dims} load={t2-t1:.2f}')
shared.log.info(f'Load network: type=LoRA apply={[n.name for n in networks.loaded_networks]} patch={t1-t0:.2f} te={te_multipliers} unet={unet_multipliers} dims={dyn_dims} load={t2-t1:.2f}')
elif self.active:
self.active = False
@@ -156,5 +156,5 @@ class ExtraNetworkLora(extra_networks.ExtraNetwork):
if self.errors:
p.comment("Networks with errors: " + ", ".join(f"{k} ({v})" for k, v in self.errors.items()))
for k, v in self.errors.items():
shared.log.error(f'LoRA errors: file="{k}" errors={v}')
shared.log.error(f'LoRA: name="{k}" errors={v}')
self.errors.clear()
+12 -9
View File
@@ -86,7 +86,7 @@ def load_diffusers(name, network_on_disk, lora_scale=shared.opts.extra_networks_
t0 = time.time()
name = name.replace(".", "_")
#cached = lora_cache.get(name, None)
shared.log.debug(f'Load network: type=LoRA name="{name}" file="{network_on_disk.filename}" type=diffusers scale={lora_scale} fuse={shared.opts.lora_fuse_diffusers}')
shared.log.debug(f'Load network: type=LoRA name="{name}" file="{network_on_disk.filename}" detected={network_on_disk.sd_version} method=diffusers scale={lora_scale} fuse={shared.opts.lora_fuse_diffusers}')
# if cached is not None:
# return cached
if not shared.native:
@@ -101,9 +101,9 @@ def load_diffusers(name, network_on_disk, lora_scale=shared.opts.extra_networks_
pass
else:
if 'The following keys have not been correctly renamed' in str(e):
shared.log.error(f'Load network: type=LoRA file="{network_on_disk.filename}" diffusers unsupported format')
shared.log.error(f'Load network: type=LoRA name="{name}" diffusers unsupported format')
else:
shared.log.error(f'Load network: type=LoRA file="{network_on_disk.filename}" {e}')
shared.log.error(f'Load network: type=LoRA name="{name}" {e}')
if debug:
errors.display(e, "LoRA")
return None
@@ -169,10 +169,13 @@ def load_network(name, network_on_disk) -> network.Network:
else:
net.modules[key] = net_module
if len(keys_failed_to_match) > 0:
shared.log.warning(f'LoRA file="{network_on_disk.filename}" unmatched={len(keys_failed_to_match)} matched={len(matched_networks)}')
shared.log.warning(f'LoRA name="{name}" type={set(network_types)} unmatched={len(keys_failed_to_match)} matched={len(matched_networks)}')
if debug:
shared.log.debug(f'LoRA file="{network_on_disk.filename}" unmatched={keys_failed_to_match}')
shared.log.debug(f'LoRA file="{network_on_disk.filename}" type={set(network_types)} keys={len(matched_networks)}')
shared.log.debug(f'LoRA name="{name}" unmatched={keys_failed_to_match}')
else:
shared.log.debug(f'LoRA name="{name}" type={set(network_types)} keys={len(matched_networks)}')
if len(matched_networks) == 0:
return None
lora_cache[name] = net
t1 = time.time()
net.bundle_embeddings = bundle_embeddings
@@ -184,10 +187,10 @@ def load_networks(names, te_multipliers=None, unet_multipliers=None, dyn_dims=No
if shared.opts.diffusers_offload_mode == "balanced":
sd_models.disable_offload(shared.sd_model)
sd_models.move_model(shared.sd_model, devices.cpu)
networks_on_disk = [available_network_aliases.get(name, None) for name in names]
networks_on_disk: list[network.NetworkOnDisk] = [available_network_aliases.get(name, None) for name in names]
if any(x is None for x in networks_on_disk):
list_available_networks()
networks_on_disk = [available_network_aliases.get(name, None) for name in names]
networks_on_disk: list[network.NetworkOnDisk] = [available_network_aliases.get(name, None) for name in names]
failed_to_load_networks = []
recompile_model = False
if shared.compiled_model_state is not None and shared.compiled_model_state.is_compiled:
@@ -237,7 +240,7 @@ def load_networks(names, te_multipliers=None, unet_multipliers=None, dyn_dims=No
continue
if net is None:
failed_to_load_networks.append(name)
shared.log.error(f'Load network: type=LoRA network="{name}" unknown type')
shared.log.error(f'Load network: type=LoRA name="{name}" detected={network_on_disk.sd_version} failed')
continue
if shared.native:
shared.sd_model.embedding_db.load_diffusers_embedding(None, net.bundle_embeddings)