From 9bd66e578ade67dea4055c09d7497baff383c06f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 25 Nov 2023 10:16:03 -0500 Subject: [PATCH] fix prompt padding --- CHANGELOG.md | 2 ++ modules/prompt_parser_diffusers.py | 12 ++++++------ modules/sd_models.py | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a85a6af13..e416db3a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ Note: Release pending `diffusers==0.24` - In *Advanced* params - Allows control of *latent clamping*, *color centering* and *range maximimization* - Supported by *XYZ grid* + - better autodetection of *inpaint* and *instruct* pipelines + - support long seconary prompt for refiner - **General** - log level defaults to info for console and debug for log file - better prompt display in process tab diff --git a/modules/prompt_parser_diffusers.py b/modules/prompt_parser_diffusers.py index 735cf995a..abd06b778 100644 --- a/modules/prompt_parser_diffusers.py +++ b/modules/prompt_parser_diffusers.py @@ -59,9 +59,9 @@ class DiffusersTextualInversionManager(BaseTextualInversionManager): return self.pipe.tokenizer.encode(prompt, add_special_tokens=False) -def encode_prompts(pipeline, prompts: list, negative_prompts: list, clip_skip: typing.Optional[int] = None): - if 'StableDiffusion' not in pipeline.__class__.__name__: - shared.log.warning(f"Prompt parser not supported: {pipeline.__class__.__name__}") +def encode_prompts(pipe, prompts: list, negative_prompts: list, clip_skip: typing.Optional[int] = None): + if 'StableDiffusion' not in pipe.__class__.__name__: + shared.log.warning(f"Prompt parser not supported: {pipe.__class__.__name__}") return None, None, None, None else: prompt_embeds = [] @@ -69,7 +69,7 @@ def encode_prompts(pipeline, prompts: list, negative_prompts: list, clip_skip: t negative_embeds = [] negative_pooleds = [] for i in range(len(prompts)): - prompt_embed, positive_pooled, negative_embed, negative_pooled = get_weighted_text_embeddings(pipeline, prompts[i], negative_prompts[i], clip_skip) + prompt_embed, positive_pooled, negative_embed, negative_pooled = get_weighted_text_embeddings(pipe, prompts[i], negative_prompts[i], clip_skip) prompt_embeds.append(prompt_embed) positive_pooleds.append(positive_pooled) negative_embeds.append(negative_embed) @@ -118,9 +118,9 @@ def prepare_embedding_providers(pipe, clip_skip): def pad_to_same_length(pipe, embeds): device = pipe.device if str(pipe.device) != 'meta' else devices.device try: #SDXL - empty_embed = shared.sd_model.encode_prompt("") + empty_embed = pipe.encode_prompt("") except Exception: #SD1.5 - empty_embed = shared.sd_model.encode_prompt("", device, 1, False) + empty_embed = pipe.encode_prompt("", device, 1, False) empty_batched = torch.cat([empty_embed[0].to(embeds[0].device)] * embeds[0].shape[0]) max_token_count = max([embed.shape[1] for embed in embeds]) for i, embed in enumerate(embeds): diff --git a/modules/sd_models.py b/modules/sd_models.py index e8c98ddbc..42a05e286 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -742,13 +742,13 @@ def set_diffuser_options(sd_model, vae, op: str): sd_model.enable_xformers_memory_efficient_attention() if shared.opts.diffusers_eval: - if hasattr(sd_model, "unet"): + if hasattr(sd_model, "unet") and hasattr(sd_model.unet, "requires_grad_"): sd_model.unet.requires_grad_(False) sd_model.unet.eval() - if hasattr(sd_model, "vae"): + if hasattr(sd_model, "vae") and hasattr(sd_model.vae, "requires_grad_"): sd_model.vae.requires_grad_(False) sd_model.vae.eval() - if hasattr(sd_model, "text_encoder"): + if hasattr(sd_model, "text_encoder") and hasattr(sd_model.text_encoder, "requires_grad_"): sd_model.text_encoder.requires_grad_(False) sd_model.text_encoder.eval()