diff --git a/installer.py b/installer.py index 7318cf8b3..c98d727b2 100644 --- a/installer.py +++ b/installer.py @@ -379,7 +379,8 @@ def check_torch(): log.debug(f'Torch allowed: cuda={allow_cuda} rocm={allow_rocm} ipex={allow_ipex} diml={allow_directml} openvino={allow_openvino}') torch_command = os.environ.get('TORCH_COMMAND', '') xformers_package = os.environ.get('XFORMERS_PACKAGE', 'none') - install('onnxruntime', 'onnxruntime', ignore=True) + if not installed('onnxruntime', quiet=True) and not installed('onnxruntime-gpu', quiet=True): # allow either + install('onnxruntime', 'onnxruntime', ignore=True) if torch_command != '': pass elif allow_cuda and (shutil.which('nvidia-smi') is not None or args.use_xformers or os.path.exists(os.path.join(os.environ.get('SystemRoot') or r'C:\Windows', 'System32', 'nvidia-smi.exe'))): diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index 10c914716..b71e3f30d 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -3,6 +3,7 @@ import time import math import inspect import typing +import numpy as np import torch import torchvision.transforms.functional as TF import diffusers @@ -475,7 +476,7 @@ def process_diffusers(p: processing.StableDiffusionProcessing): return max(1, int(steps)) shared.sd_model = update_pipeline(shared.sd_model, p) - onnx_preprocess_pipeline(p, is_refiner_enabled()) + preprocess_onnx_pipeline(p, is_refiner_enabled()) base_args = set_pipeline_args( model=shared.sd_model, prompts=p.prompts, diff --git a/modules/sd_models.py b/modules/sd_models.py index 98c5af7ee..fe0add649 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -789,42 +789,34 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No shared.log.debug(f'Diffusers loading: path="{checkpoint_info.path}"') pipeline, model_type = detect_pipeline(checkpoint_info.path, op) - if 'ONNX' in shared.opts.diffusers_pipeline and os.path.isdir(checkpoint_info.path): - pipeline = shared_items.get_pipelines().get(shared.opts.diffusers_pipeline, None) - if pipeline is not None: - sd_model = pipeline.from_pretrained(checkpoint_info.path) - elif os.path.isdir(checkpoint_info.path): - err1 = None - err2 = None - err3 = None - if 'ONNX' in shared.opts.diffusers_pipeline: - pipeline = shared_items.get_pipelines().get(shared.opts.diffusers_pipeline, None) - if pipeline is not None: - sd_model = pipeline.from_pretrained(checkpoint_info.path) - try: # try autopipeline first, best choice but not all pipelines are available - if sd_model is None: + if os.path.isdir(checkpoint_info.path): + if model_type in ['InstaFlow']: # forced pipeline + sd_model = pipeline.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) + else: + err1, err2, err3 = None, None, None + try: # 1 - autopipeline, best choice but not all pipelines are available sd_model = diffusers.AutoPipelineForText2Image.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) sd_model.model_type = sd_model.__class__.__name__ - except Exception as e: - err1 = e - # shared.log.error(f'AutoPipeline: {e}') - try: # try diffusion pipeline next second-best choice, works for most non-linked pipelines - if err1 is not None: - sd_model = diffusers.DiffusionPipeline.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) - sd_model.model_type = sd_model.__class__.__name__ - except Exception as e: - err2 = e - # shared.log.error(f'DiffusionPipeline: {e}') - try: # try basic pipeline next just in case - if err2 is not None: - sd_model = diffusers.StableDiffusionPipeline.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) - sd_model.model_type = sd_model.__class__.__name__ - except Exception as e: - err3 = e # ignore last error - shared.log.error(f'StableDiffusionPipeline: {e}') - if err3 is not None: - shared.log.error(f'Failed loading {op}: {checkpoint_info.path} auto={err1} diffusion={err2}') - return + except Exception as e: + err1 = e + # shared.log.error(f'AutoPipeline: {e}') + try: # 2 - diffusion pipeline, works for most non-linked pipelines + if err1 is not None: + sd_model = diffusers.DiffusionPipeline.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) + sd_model.model_type = sd_model.__class__.__name__ + except Exception as e: + err2 = e + # shared.log.error(f'DiffusionPipeline: {e}') + try: # 3 - try basic pipeline just in case + if err2 is not None: + sd_model = diffusers.StableDiffusionPipeline.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) + sd_model.model_type = sd_model.__class__.__name__ + except Exception as e: + err3 = e # ignore last error + shared.log.error(f'StableDiffusionPipeline: {e}') + if err3 is not None: + shared.log.error(f'Failed loading {op}: {checkpoint_info.path} auto={err1} diffusion={err2}') + return elif os.path.isfile(checkpoint_info.path) and checkpoint_info.path.lower().endswith('.safetensors'): # diffusers_load_config["local_files_only"] = True diffusers_load_config["extract_ema"] = shared.opts.diffusers_extract_ema @@ -1090,7 +1082,7 @@ def set_diffuser_pipe(pipe, new_pipe_type): feature_extractor = getattr(pipe, "feature_extractor", None) # skip specific pipelines - if pipe.__class__.__name__ == 'StableDiffusionReferencePipeline' or pipe.__class__.__name__ == 'StableDiffusionAdapterPipeline' or 'Onnx' in pipe.__class__.__name__: + if pipe.__class__.__name__ == 'StableDiffusionReferencePipeline' or pipe.__class__.__name__ == 'StableDiffusionAdapterPipeline': return pipe try: diff --git a/modules/shared.py b/modules/shared.py index 59896d356..d3454dddf 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -440,7 +440,6 @@ options_templates.update(options_section(('diffusers', "Diffusers Settings"), { "diffusers_force_zeros": OptionInfo(False, "Force zeros for prompts when empty", gr.Checkbox, {"visible": False}), "diffusers_aesthetics_score": OptionInfo(False, "Require aesthetics score"), "diffusers_pooled": OptionInfo("default", "Diffusers SDXL pooled embeds", gr.Radio, {"choices": ['default', 'weighted']}), - "huggingface_token": OptionInfo('', 'HuggingFace token'), "onnx_sep": OptionInfo("