From 03361de9588a948ebcd3f2e8cffbc5155d3489e5 Mon Sep 17 00:00:00 2001 From: Egor Nikolaevsky Date: Sat, 18 Mar 2023 21:28:32 +0500 Subject: [PATCH 1/2] fix out of range with batch size > 1 --- composable_lora.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/composable_lora.py b/composable_lora.py index 6258df1..88ff81d 100644 --- a/composable_lora.py +++ b/composable_lora.py @@ -113,14 +113,16 @@ def lora_forward(compvis_module, input, res): # tensor.shape[1] != uncond.shape[1] cur_num_prompts = res.shape[0] base = (diffusion_model_counter // cur_num_prompts) // num_loras * cur_num_prompts - if 0 <= base < len(prompt_loras): + prompt_len = len(prompt_loras) + if 0 <= base < prompt_len: # c for off in range(cur_num_prompts): - loras = prompt_loras[base + off] - multiplier = loras.get(lora.name, 0.0) - if multiplier != 0.0: - # print(f"c #{base + off} lora.name={lora.name} mul={multiplier}", lora_layer_name=lora_layer_name) - res[off] += multiplier * alpha * patch[off] + if base + off < prompt_len: + loras = prompt_loras[base + off] + multiplier = loras.get(lora.name, 0.0) + if multiplier != 0.0: + # print(f"c #{base + off} lora.name={lora.name} mul={multiplier}", lora_layer_name=lora_layer_name) + res[off] += multiplier * alpha * patch[off] else: # uc if opt_uc_diffusion_model and lora.multiplier != 0.0: From 1936a5a7684eec0e0ab536a0a3155e95d4883259 Mon Sep 17 00:00:00 2001 From: Egor Nikolaevsky Date: Sun, 19 Mar 2023 01:04:50 +0500 Subject: [PATCH 2/2] changed to a clearer fix --- composable_lora.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/composable_lora.py b/composable_lora.py index 88ff81d..93a039c 100644 --- a/composable_lora.py +++ b/composable_lora.py @@ -117,12 +117,14 @@ def lora_forward(compvis_module, input, res): if 0 <= base < prompt_len: # c for off in range(cur_num_prompts): - if base + off < prompt_len: - loras = prompt_loras[base + off] - multiplier = loras.get(lora.name, 0.0) - if multiplier != 0.0: - # print(f"c #{base + off} lora.name={lora.name} mul={multiplier}", lora_layer_name=lora_layer_name) - res[off] += multiplier * alpha * patch[off] + if base + off >= prompt_len: + break + + loras = prompt_loras[base + off] + multiplier = loras.get(lora.name, 0.0) + if multiplier != 0.0: + # print(f"c #{base + off} lora.name={lora.name} mul={multiplier}", lora_layer_name=lora_layer_name) + res[off] += multiplier * alpha * patch[off] else: # uc if opt_uc_diffusion_model and lora.multiplier != 0.0: