From d833b853ffc3111e9fa6bb3408dcffad39aebeda Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 15 Sep 2023 13:41:56 -0400 Subject: [PATCH] downgrade diffusers --- CHANGELOG.md | 5 +++++ modules/processing_diffusers.py | 12 ++++++++++-- modules/prompt_parser_diffusers.py | 3 ++- modules/sd_models.py | 2 ++ requirements.txt | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1137f59c9..dd92b2c7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log for SD.Next +## Update for 2023-09-15 + +Downgrade of `diffusers` to 0.20.2 due to critical issue with model offloading +This means that new model **Wuerstchen** is not supported until diffusers issue is resolved + ## Update for 2023-09-13 Started as a mostly a service release with quite a few fixes, but then... diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index 8ef2fe638..94a3a88be 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -187,8 +187,13 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro negative_embed = None negative_pooled = None prompts, negative_prompts, prompts_2, negative_prompts_2 = fix_prompts(prompts, negative_prompts, prompts_2, negative_prompts_2) - if shared.opts.prompt_attention in {'Compel parser', 'Full parser'} and 'StableDiffusion' in model.__class__.__name__: - prompt_embed, pooled, negative_embed, negative_pooled = prompt_parser_diffusers.compel_encode_prompts(model, prompts, negative_prompts, prompts_2, negative_prompts_2, is_refiner, kwargs.pop("clip_skip", None)) + parser = 'Fixed attention' + if shared.opts.prompt_attention != 'Fixed attention' and 'StableDiffusion' in model.__class__.__name__: + try: + prompt_embed, pooled, negative_embed, negative_pooled = prompt_parser_diffusers.compel_encode_prompts(model, prompts, negative_prompts, prompts_2, negative_prompts_2, is_refiner, kwargs.pop("clip_skip", None)) + parser = shared.opts.prompt_attention + except Exception as e: + shared.log.error(f'Prompt parser: {e}') if 'prompt' in possible: if hasattr(model, 'text_encoder') and 'prompt_embeds' in possible and prompt_embed is not None: if type(pooled) == list: @@ -244,7 +249,10 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro if 'negative_pooled_prompt_embeds' in clean: clean['negative_pooled_prompt_embeds'] = clean['negative_pooled_prompt_embeds'].shape if torch.is_tensor(clean['negative_pooled_prompt_embeds']) else type(clean['negative_pooled_prompt_embeds']) clean['generator'] = generator_device + clean['parser'] = parser shared.log.debug(f'Diffuser pipeline: {model.__class__.__name__} task={sd_models.get_diffusers_task(model)} set={clean}') + # components = [{ k: getattr(v, 'device', None) } for k, v in model.components.items()] + # shared.log.debug(f'Diffuser pipeline components: {components}') return args def recompile_model(hires=False): diff --git a/modules/prompt_parser_diffusers.py b/modules/prompt_parser_diffusers.py index 57cbf7f17..4e1c8da05 100644 --- a/modules/prompt_parser_diffusers.py +++ b/modules/prompt_parser_diffusers.py @@ -179,6 +179,7 @@ def compel_encode_prompt( return prompt_embed, positive_pooled, negative_embed, negative_pooled # neither base+sdxl nor refiner+sdxl - positive, negative = compel_te1(prompt), compel_te1(negative_prompt) + positive = compel_te1(prompt) + negative = compel_te1(negative_prompt) [prompt_embed, negative_embed] = compel_te1.pad_conditioning_tensors_to_same_length([positive, negative]) return prompt_embed, None, negative_embed, None diff --git a/modules/sd_models.py b/modules/sd_models.py index 81df6963a..951c1217a 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -762,6 +762,8 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No diffusers_load_config.pop('safety_checker', None) diffusers_load_config.pop('requires_safety_checker', None) diffusers_load_config.pop('load_safety_checker', None) + diffusers_load_config.pop('config_files', None) + diffusers_load_config.pop('local_files_only', None) shared.log.debug(f'Setting {op}: pipeline={sd_model.__class__.__name__} config={diffusers_load_config}') # pylint: disable=protected-access except Exception as e: shared.log.error(f'Diffusers failed loading model using pipeline: {checkpoint_info.path} {shared.opts.diffusers_pipeline} {e}') diff --git a/requirements.txt b/requirements.txt index 67aad81ef..d926ae426 100644 --- a/requirements.txt +++ b/requirements.txt @@ -47,7 +47,7 @@ requests==2.31.0 tqdm==4.66.1 accelerate==0.20.3 opencv-python-headless==4.7.0.72 -diffusers==0.21.1 +diffusers==0.20.2 einops==0.4.1 gradio==3.43.2 huggingface_hub==0.17.1