diff --git a/modules/lora/lora_apply.py b/modules/lora/lora_apply.py index 7164543d1..3f2468727 100644 --- a/modules/lora/lora_apply.py +++ b/modules/lora/lora_apply.py @@ -134,7 +134,11 @@ def network_add_weights(self: Union[torch.nn.Conv2d, torch.nn.Linear, torch.nn.G new_weight = model_weights.to(devices.device) + lora_weights.to(devices.device) except Exception as e: shared.log.warning(f'Network load: {e}') - new_weight = model_weights + lora_weights # try without device cast + if 'The size of tensor' in str(e): + shared.log.error(f'Network load: type=LoRA model={shared.sd_model.__class__.__name__} incompatible lora shape') + new_weight = model_weights + else: + new_weight = model_weights + lora_weights # try without device cast weight = torch.nn.Parameter(new_weight.to(device), requires_grad=False) if weight is not None: if not bias: diff --git a/modules/lora/networks.py b/modules/lora/networks.py index a36ba5631..5aa15fce0 100644 --- a/modules/lora/networks.py +++ b/modules/lora/networks.py @@ -33,7 +33,7 @@ def network_activate(include=[], exclude=[]): pbar = nullcontext() applied_weight = 0 applied_bias = 0 - device = devices.device if shared.opts.lora_apply_gpu or shared.opts.diffusers_offload_mode == 'none' else devices.cpu + device = devices.device if shared.opts.lora_apply_gpu or (shared.opts.diffusers_offload_mode == 'none') or (shared.sd_model_type == 'sd') else devices.cpu with devices.inference_context(), pbar: wanted_names = tuple((x.name, x.te_multiplier, x.unet_multiplier, x.dyn_dim) for x in l.loaded_networks) if len(l.loaded_networks) > 0 else () applied_layers.clear() @@ -95,7 +95,7 @@ def network_deactivate(include=[], exclude=[]): modules[name] = list(component.named_modules()) active_components.append(name) total = sum(len(x) for x in modules.values()) - device = devices.device if shared.opts.lora_apply_gpu else devices.cpu + device = devices.device if shared.opts.lora_apply_gpu or (shared.opts.diffusers_offload_mode == 'none') or (shared.sd_model_type == 'sd') else devices.cpu if len(l.previously_loaded_networks) > 0 and l.debug: pbar = rp.Progress(rp.TextColumn('[cyan]Network: type=LoRA action=deactivate'), rp.BarColumn(), rp.TaskProgressColumn(), rp.TimeRemainingColumn(), rp.TimeElapsedColumn(), rp.TextColumn('[cyan]{task.description}'), console=shared.console) task = pbar.add_task(description='', total=total) diff --git a/modules/sd_detect.py b/modules/sd_detect.py index 99c12c828..5cda1350a 100644 --- a/modules/sd_detect.py +++ b/modules/sd_detect.py @@ -24,29 +24,29 @@ def detect_pipeline(f: str, op: str = 'model', warning=True, quiet=False): elif (size >= 316 and size <= 324) or (size >= 156 and size <= 164): # 320 or 160 warn(f'Model detected as VAE model, but attempting to load as model: {op}={f} size={size} MB') guess = 'VAE' - elif (size >= 4970 and size <= 4976): # 4973 - guess = 'Stable Diffusion 2' # SD v2 but could be eps or v-prediction - # elif size < 0: # unknown - # guess = 'Stable Diffusion 2B' - elif (size >= 5791 and size <= 5799): # 5795 - if op == 'model': - warn(f'Model detected as SD-XL refiner model, but attempting to load a base model: {op}={f} size={size} MB') - guess = 'Stable Diffusion XL Refiner' - elif (size >= 6611 and size <= 7220): # 6617, HassakuXL is 6776, monkrenRealisticINT_v10 is 7217 + elif (size >= 2002 and size <= 2038): # 2032 + guess = 'Stable Diffusion 1.5' + elif (size >= 3138 and size <= 3142): #3140 guess = 'Stable Diffusion XL' elif (size >= 3361 and size <= 3369): # 3368 guess = 'Stable Diffusion Upscale' elif (size >= 4891 and size <= 4899): # 4897 guess = 'Stable Diffusion XL Inpaint' - elif (size >= 9791 and size <= 9799): # 9794 - guess = 'Stable Diffusion XL Instruct' - elif (size > 3138 and size < 3142): #3140 - guess = 'Stable Diffusion XL' + elif (size >= 4970 and size <= 4976): # 4973 + guess = 'Stable Diffusion 2' # SD v2 but could be eps or v-prediction + elif (size >= 5791 and size <= 5799): # 5795 + if op == 'model': + warn(f'Model detected as SD-XL refiner model, but attempting to load a base model: {op}={f} size={size} MB') + guess = 'Stable Diffusion XL Refiner' elif (size > 5692 and size < 5698) or (size > 4134 and size < 4138) or (size > 10362 and size < 10366) or (size > 15028 and size < 15228): guess = 'Stable Diffusion 3' - elif (size > 18414 and size < 18420): # sd35-large aio + elif (size >= 6611 and size <= 7220): # 6617, HassakuXL is 6776, monkrenRealisticINT_v10 is 7217 + guess = 'Stable Diffusion XL' + elif (size >= 9791 and size <= 9799): # 9794 + guess = 'Stable Diffusion XL Instruct' + elif (size >= 18414 and size <= 18420): # sd35-large aio guess = 'Stable Diffusion 3' - elif (size > 20000 and size < 40000): + elif (size >= 20000 and size <= 40000): guess = 'FLUX' # guess by name if 'instaflow' in f.lower():