diff --git a/comfy/model_detection.py b/comfy/model_detection.py index c05975cc9..1edbcda4d 100644 --- a/comfy/model_detection.py +++ b/comfy/model_detection.py @@ -472,9 +472,15 @@ def unet_config_from_diffusers_unet(state_dict, dtype=None): 'transformer_depth': [0, 1, 1], 'channel_mult': [1, 2, 4], 'transformer_depth_middle': -2, 'use_linear_in_transformer': False, 'context_dim': 768, 'num_head_channels': 64, 'transformer_depth_output': [0, 0, 1, 1, 1, 1], 'use_temporal_attention': False, 'use_temporal_resblock': False} + + SD15_diffusers_inpaint = {'use_checkpoint': False, 'image_size': 32, 'out_channels': 4, 'use_spatial_transformer': True, 'legacy': False, 'adm_in_channels': None, + 'dtype': dtype, 'in_channels': 9, 'model_channels': 320, 'num_res_blocks': [2, 2, 2, 2], 'transformer_depth': [1, 1, 1, 1, 1, 1, 0, 0], + 'channel_mult': [1, 2, 4, 4], 'transformer_depth_middle': 1, 'use_linear_in_transformer': False, 'context_dim': 768, 'num_heads': 8, + 'transformer_depth_output': [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], + 'use_temporal_attention': False, 'use_temporal_resblock': False} - supported_models = [SDXL, SDXL_refiner, SD21, SD15, SD21_uncliph, SD21_unclipl, SDXL_mid_cnet, SDXL_small_cnet, SDXL_diffusers_inpaint, SSD_1B, Segmind_Vega, KOALA_700M, KOALA_1B, SD09_XS, SD_XS, SDXL_diffusers_ip2p] + supported_models = [SDXL, SDXL_refiner, SD21, SD15, SD21_uncliph, SD21_unclipl, SDXL_mid_cnet, SDXL_small_cnet, SDXL_diffusers_inpaint, SSD_1B, Segmind_Vega, KOALA_700M, KOALA_1B, SD09_XS, SD_XS, SDXL_diffusers_ip2p, SD15_diffusers_inpaint] for unet_config in supported_models: matches = True diff --git a/comfy/model_management.py b/comfy/model_management.py index 4f6374b6d..0b7fe3eab 100644 --- a/comfy/model_management.py +++ b/comfy/model_management.py @@ -44,8 +44,10 @@ cpu_state = CPUState.GPU total_vram = 0 +torch_version = torch.version.__version__ + lowvram_available = True -xpu_available = False +xpu_available = int(torch_version[0]) < 2 or (int(torch_version[0]) == 2 and int(torch_version[2]) <= 4) if args.deterministic: logging.info("Using deterministic algorithms for pytorch") @@ -66,10 +68,10 @@ if args.directml is not None: try: import intel_extension_for_pytorch as ipex - if torch.xpu.is_available(): - xpu_available = True + _ = torch.xpu.device_count() + xpu_available = torch.xpu.is_available() except: - pass + xpu_available = xpu_available or (hasattr(torch, "xpu") and torch.xpu.is_available()) try: if torch.backends.mps.is_available(): @@ -189,7 +191,6 @@ VAE_DTYPES = [torch.float32] try: if is_nvidia(): - torch_version = torch.version.__version__ if int(torch_version[0]) >= 2: if ENABLE_PYTORCH_ATTENTION == False and args.use_split_cross_attention == False and args.use_quad_cross_attention == False: ENABLE_PYTORCH_ATTENTION = True @@ -335,8 +336,9 @@ class LoadedModel: self.model_unload() raise e - if is_intel_xpu() and not args.disable_ipex_optimize: - self.real_model = ipex.optimize(self.real_model.eval(), graph_mode=True, concat_linear=True) + if is_intel_xpu() and not args.disable_ipex_optimize and self.real_model is not None: + with torch.no_grad(): + self.real_model = ipex.optimize(self.real_model.eval(), inplace=True, graph_mode=True, concat_linear=True) self.weights_loaded = True return self.real_model