From 9308c32ad20e8a9eb3967a166643c3027121000b Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 15 Jul 2023 08:44:02 -0400 Subject: [PATCH] update samplers and callbacks --- TODO.md | 4 ++-- extensions-builtin/Lora/lora.py | 2 ++ extensions-builtin/a1111-sd-webui-lycoris | 2 +- extensions-builtin/clip-interrogator-ext | 2 +- .../multidiffusion-upscaler-for-automatic1111 | 2 +- extensions-builtin/sd-dynamic-thresholding | 2 +- extensions-builtin/sd-extension-system-info | 2 +- extensions-builtin/sd-webui-agent-scheduler | 2 +- extensions-builtin/sd-webui-controlnet | 2 +- .../stable-diffusion-webui-images-browser | 2 +- .../stable-diffusion-webui-rembg | 2 +- modules/lora | 2 +- modules/lycoris | 2 +- modules/sd_models.py | 4 +++- modules/sd_samplers_diffusers.py | 21 +++++-------------- wiki | 2 +- 16 files changed, 24 insertions(+), 31 deletions(-) diff --git a/TODO.md b/TODO.md index de7ad8bc1..19a148ecc 100644 --- a/TODO.md +++ b/TODO.md @@ -4,13 +4,13 @@ Stuff to be fixed, in no particular order... -- SD-XL VAE `AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)` +- SD-XL VAE - SD-XL Lora - SD-XL Sketch/Inpaint - Kandinsky 2.2 (2.1 is working) - Misterious Extensions auto-enabling - Misterious Extra network corruptions -- script_callbacks.on_model_loaded +- script_callbacks.on_model_loaded ## Features diff --git a/extensions-builtin/Lora/lora.py b/extensions-builtin/Lora/lora.py index 088be31c1..d7e8a264e 100644 --- a/extensions-builtin/Lora/lora.py +++ b/extensions-builtin/Lora/lora.py @@ -139,6 +139,8 @@ class LoraUpDownModule: def assign_lora_names_to_compvis_modules(sd_model): lora_layer_mapping = {} + if not hasattr(shared.sd_model, 'cond_stage_model'): + return for name, module in shared.sd_model.cond_stage_model.wrapped.named_modules(): lora_name = name.replace(".", "_") diff --git a/extensions-builtin/a1111-sd-webui-lycoris b/extensions-builtin/a1111-sd-webui-lycoris index b0d24ca64..8e97bf548 160000 --- a/extensions-builtin/a1111-sd-webui-lycoris +++ b/extensions-builtin/a1111-sd-webui-lycoris @@ -1 +1 @@ -Subproject commit b0d24ca645b6a5cb9752169691a1c6385c6fe6ae +Subproject commit 8e97bf54867c25d00fc480be1ab4dae5399b35ef diff --git a/extensions-builtin/clip-interrogator-ext b/extensions-builtin/clip-interrogator-ext index 9e6bbd9b8..6e31272e1 160000 --- a/extensions-builtin/clip-interrogator-ext +++ b/extensions-builtin/clip-interrogator-ext @@ -1 +1 @@ -Subproject commit 9e6bbd9b8931bbe869a8e28e7005b0e13c2efff0 +Subproject commit 6e31272e14308b4918f9785b1dda7cc1149e8838 diff --git a/extensions-builtin/multidiffusion-upscaler-for-automatic1111 b/extensions-builtin/multidiffusion-upscaler-for-automatic1111 index 70b3c5ea3..de4888103 160000 --- a/extensions-builtin/multidiffusion-upscaler-for-automatic1111 +++ b/extensions-builtin/multidiffusion-upscaler-for-automatic1111 @@ -1 +1 @@ -Subproject commit 70b3c5ea3c9f684d04e7ff59167565974415735c +Subproject commit de4888103c03d88c0d32af6d453373b47291687a diff --git a/extensions-builtin/sd-dynamic-thresholding b/extensions-builtin/sd-dynamic-thresholding index f02cacfc9..c81975313 160000 --- a/extensions-builtin/sd-dynamic-thresholding +++ b/extensions-builtin/sd-dynamic-thresholding @@ -1 +1 @@ -Subproject commit f02cacfc923e8bbf73f25327d722d50c458d66bb +Subproject commit c81975313514560ab0aa123671ea466dfcde2d41 diff --git a/extensions-builtin/sd-extension-system-info b/extensions-builtin/sd-extension-system-info index 8046b1544..9d3c0ca0f 160000 --- a/extensions-builtin/sd-extension-system-info +++ b/extensions-builtin/sd-extension-system-info @@ -1 +1 @@ -Subproject commit 8046b1544513cea06d1c41748c22727c930323ab +Subproject commit 9d3c0ca0f2dc8f8973b3d08f5ec1fa8bbd726155 diff --git a/extensions-builtin/sd-webui-agent-scheduler b/extensions-builtin/sd-webui-agent-scheduler index 84310be8d..bdd7de257 160000 --- a/extensions-builtin/sd-webui-agent-scheduler +++ b/extensions-builtin/sd-webui-agent-scheduler @@ -1 +1 @@ -Subproject commit 84310be8dbd4df953fb92b8cc7627c5386e03958 +Subproject commit bdd7de2574101063c385e95fcb5d62869f30d511 diff --git a/extensions-builtin/sd-webui-controlnet b/extensions-builtin/sd-webui-controlnet index 4f0f26b7c..07bed6ccf 160000 --- a/extensions-builtin/sd-webui-controlnet +++ b/extensions-builtin/sd-webui-controlnet @@ -1 +1 @@ -Subproject commit 4f0f26b7c6239e1d816f24516c4a654e6efe94c3 +Subproject commit 07bed6ccf8a468a45b2833cfdadc749927cbd575 diff --git a/extensions-builtin/stable-diffusion-webui-images-browser b/extensions-builtin/stable-diffusion-webui-images-browser index 75af6d0c3..9229ed5e7 160000 --- a/extensions-builtin/stable-diffusion-webui-images-browser +++ b/extensions-builtin/stable-diffusion-webui-images-browser @@ -1 +1 @@ -Subproject commit 75af6d0c32b72350b2f140f186cd8ce0e24dda10 +Subproject commit 9229ed5e7e15608ec035d89cc5b2d19c3e629142 diff --git a/extensions-builtin/stable-diffusion-webui-rembg b/extensions-builtin/stable-diffusion-webui-rembg index 657ae9f54..3d9eedbbf 160000 --- a/extensions-builtin/stable-diffusion-webui-rembg +++ b/extensions-builtin/stable-diffusion-webui-rembg @@ -1 +1 @@ -Subproject commit 657ae9f5486019a94dbe11d3560b28cccf35a0fd +Subproject commit 3d9eedbbf0d585207f97d5b21e42f32c0042df70 diff --git a/modules/lora b/modules/lora index 5931948ad..0cfcb5a49 160000 --- a/modules/lora +++ b/modules/lora @@ -1 +1 @@ -Subproject commit 5931948adbf0f76017ecc13e716c68a690097c16 +Subproject commit 0cfcb5a49cf813547d728101cc05edf1a9b7d06c diff --git a/modules/lycoris b/modules/lycoris index 8b47a5349..b3776a3ab 160000 --- a/modules/lycoris +++ b/modules/lycoris @@ -1 +1 @@ -Subproject commit 8b47a5349b59efac812664c5732c6e3947a6fec7 +Subproject commit b3776a3ab9a61e8aaa9ea71f3b2073b0f2135c4b diff --git a/modules/sd_models.py b/modules/sd_models.py index 8d9adfca4..e50023a9c 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -778,7 +778,7 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No if sd_model is None: shared.log.error('Diffuser model not loaded') - return + return sd_model.sd_checkpoint_info = checkpoint_info # pylint: disable=attribute-defined-outside-init sd_model.sd_model_checkpoint = checkpoint_info.filename # pylint: disable=attribute-defined-outside-init sd_model.sd_model_hash = checkpoint_info.hash # pylint: disable=attribute-defined-outside-init @@ -809,6 +809,7 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No timer.record("load") shared.log.info(f"Model loaded in {timer.summary()}") devices.torch_gc(force=True) + script_callbacks.model_loaded_callback(sd_model) shared.log.info(f'Model load finished: {memory_stats()}') @@ -1008,6 +1009,7 @@ def reload_model_weights(sd_model=None, info=None, reuse_dict=False, op='model') shared.opts.data["sd_model_checkpoint"] = next_checkpoint_info.title reload_model_weights(reuse_dict=True) # ok we loaded dict now lets redo and load model on top of it return model_data.sd_model if op == 'model' or op == 'dict' else model_data.sd_refiner + try: load_model_weights(sd_model, checkpoint_info, state_dict, timer) except Exception: diff --git a/modules/sd_samplers_diffusers.py b/modules/sd_samplers_diffusers.py index 6f8588194..7c18a2a8e 100644 --- a/modules/sd_samplers_diffusers.py +++ b/modules/sd_samplers_diffusers.py @@ -21,23 +21,16 @@ except Exception as e: import diffusers log.error(f'Diffusers import error: version={diffusers.__version__} error: {e}') - config = { - #removed beta start and end from all into each sampler 'All': { 'num_train_timesteps': 1000, 'beta_schedule': 'linear', 'prediction_type': 'epsilon' }, 'UniPC': { 'beta_start': 0.0001, 'beta_end': 0.02,'solver_order': 2, 'thresholding': False, 'sample_max_value': 1.0, 'predict_x0': 'bh2', 'lower_order_final': True }, - #DDIM FIX - changed timestep spacing 'DDIM': { 'beta_start': 0.0001, 'beta_end': 0.02,'clip_sample': True, 'set_alpha_to_one': True, 'steps_offset': 0, 'thresholding': False, 'clip_sample_range': 1.0, 'sample_max_value': 1.0, 'timestep_spacing': 'linspace', 'rescale_betas_zero_snr': False }, - #DDPM FIX - changed timestep spacing 'DDPM': { 'beta_start': 0.0001, 'beta_end': 0.02,'variance_type': "fixed_small", 'clip_sample': True, 'thresholding': False, 'clip_sample_range': 1.0, 'sample_max_value': 1.0, 'timestep_spacing': 'linspace'}, - #ADDED KDPM2 'KDPM2': {'beta_start': 0.00085, 'beta_end': 0.012, 'steps_offset': 0 }, - #ADDED KDPM2 A - 'KDPM2 A': {'beta_start': 0.00085, 'beta_end': 0.012, 'steps_offset': 0 }, - + 'KDPM2 a': {'beta_start': 0.00085, 'beta_end': 0.012, 'steps_offset': 0 }, 'DEIS': { 'beta_start': 0.0001, 'beta_end': 0.02,'solver_order': 2, 'thresholding': False, 'sample_max_value': 1.0, 'algorithm_type': "deis", 'solver_type': "logrho", 'lower_order_final': True }, 'Euler': {'beta_start': 0.0001, 'beta_end': 0.02, 'interpolation_type': "linear", 'use_karras_sigmas': False }, - 'Euler a': {}, + 'Euler a': { 'beta_start': 0.0001, 'beta_end': 0.02 }, 'Heun': { 'beta_start': 0.0001, 'beta_end': 0.02,'use_karras_sigmas': False }, 'PNDM': { 'beta_start': 0.0001, 'beta_end': 0.02,'skip_prk_steps': False, 'set_alpha_to_one': False, 'steps_offset': 0 }, 'DPM 1S': { 'beta_start': 0.0001, 'beta_end': 0.02,'solver_order': 2, 'thresholding': False, 'sample_max_value': 1.0, 'algorithm_type': "dpmsolver++", 'solver_type': "midpoint", 'lower_order_final': True, 'use_karras_sigmas': False }, @@ -49,10 +42,8 @@ samplers_data_diffusers = [ sd_samplers_common.SamplerData('UniPC', lambda model: DiffusionSampler('UniPC', UniPCMultistepScheduler, model), [], {}), sd_samplers_common.SamplerData('DDIM', lambda model: DiffusionSampler('DDIM', DDIMScheduler, model), [], {}), sd_samplers_common.SamplerData('DDPM', lambda model: DiffusionSampler('DDPM', DDPMScheduler, model), [], {}), - #ADDED KDPM2 sd_samplers_common.SamplerData('KDPM2', lambda model: DiffusionSampler('KDPM2', KDPM2DiscreteScheduler, model), [], {}), - #ADDED KDPM2 A - sd_samplers_common.SamplerData('KDPM2 A', lambda model: DiffusionSampler('KDPM2 A', KDPM2AncestralDiscreteScheduler, model), [], {}), + sd_samplers_common.SamplerData('KDPM2 a', lambda model: DiffusionSampler('KDPM2 a', KDPM2AncestralDiscreteScheduler, model), [], {}), sd_samplers_common.SamplerData('DEIS', lambda model: DiffusionSampler('DEIS', DEISMultistepScheduler, model), [], {}), sd_samplers_common.SamplerData('DPM 1S', lambda model: DiffusionSampler('DPM++ 1S', DPMSolverSinglestepScheduler, model), [], {}), sd_samplers_common.SamplerData('DPM 2M', lambda model: DiffusionSampler('DPM++ 2M', DPMSolverMultistepScheduler, model), [], {}), @@ -91,10 +82,8 @@ class DiffusionSampler: self.config['solver_order'] = opts.schedulers_solver_order if 'predict_x0' in self.config: self.config['predict_x0'] = opts.uni_pc_variant -##disbaled this for now until full fix is working - #if name.startswith('DPM'): - # self.config['algorithm_type'] = opts.schedulers_dpm_solver - + if name == 'DPM 2M': + self.config['algorithm_type'] = opts.schedulers_dpm_solver self.sampler = constructor(**self.config) self.sampler.name = name log.debug(f'Diffusers sampler: {name} {self.config}') diff --git a/wiki b/wiki index d420606fc..fea0bd7d5 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit d420606fc4f9735aa0a4d31f6e5ef18429508ab9 +Subproject commit fea0bd7d596e442f73727b46ea9343021724e032