From 97a5faed4c01cdb7de2840239d317eb7759130c7 Mon Sep 17 00:00:00 2001 From: Disty0 Date: Tue, 13 Aug 2024 23:24:42 +0300 Subject: [PATCH] Fix qint4 --- modules/sd_models.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/sd_models.py b/modules/sd_models.py index 481838943..3f98e7d64 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -763,6 +763,12 @@ def set_diffuser_offload(sd_model, op: str = 'model'): sd_model.enable_sequential_cpu_offload(device=devices.device) sd_model.has_accelerate = True +def normalize_device(device): + if torch.device(device).type in {"cpu", "mps"}: + return torch.device(device) + if torch.device(device).index is None: + return torch.device(str(device) + ":0") + return torch.device(device) def move_model(model, device=None, force=False): if model is None or device is None: @@ -789,9 +795,13 @@ def move_model(model, device=None, force=False): shared.log.error(f'Model move execution device: device={device} {e}') if getattr(model, 'has_accelerate', False) and not force: return + if hasattr(model, "device") and normalize_device(model.device) == normalize_device(device): + return try: try: model.to(device) + if hasattr(model, "prior_pipe"): + model.prior_pipe.to(device) except Exception as e0: if 'Cannot copy out of meta tensor' in str(e0): if hasattr(model, "components"): @@ -809,8 +819,6 @@ def move_model(model, device=None, force=False): pass # ignore model move if sequential offload is enabled else: raise e0 - if hasattr(model, "prior_pipe"): - model.prior_pipe.to(device) except Exception as e1: shared.log.error(f'Model move: device={device} {e1}') devices.torch_gc()