From 9e6fdaa5cca2690abbc29bdbe6662c0d15e5179e Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 28 Sep 2025 09:24:04 -0400 Subject: [PATCH] vae slicing and tiling enabled on low and med vram, off otherwise Signed-off-by: Vladimir Mandic --- modules/processing_vae.py | 4 ++-- modules/sd_hijack_vae.py | 2 +- modules/shared.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/processing_vae.py b/modules/processing_vae.py index aca549a39..933af425f 100644 --- a/modules/processing_vae.py +++ b/modules/processing_vae.py @@ -173,7 +173,7 @@ def full_vae_decode(latents, model): log_debug(f'VAE memory: {shared.mem_mon.read()}') vae_name = os.path.splitext(os.path.basename(sd_vae.loaded_vae_file))[0] if sd_vae.loaded_vae_file is not None else "default" vae_scale_factor = sd_vae.get_vae_scale_factor(model) - shared.log.debug(f'Decode: vae="{vae_name}" scale={vae_scale_factor} upcast={upcast} slicing={getattr(model.vae, "use_slicing", None)} tiling={getattr(model.vae, "use_tiling", None)} latents={list(latents.shape)}:{latents.device}:{latents.dtype} time={t1-t0:.3f}') + shared.log.debug(f'Decode: vae="{vae_name}" scale={vae_scale_factor} upcast={upcast} slicing={getattr(model.vae, "use_slicing", None)} tiling={getattr(model.vae, "use_tiling", None)} latents={list(latents.shape)}:{latents.device} dtype={latents.dtype} time={t1-t0:.3f}') return decoded @@ -221,7 +221,7 @@ def taesd_vae_decode(latents): else: decoded = sd_vae_taesd.decode(latents) t1 = time.time() - shared.log.debug(f'Decode: vae="taesd" latents={latents.shape}:{latents.dtype}:{latents.device} time={t1-t0:.3f}') + shared.log.debug(f'Decode: vae="taesd" latents={latents.shape}:{latents.device} dtype={latents.dtype} time={t1-t0:.3f}') return decoded diff --git a/modules/sd_hijack_vae.py b/modules/sd_hijack_vae.py index edd8427e6..2563ccfed 100644 --- a/modules/sd_hijack_vae.py +++ b/modules/sd_hijack_vae.py @@ -18,7 +18,7 @@ def hijack_vae_decode(*args, **kwargs): latents = args[0].to(device=devices.device, dtype=shared.sd_model.vae.dtype) # upcast to vae dtype res = shared.sd_model.vae.orig_decode(latents, *args[1:], **kwargs) t1 = time.time() - shared.log.debug(f'Decode: vae={shared.sd_model.vae.__class__.__name__} slicing={getattr(shared.sd_model.vae, "use_slicing", None)} tiling={getattr(shared.sd_model.vae, "use_tiling", None)} latents={list(latents.shape)}:{latents.device}:{latents.dtype} time={t1-t0:.3f}') + shared.log.debug(f'Decode: vae={shared.sd_model.vae.__class__.__name__} slicing={getattr(shared.sd_model.vae, "use_slicing", None)} tiling={getattr(shared.sd_model.vae, "use_tiling", None)} latents={list(latents.shape)}:{latents.device} dtype={latents.dtype} time={t1-t0:.3f}') else: res = shared.sd_model.vae.orig_decode(*args, **kwargs) except Exception as e: diff --git a/modules/shared.py b/modules/shared.py index 6f54bff2c..c7d507a9e 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -256,7 +256,7 @@ options_templates.update(options_section(('vae_encoder', "Variational Auto Encod "sd_vae": OptionInfo("Automatic", "VAE model", gr.Dropdown, lambda: {"choices": shared_items.sd_vae_items()}, refresh=shared_items.refresh_vae_list), "diffusers_vae_upcast": OptionInfo("default", "VAE upcasting", gr.Radio, {"choices": ['default', 'true', 'false']}), "no_half_vae": OptionInfo(False if not cmd_opts.use_openvino else True, "Full precision (--no-half-vae)"), - "diffusers_vae_slicing": OptionInfo(True, "VAE slicing", gr.Checkbox), + "diffusers_vae_slicing": OptionInfo(cmd_opts.lowvram or cmd_opts.medvram, "VAE slicing", gr.Checkbox), "diffusers_vae_tiling": OptionInfo(cmd_opts.lowvram or cmd_opts.medvram, "VAE tiling", gr.Checkbox), "diffusers_vae_tile_size": OptionInfo(0, "VAE tile size", gr.Slider, {"minimum": 0, "maximum": 4096, "step": 8 }), "diffusers_vae_tile_overlap": OptionInfo(0.25, "VAE tile overlap", gr.Slider, {"minimum": 0, "maximum": 0.95, "step": 0.05 }),