diff --git a/modules/devices.py b/modules/devices.py index 4658de1eb..102fc6f71 100644 --- a/modules/devices.py +++ b/modules/devices.py @@ -42,30 +42,15 @@ def has_mps() -> bool: return devices_mac.has_mps # pylint: disable=used-before-assignment -def get_backend(shared_cmd_opts, shared_opts): - global opts, args # pylint: disable=global-statement - opts = shared_opts +def get_backend(shared_cmd_opts): + global args # pylint: disable=global-statement args = shared_cmd_opts if args.use_openvino: - from modules.intel import openvino # pylint: disable=unused-import name = 'openvino' - if hasattr(torch, 'xpu') and torch.xpu.is_available(): - torch.xpu.is_available = lambda *args, **kwargs: False - torch.cuda.is_available = lambda *args, **kwargs: False - elif args.use_ipex or (hasattr(torch, 'xpu') and torch.xpu.is_available()): - name = 'ipex' - from modules.intel.ipex import ipex_init - ok, e = ipex_init() - if not ok: - log.error(f'IPEX initialization failed: {e}') - name = 'cpu' elif args.use_directml: name = 'directml' - from modules.dml import directml_init - ok, e = directml_init() - if not ok: - log.error(f'DirectML initialization failed: {e}') - name = 'cpu' + elif hasattr(torch, 'xpu') and torch.xpu.is_available(): + name = 'ipex' elif torch.cuda.is_available() and torch.version.cuda: name = 'cuda' elif torch.cuda.is_available() and torch.version.hip: diff --git a/modules/shared.py b/modules/shared.py index 175b8e7a8..6527eae59 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -216,10 +216,27 @@ if cmd_opts.backend is not None: # override with args if cmd_opts.use_openvino: # override for openvino backend = Backend.DIFFUSERS from modules.intel.openvino import get_device_list as get_openvino_device_list # pylint: disable=ungrouped-imports -native = backend == Backend.DIFFUSERS + if hasattr(torch, 'xpu') and torch.xpu.is_available(): + torch.xpu.is_available = lambda *args, **kwargs: False + torch.cuda.is_available = lambda *args, **kwargs: False +elif cmd_opts.use_ipex or (hasattr(torch, 'xpu') and torch.xpu.is_available()): + name = 'ipex' + from modules.intel.ipex import ipex_init + ok, e = ipex_init() + if not ok: + log.error(f'IPEX initialization failed: {e}') +elif cmd_opts.use_directml: + name = 'directml' + from modules.dml import directml_init + ok, e = directml_init() + if not ok: + log.error(f'DirectML initialization failed: {e}') +devices.backend = devices.get_backend(cmd_opts) +devices.device = devices.get_optimal_device() cpu_memory = round(psutil.virtual_memory().total / 1024 / 1024 / 1024, 2) mem_stat = memory_stats() gpu_memory = mem_stat['gpu']['total'] if "gpu" in mem_stat else 0 +native = backend == Backend.DIFFUSERS class OptionInfo: @@ -1085,9 +1102,7 @@ if not native: prompt_styles = modules.styles.StyleDatabase(opts) reference_models = readfile(os.path.join('html', 'reference.json')) cmd_opts.disable_extension_access = (cmd_opts.share or cmd_opts.listen or (cmd_opts.server_name or False)) and not cmd_opts.insecure - -devices.backend = devices.get_backend(cmd_opts, opts) -devices.device = devices.get_optimal_device() +devices.opts = opts devices.onnx = [opts.onnx_execution_provider] devices.set_cuda_params() if opts.onnx_cpu_fallback and 'CPUExecutionProvider' not in devices.onnx: