From 0ac89385a0502492274c2d76eb39e9cefe0f0f4e Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 14 Aug 2026 09:18:24 +0200 Subject: [PATCH 1/3] timers reporting Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 7 ++++--- extensions-builtin/sdnq | 2 +- modules/devices.py | 5 ++++- modules/loader.py | 1 + modules/processing.py | 15 ++++++++++----- modules/processing_vae.py | 3 +-- modules/sd_models.py | 12 ++++++++++-- modules/sd_offload.py | 6 +++--- modules/timer.py | 5 +++++ modules/ui_control.py | 11 ++++++----- modules/ui_definitions.py | 5 +++-- pipelines/model_minimax.py | 1 + wiki | 2 +- 13 files changed, 50 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 681cc1331..76a3ee0d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,11 @@ # Change Log for SD.Next -## Update for 2026-08-13 +## Update for 2026-08-14 - **Models** - [MiniMax H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) in *base* and *ref* variants MiniMax-H3 is an amazing, but absolutely massive at 32B text-encoder and 33B transformer video model - for details, see [MiniMax wiki page](wiki/MiniMax) + see [MiniMax wiki page](wiki/MiniMax) for details and usage instructions - **Detailer**: Pretty much *detailer.next* :) Detailer detection models were traditionally *YOLO* models, but now we can also use: - [Facebook-SAM3](https://huggingface.co/facebook/sam3) hybrid promptable concept segmentation and detection network @@ -30,8 +30,8 @@ - add `SD_DIFFUSERS_DEBUG` and `SD_TRANSFORMERS_DEBUG` env variables to trace diffusers and transformers internal operations - **API** - full support for video generation using api - *note*: video api uses async workflow where you submit request and then later download the result new endpoints: `/sdapi/v1/video`, `/sdapi/v1/video/models`, `/sdapi/v1/video/file` + *note*: video api uses async workflow where you submit request and then later download the result - **Removed** - remove DirectML support latest release was over 2 years ago and is not compatible with modern frameworks @@ -43,6 +43,7 @@ - improve pipeline detection for non-cached models - cleanup alt offload codepaths - hf progress bars + - processing stats reporting ## Update for 2026-08-07 diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index 46fe58736..d19656260 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit 46fe58736ad454362b35d45d9f34103c09ce7d09 +Subproject commit d19656260d32be0636301665e4204ea9dbbd2f92 diff --git a/modules/devices.py b/modules/devices.py index c6e792145..114b1623a 100644 --- a/modules/devices.py +++ b/modules/devices.py @@ -143,7 +143,10 @@ def get_gpu_info(): } elif backend == 'cuda' or backend == 'zluda': return { - 'device': f'{torch.cuda.get_device_name(torch.cuda.current_device())} n={torch.cuda.device_count()} arch={torch.cuda.get_arch_list()[-1]} capability={torch.cuda.get_device_capability(device)}', + 'device': f'"{torch.cuda.get_device_name(torch.cuda.current_device())}"', + 'count': torch.cuda.device_count(), + 'arch': torch.cuda.get_arch_list()[-1], + 'capability': torch.cuda.get_device_capability(torch.cuda.current_device()), 'cuda': torch.version.cuda, 'cudnn': torch.backends.cudnn.version(), 'driver': get_driver(), diff --git a/modules/loader.py b/modules/loader.py index 275afadae..14aea1c11 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -11,6 +11,7 @@ from modules import timer, errors from modules.logger import log +log.info('Initializing: packages') initialized = False errors.install() logging.getLogger("DeepSpeed").disabled = True diff --git a/modules/processing.py b/modules/processing.py index b5cd149e7..59982495c 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -417,7 +417,7 @@ def process_samples(p: StableDiffusionProcessing, samples): def print_stats(): - log.debug(f'Processed: timers={timer.process.dct()}') + log.debug(f'Processed: timers={timer.process.dct(no_total=True)}') log.debug(f'Processed: memory={memstats.memory_stats()}') if devices.triton_ok: @@ -428,13 +428,14 @@ def print_stats(): from modules.sd_models_compile import update_compile_times update_compile_times() - dynamo_dct = timer.dynamo.dct(min_time=0.5, no_total=True) + dynamo_dct = timer.dynamo.dct(min_time=1.0, no_total=True) timer.dynamo.reset() if dynamo_dct: log.debug(f'Processed: dynamo={dynamo_dct}') def process_images_inner(p: StableDiffusionProcessing) -> Processed: + t0 = time.time() if type(p.prompt) == list: assert len(p.prompt) > 0 else: @@ -453,7 +454,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: jobid = shared.state.begin('Process') shared.state.batch_count = p.n_iter with devices.inference_context(): - t0 = time.time() + t1 = time.time() if not hasattr(p, 'skip_init'): p.init(p.all_prompts, p.all_seeds, p.all_subseeds) debug(f'Processing inner: args={vars(p)}') @@ -553,7 +554,8 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: shared.sd_model.restore_pipeline() shared.sd_model = sd_models.set_diffuser_pipe(shared.sd_model, sd_models.DiffusersTaskType.TEXT_2_IMAGE) - t1 = time.time() + t2 = time.time() + timer.process.add('process', t2 - t1) p.color_corrections = None index_of_first_image = 0 @@ -588,9 +590,12 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: p.scripts.postprocess(p, results) timer.process.record('post') p.ops = list(set(p.ops)) + t3 = time.time() + timer.process.add('wall', t3 - t0) if not p.disable_extra_networks: - log.info(f'Processed: images={len(output_images)} its={(p.steps * len(output_images)) / (t1 - t0):.3f} ops={p.ops}') + its = (p.steps * len(output_images)) / (t2 - t1) + log.info(f'Processed: images={len(output_images)} its={its:.3f} ops={p.ops}') print_stats() if shared.cmd_opts.lowvram or shared.cmd_opts.medvram: diff --git a/modules/processing_vae.py b/modules/processing_vae.py index 0d18e875d..03c1161d2 100644 --- a/modules/processing_vae.py +++ b/modules/processing_vae.py @@ -90,11 +90,10 @@ def full_vae_decode(latents, model): if debug: devices.torch_gc(force=True) shared.mem_mon.reset() - if shared.opts.diffusers_offload_mode != "sequential": sd_models.move_model(model.vae, devices.device) - sd_models.set_vae_options(model, vae=None, op='decode') + # sd_models.set_vae_options(model, vae=None, op='decode') # set during model load upcast = (model.vae.dtype == torch.float16) and (getattr(model.vae.config, 'force_upcast', False) or shared.opts.no_half_vae) if upcast: if hasattr(model, 'upcast_vae'): # this is done by diffusers automatically if output_type != 'latent' diff --git a/modules/sd_models.py b/modules/sd_models.py index a393652fd..6df77d0d4 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -12,7 +12,7 @@ import torch import huggingface_hub as hf from modules.logger import log from modules import timer, paths, shared, modelloader, devices, script_callbacks, sd_vae, sd_unet, errors, sd_models_compile, sd_detect, model_quant, sd_hijack_te, sd_hijack_vae, sd_hijack_accelerate, sd_hijack_safetensors, sd_hijack_transformers, sd_hijack_hfhub, attention -from modules.memstats import memory_stats +from modules.memstats import memory_stats, gpu_stats from modules.shared_helpers import walk_files from modules.modeldata import model_data from modules.sd_checkpoint import CheckpointInfo, select_checkpoint, list_models, checkpoint_titles, get_closest_checkpoint_match, update_model_hashes, write_metadata, checkpoints_list # pylint: disable=unused-import @@ -149,7 +149,8 @@ def set_vae_options(sd_model, vae=None, op:str='model', quiet:bool=False): ops['upcast'] = True sd_model.vqvae.to(torch.float32) # vqvae is producing nans in fp16 if not quiet and len(ops) > 0: - log.quiet(quiet, f'Setting {op}: component=vae {ops}') + fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access + log.quiet(quiet, f'Setting {op}: component=vae {ops} fn={fn}') def set_diffuser_options(sd_model, vae=None, op:str='model', offload:bool=True, quiet:bool=False): @@ -1685,3 +1686,10 @@ def list_hfcache(): checkpoint = CheckpointInfo(filename=f.path, name=path_to_repo(f.name), model_type='hfcache') checkpoints.append(checkpoint) return checkpoints + + +def warn_group_offload(min_vram: int = 0): + vram = gpu_stats() + vram = round(vram['total'] if "total" in vram else 0) + if (0 < vram < min_vram) and (shared.opts.diffusers_offload_mode in ['none', 'balanced', 'model']): + log.warning(f'Load model: vram={vram} min={min_vram} offload={shared.opts.diffusers_offload_mode} recommended=group reason="insufficient vram"') diff --git a/modules/sd_offload.py b/modules/sd_offload.py index 0b8089a64..8bdb6fd48 100644 --- a/modules/sd_offload.py +++ b/modules/sd_offload.py @@ -796,10 +796,10 @@ def apply_balanced_offload(sd_model=None, exclude: list[str] | None = None, forc report_model_stats(module_name, module) set_accelerate(sd_model) - t = time.time() - t0 - process_timer.add('offload', t) + t1 = time.time() + process_timer.add('offload', t1 - t0) fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access - debug_move(f'Apply offload: time={t:.2f} type=balanced fn={fn}') + debug_move(f'Apply offload: time={t1 - t0:.2f} type=balanced fn={fn}') if not cached: log.info(f'Model class={sd_model.__class__.__name__} modules={len(offload_hook_instance.offload_map)} size={offload_hook_instance.model_size():.3f}') return sd_model diff --git a/modules/timer.py b/modules/timer.py index dcb2b642b..cdd443188 100644 --- a/modules/timer.py +++ b/modules/timer.py @@ -64,6 +64,11 @@ class Timer: res += " ".join([f"{category}={time_taken:.2f}" for category, time_taken in additions]) return res + def max(self): + if not self.records: + return 0 + return max(self.records.values()) + def get_total(self): return sum(self.records.values()) diff --git a/modules/ui_control.py b/modules/ui_control.py index dd07aaa03..f31edb989 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -35,11 +35,12 @@ def return_stats(t: float | None = None): ooms = mem_mon_read.pop("oom") retries = mem_mon_read.pop("retries") vram = {k: v // 1048576 for k, v in mem_mon_read.items()} - peak = max(vram.get('active_peak', 0), vram.get('reserved_peak', 0), vram.get('used', 0)) - used = round(100.0 * peak / vram.get('total', 0)) if vram.get('total', 0) > 0 else 0 - if peak > 0: - gpu += f"| 🕮 GPU {peak} MB" - gpu += f" {used}%" if used > 0 else '' + peak_mb = max(vram.get('active_peak', 0), vram.get('reserved_peak', 0), vram.get('used', 0)) + peak_gb = round(100.0 * peak_mb / 1024) / 100.0 + used_perc = round(100.0 * peak_mb / vram.get('total', 0)) if vram.get('total', 0) > 0 else 0 + if peak_mb > 0: + gpu += f"| 🕮 GPU {peak_gb} GB" + gpu += f" {used_perc}%" if used_perc > 0 else '' gpu += f" | Retries {retries} OOM {ooms}" if retries > 0 or ooms > 0 else '' ram = ram_stats() if ram['used'] > 0: diff --git a/modules/ui_definitions.py b/modules/ui_definitions.py index 4aa269a11..dc356cbfb 100644 --- a/modules/ui_definitions.py +++ b/modules/ui_definitions.py @@ -138,8 +138,6 @@ def create_settings(cmd_opts): "offload_sep": OptionInfo("

