svdquant and others stuff

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2025-04-17 22:14:11 -04:00
parent 1fd746c75e
commit cbef571f90
7 changed files with 16 additions and 6 deletions
+2
View File
@@ -27,6 +27,7 @@
comma-separate list of regex patterns to skip
- ui display reference models with subdued color
- xyz grid support bool
- do not force gc at end of processing
- **Wiki**
- new Nunchaku page
- updated HiDream, Quantization, NNCF pages
@@ -37,6 +38,7 @@
- SD35 InstantX IP-adapter
- **HunyuanVideo-I2V** with latest transformers
- trace logging
- xyz grid restore settings
## Update for 2025-04-12
+3 -2
View File
@@ -122,8 +122,9 @@ def load_quants(kwargs, repo_id, cache_dir, allow_quant):
else:
shared.log.error(f'Load module: quant=Nunchaku module=transformer repo="{repo_id}" unsupported')
if nunchaku_repo is not None:
shared.log.debug(f'Load module: quant=Nunchaku module=transformer repo="{nunchaku_repo}" precision={nunchaku_precision} attention={shared.opts.nunchaku_attention}')
kwargs['transformer'] = nunchaku.NunchakuFluxTransformer2dModel.from_pretrained(nunchaku_repo, torch_dtype=devices.dtype)
shared.log.debug(f'Load module: quant=Nunchaku module=transformer repo="{nunchaku_repo}" precision={nunchaku_precision} offload={shared.opts.nunchaku_offload} attention={shared.opts.nunchaku_attention}')
kwargs['transformer'] = nunchaku.NunchakuFluxTransformer2dModel.from_pretrained(nunchaku_repo, offload=shared.opts.nunchaku_offload, torch_dtype=devices.dtype)
kwargs['transformer'].quantization_method = 'SVDQuant'
if shared.opts.nunchaku_attention:
kwargs['transformer'].set_attention_impl("nunchaku-fp16")
elif 'transformer' not in kwargs and model_quant.check_quant('Transformer'):
+1 -1
View File
@@ -502,5 +502,5 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
if not p.disable_extra_networks:
shared.log.info(f'Processed: images={len(output_images)} its={(p.steps * len(output_images)) / (t1 - t0):.2f} time={t1-t0:.2f} timers={timer.process.dct()} memory={memstats.memory_stats()}')
devices.torch_gc(force=True, reason='final')
devices.torch_gc(force=False, reason='final')
return processed
+1 -1
View File
@@ -153,7 +153,7 @@ def set_pipeline_args(p, model, prompts:list, negative_prompts:list, prompts_2:t
shared.log.error(f'Prompt parser encode: {e}')
if os.environ.get('SD_PROMPT_DEBUG', None) is not None:
errors.display(e, 'Prompt parser encode')
timer.process.record('encode', reset=False)
timer.process.record('prompt', reset=False)
else:
prompt_parser_diffusers.embedder = None
+2 -2
View File
@@ -2,7 +2,6 @@ import os
import time
import numpy as np
import torch
import torchvision.transforms.functional as TF
from modules import shared, devices, sd_models, sd_vae, sd_vae_taesd, errors
@@ -316,6 +315,7 @@ def vae_decode(latents, model, output_type='np', vae_type='Full', width=None, he
def vae_encode(image, model, vae_type='Full'): # pylint: disable=unused-variable
import torchvision.transforms.functional as f
if shared.state.interrupted or shared.state.skipped:
return []
if not hasattr(model, 'vae') and hasattr(model, 'pipe'):
@@ -323,7 +323,7 @@ def vae_encode(image, model, vae_type='Full'): # pylint: disable=unused-variable
if not hasattr(model, 'vae'):
shared.log.error('VAE not found in model')
return []
tensor = TF.to_tensor(image.convert("RGB")).unsqueeze(0).to(devices.device, devices.dtype_vae)
tensor = f.to_tensor(image.convert("RGB")).unsqueeze(0).to(devices.device, devices.dtype_vae)
if vae_type == 'Full':
tensor = tensor * 2 - 1
latents = full_vae_encode(image=tensor, model=shared.sd_model)
+1
View File
@@ -552,6 +552,7 @@ options_templates.update(options_section(('quantization', "Quantization Settings
"nunchaku_sep": OptionInfo("<h2>Nunchaku Engine</h2>", "", gr.HTML),
"nunchaku_quantization": OptionInfo([], "SVDQuant enabled", gr.CheckboxGroup, {"choices": ["Model", "Transformer", "VAE", "TE", "Video", "LLM", "ControlNet"], "visible": native}),
"nunchaku_attention": OptionInfo(False, "Nunchaku attention", gr.Checkbox, {"visible": native}),
"nunchaku_offload": OptionInfo(False, "Nunchaku offloading", gr.Checkbox, {"visible": native}),
}))
options_templates.update(options_section(('advanced', "Pipeline Modifiers"), {
+6
View File
@@ -36,6 +36,7 @@ class SharedSettingsStackHelper(object):
freeu_b2 = None
freeu_s1 = None
freeu_s2 = None
cfgzero_enabled = None
schedulers_sigma_adjust = None
schedulers_beta_schedule = None
schedulers_beta_start = None
@@ -53,6 +54,7 @@ class SharedSettingsStackHelper(object):
eta_noise_seed_delta = None
tome_ratio = None
todo_ratio = None
teacache_thresh = None
extra_networks_default_multiplier = None
disable_weights_auto_swap = None
@@ -75,6 +77,7 @@ class SharedSettingsStackHelper(object):
self.freeu_b2 = shared.opts.freeu_b2
self.freeu_s1 = shared.opts.freeu_s1
self.freeu_s2 = shared.opts.freeu_s2
self.cfgzero_enabled = shared.opts.cfgzero_enabled
self.sd_model_checkpoint = shared.opts.sd_model_checkpoint
self.sd_model_refiner = shared.opts.sd_model_refiner
self.sd_model_dict = shared.opts.sd_model_dict
@@ -83,6 +86,7 @@ class SharedSettingsStackHelper(object):
self.sd_text_encoder = shared.opts.sd_text_encoder
self.extra_networks_default_multiplier = shared.opts.extra_networks_default_multiplier
self.disable_weights_auto_swap = shared.opts.disable_weights_auto_swap
self.teacache_thresh = shared.opts.teacache_thresh
shared.opts.data["disable_weights_auto_swap"] = False
def __exit__(self, exc_type, exc_value, tb):
@@ -100,12 +104,14 @@ class SharedSettingsStackHelper(object):
shared.opts.data["schedulers_shift"] = self.schedulers_shift
shared.opts.data["scheduler_eta"] = self.scheduler_eta
shared.opts.data["eta_noise_seed_delta"] = self.eta_noise_seed_delta
shared.opts.data["cfgzero_enabled"] = self.cfgzero_enabled
shared.opts.data["freeu_b1"] = self.freeu_b1
shared.opts.data["freeu_b2"] = self.freeu_b2
shared.opts.data["freeu_s1"] = self.freeu_s1
shared.opts.data["freeu_s2"] = self.freeu_s2
shared.opts.data["tome_ratio"] = self.tome_ratio
shared.opts.data["todo_ratio"] = self.todo_ratio
shared.opts.data["teacache_thresh"] = self.teacache_thresh
if self.sd_model_checkpoint != shared.opts.sd_model_checkpoint:
shared.opts.data["sd_model_checkpoint"] = self.sd_model_checkpoint