From 085d1da8259ad732e0b06c278061e5310ecec9bd Mon Sep 17 00:00:00 2001 From: Disty0 Date: Sat, 29 Jul 2023 21:01:24 +0300 Subject: [PATCH] Fix force upcast VAE with Diffusers --- modules/sd_models.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/sd_models.py b/modules/sd_models.py index 341083477..f819ea710 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -591,11 +591,6 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No vae = sd_vae.load_vae_diffusers(None, vae_file, vae_source) if vae is not None: diffusers_load_config["vae"] = vae - elif shared.opts.diffusers_vae_upcast != 'default': - # There is no good way to change vae.force_upcast while VAE is loading - # as part of the pipeline or to override it after. - # ?? = True if shared.opts.diffusers_vae_upcast == 'true' else False - shared.log.info(f'Diffusers VAE force upcast ({shared.opts.diffusers_vae_upcast}) is only supported with an explicit VAE.') if not os.path.isfile(checkpoint_info.path): try: @@ -693,6 +688,13 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No else: sd_model.disable_attention_slicing() if hasattr(sd_model, "vae"): + if shared.opts.diffusers_vae_upcast != 'default': + if shared.opts.diffusers_vae_upcast == 'true': + sd_model.vae.config["force_upcast"] = True + sd_model.vae.config.force_upcast = True + else: + sd_model.vae.config["force_upcast"] = False + sd_model.vae.config.force_upcast = False shared.log.debug(f'Diffusers {op} VAE: name={sd_model.vae.config.get("_name_or_path", "default")} upcast={sd_model.vae.config.get("force_upcast", None)}') if shared.opts.cross_attention_optimization == "xFormers" and hasattr(sd_model, 'enable_xformers_memory_efficient_attention'): sd_model.enable_xformers_memory_efficient_attention()