Model Offloading

", "", gr.HTML), "diffusers_offload_mode": OptionInfo(startup_offload_mode, "Model offload mode", gr.Radio, {"choices": ['none', 'balanced', 'group', 'model', 'sequential']}), "diffusers_offload_nonblocking": OptionInfo(False, "Non-blocking move operations"), - "caption_offload": OptionInfo(True, "Offload caption models"), - "caption_to_gpu": OptionInfo(True, "Load caption models direct to GPU"), "offload_balanced_sep": OptionInfo("

Balanced Offload

", "", gr.HTML), "diffusers_offload_pre": OptionInfo(True, "Offload during pre-forward", gr.Checkbox, {"visible": False}), "diffusers_offload_streams": OptionInfo(False, "Offload using streams"), @@ -155,6 +153,9 @@ def create_settings(cmd_opts): 'group_offload_record': OptionInfo(False, "Record torch streams", gr.Checkbox), 'group_offload_pin': OptionInfo(True, "Pin offload memory", gr.Checkbox), 'group_offload_blocks': OptionInfo(1, "Offload blocks", gr.Number), + "caption_offload_sep": OptionInfo("

Caption Model Offloading

", "", gr.HTML), + "caption_offload": OptionInfo(True, "Offload caption models"), + "caption_to_gpu": OptionInfo(True, "Load caption models direct to GPU"), })) # --- Model Quantization --- diff --git a/pipelines/model_minimax.py b/pipelines/model_minimax.py index f0df0d227..a29bc3907 100644 --- a/pipelines/model_minimax.py +++ b/pipelines/model_minimax.py @@ -14,6 +14,7 @@ def load_minimax(checkpoint_info, diffusers_load_config = None, workflow: str | workflow = (workflow or getattr(checkpoint_info, 'subfolder', None) or 'fl2va').lower() # one repo holds both checkpoint partitions; reference entries select ref2va via the subfolder tag log.debug(f'Load model: type=MiniMaxH3 repo="{repo_id}" workflow={workflow} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype}') + sd_models.warn_group_offload(min_vram=20) repo_cls = diffusers.MiniMaxH3ModularPipeline pipe = load_modular_pipe( repo_cls, diff --git a/wiki b/wiki index 4114a2e8c..5bca12bb6 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 4114a2e8c236e93678ab3d5abbe1b261d2b841ad +Subproject commit 5bca12bb6cdf8c89633a647d6778a4f796d80e43 From f9ecd2287fb9053e5120a198dfb81c2e924206b6 Mon Sep 17 00:00:00 2001 From: Oleksandr Liutyi Date: Fri, 14 Aug 2026 08:25:44 +0000 Subject: [PATCH 2/3] MiniMax H3 pruned (20B) reference image --- data/reference-quantized.json | 12 ++++++------ .../OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg | Bin 0 -> 59695 bytes 2 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 models/Reference/OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg diff --git a/data/reference-quantized.json b/data/reference-quantized.json index aca805c79..d9ccfbc70 100644 --- a/data/reference-quantized.json +++ b/data/reference-quantized.json @@ -84,7 +84,7 @@ "preview": "MiniMaxAI--MiniMax-H3.jpg", "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", "extras": "sampler: Default", - "size": 47.33, + "size": 64.80, "date": "2026 August" }, "MiniMaxAI MiniMax-H3 sdnq-uint4 Ref2VA": { @@ -93,24 +93,24 @@ "subfolder": "ref2va", "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", "extras": "sampler: Default", - "size": 47.33, + "size": 64.80, "date": "2026 August" }, "MiniMaxAI MiniMax-H3 Pruned sdnq-uint4": { "path": "OzzyGT/MiniMax_H3_sdnq_4bit_pruned", - "preview": "MiniMaxAI--MiniMax-H3.jpg", + "preview": "OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg", "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", "extras": "sampler: Default", - "size": 47.33, + "size": 23.70, "date": "2026 August" }, "MiniMaxAI MiniMax-H3 Pruned sdnq-uint4 Ref2VA": { "path": "OzzyGT/MiniMax_H3_sdnq_4bit_pruned", - "preview": "MiniMaxAI--MiniMax-H3.jpg", + "preview": "OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg", "subfolder": "ref2va", "desc": "Quantization of MiniMaxAI/MiniMax-H3 using SDNQ: dynamic 4-bit uint. Video with synchronized audio; in image tabs the model runs in experimental still mode.", "extras": "sampler: Default", - "size": 47.33, + "size": 23.70, "date": "2026 August" }, "Z-Image-Turbo sdnq-svd-uint4": { diff --git a/models/Reference/OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg b/models/Reference/OzzyGT--MiniMax_H3_sdnq_4bit_pruned.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc6c6fa6cd75a06c3655467bd9d7b31cceb6bff5 GIT binary patch literal 59695 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�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 O^no5t#e`go0RP$F0cyek literal 0 HcmV?d00001 From ce69dd4f1710064d68eae42a7bb49230478e4670 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 14 Aug 2026 10:44:56 +0200 Subject: [PATCH 3/3] image metadata handle correct image index Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/processing_info.py | 9 ++++++++- modules/shared_defaults.py | 2 +- modules/styles.py | 5 +++-- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76a3ee0d3..969b5393f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ - cleanup alt offload codepaths - hf progress bars - processing stats reporting + - image metadata handle correct image index ## Update for 2026-08-07 diff --git a/modules/processing_info.py b/modules/processing_info.py index 8e6ce4f97..ad87e6177 100644 --- a/modules/processing_info.py +++ b/modules/processing_info.py @@ -23,6 +23,7 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts=None, all_seeds=No if not hasattr(shared.sd_model, 'sd_checkpoint_info'): return '' + job_size = p.n_iter * p.batch_size if index is None: index = position_in_batch + iteration * p.batch_size if all_prompts is None: @@ -209,7 +210,13 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts=None, all_seeds=No if shared.sd_model_type == 'h1': args['LLM'] = None if shared.opts.model_h1_llama_repo == 'Default' else shared.opts.model_h1_llama_repo - args.update(p.extra_generation_params) + # args.update(p.extra_generation_params) + for k, v in p.extra_generation_params.items(): + if isinstance(v, (list, tuple)) and (job_size > index) and (len(v) > 1) and (len(v) == job_size): # likely a per-job param + args[k] = v[index] + else: + args[k] = v + for k, v in args.copy().items(): if v is None: del args[k] diff --git a/modules/shared_defaults.py b/modules/shared_defaults.py index c18a59e24..0530fb6a3 100644 --- a/modules/shared_defaults.py +++ b/modules/shared_defaults.py @@ -60,7 +60,7 @@ def get_default_modes(cmd_opts, mem_stat): default_sdp_override_options = ['Dynamic attention'] if devices.get_optimal_device_name() != "cpu": - os.environ.setdefault('SDNQ_USE_OPENVINO_MM', '0') + os.environ.setdefault('SDNQ_USE_OPENVINO_MM', '0') # TODO sdnq openvino: this is too late as sdnq already initialized it return ( default_offload_mode, diff --git a/modules/styles.py b/modules/styles.py index 9fd1e77cf..05837c4cd 100644 --- a/modules/styles.py +++ b/modules/styles.py @@ -123,6 +123,7 @@ def apply_file_wildcards(prompt, replaced = None, not_found = None, recursion=0, not_found = [] if replaced is None: replaced = [] + def check_wildcard_files(prompt, wildcard, files, file_only=True): trimmed = wildcard.replace('\\', os.path.sep).replace('/', os.path.sep).strip().lower() for file in files: @@ -144,8 +145,6 @@ def apply_file_wildcards(prompt, replaced = None, not_found = None, recursion=0, prompt = prompt.replace(f"__{wildcard}__", choice, 1) log.debug(f'Apply wildcard: select="{wildcard}" choice="{choice}" file="{file}" choices={len(lines)}') replaced.append(wildcard) - if p is not None: - p.extra_generation_params['Wildcards'] = p.extra_generation_params.get('Wildcards', []) + [trimmed] return prompt, True except Exception as e: log.error(f'Wildcards: wildcard={wildcard} file={file} {e}') @@ -206,6 +205,8 @@ def apply_wildcards_to_prompt(prompt, all_wildcards, seed=-1, silent=False, p: S log.debug(f'Apply wildcards: {replaced} path="{shared.opts.wildcards_dir}" type=style time={t1-t0:.2f}') if (len(replaced_file) > 0 or len(not_found) > 0) and not silent: log.debug(f'Apply wildcards: found={replaced_file} missing={not_found} path="{shared.opts.wildcards_dir}" type=file seed={seed} time={t2-t2:.2f}') + if p is not None: + p.extra_generation_params['Wildcards'] = p.extra_generation_params.get('Wildcards', []) + [replaced_file] if old_state is not None: random.setstate(old_state) return prompt