From 21eb4292e39f07df1118fd98f26bfd19d9907136 Mon Sep 17 00:00:00 2001 From: Disty0 Date: Wed, 6 Dec 2023 19:53:52 +0300 Subject: [PATCH] Fix IPEX Optimize --- modules/sd_models_compile.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/modules/sd_models_compile.py b/modules/sd_models_compile.py index ece694085..b68f29b6b 100644 --- a/modules/sd_models_compile.py +++ b/modules/sd_models_compile.py @@ -20,12 +20,15 @@ class CompiledModelState: self.partitioned_modules = {} -def optimize_ipex(sd_model): +def ipex_optimize(sd_model): try: t0 = time.time() import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import - sd_model.unet.training = False - sd_model.unet = ipex.optimize(sd_model.unet, dtype=devices.dtype_unet, inplace=True, weights_prepack=False) # pylint: disable=attribute-defined-outside-init + if hasattr(sd_model, 'unet'): + sd_model.unet.training = False + sd_model.unet = ipex.optimize(sd_model.unet, dtype=devices.dtype_unet, inplace=True, weights_prepack=False) # pylint: disable=attribute-defined-outside-init + else: + shared.log.warning('IPEX Optimize enabled but model has no Unet') if hasattr(sd_model, 'vae'): sd_model.vae.training = False sd_model.vae = ipex.optimize(sd_model.vae, dtype=devices.dtype_vae, inplace=True, weights_prepack=False) # pylint: disable=attribute-defined-outside-init @@ -33,9 +36,10 @@ def optimize_ipex(sd_model): sd_model.movq.training = False sd_model.movq = ipex.optimize(sd_model.movq, dtype=devices.dtype_vae, inplace=True, weights_prepack=False) # pylint: disable=attribute-defined-outside-init t1 = time.time() - shared.log.info(f"Model compile: mode=IPEX-optimize time={t1-t0:.2f}") + shared.log.info(f"IPEX Optimize: time={t1-t0:.2f}") + return sd_model except Exception as e: - shared.log.warning(f"Model compile: task=IPEX-optimize error: {e}") + shared.log.warning(f"IPEX Optimize: error: {e}") def optimize_openvino(): @@ -98,8 +102,6 @@ def compile_torch(sd_model): import torch._dynamo # pylint: disable=unused-import,redefined-outer-name torch._dynamo.reset() # pylint: disable=protected-access shared.log.debug(f"Model compile available backends: {torch._dynamo.list_backends()}") # pylint: disable=protected-access - if shared.opts.ipex_optimize: - optimize_ipex(sd_model) if shared.opts.cuda_compile_backend == "openvino_fx": optimize_openvino() log_level = logging.WARNING if shared.opts.cuda_compile_verbose else logging.CRITICAL # pylint: disable=protected-access @@ -131,6 +133,8 @@ def compile_torch(sd_model): def compile_diffusers(sd_model): + if shared.opts.ipex_optimize: + sd_model = ipex_optimize(sd_model) if not (shared.opts.cuda_compile or shared.opts.cuda_compile_vae or shared.opts.cuda_compile_upscaler): return sd_model if shared.opts.cuda_compile_backend == 'none':