diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-12-02 06:44:00 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-02 06:44:00 +0000 |
commit | e12a26c25358ccb76825e33ab0242ff262fceb1b (patch) | |
tree | 65ce6456156b50211cec6815cd223c650390b78b | |
parent | 600036d158e45c688fc99dcbbb6792d00094f6d6 (diff) | |
parent | 81c00728b8ec0b6c0e70ea10c7687aad065a95cb (diff) | |
download | stable-diffusion-webui-gfx803-e12a26c25358ccb76825e33ab0242ff262fceb1b.tar.gz stable-diffusion-webui-gfx803-e12a26c25358ccb76825e33ab0242ff262fceb1b.tar.bz2 stable-diffusion-webui-gfx803-e12a26c25358ccb76825e33ab0242ff262fceb1b.zip |
Merge pull request #14046 from hidenorly/AddFP32FallbackSupportOnSdVaeApprox
Add FP32 fallback support on sd_vae_approx
-rw-r--r-- | modules/mac_specific.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/modules/mac_specific.py b/modules/mac_specific.py index 89256c5b..d96d86d7 100644 --- a/modules/mac_specific.py +++ b/modules/mac_specific.py @@ -1,6 +1,7 @@ import logging import torch +from torch import Tensor import platform from modules.sd_hijack_utils import CondFunc from packaging import version @@ -51,6 +52,17 @@ def cumsum_fix(input, cumsum_func, *args, **kwargs): return cumsum_func(input, *args, **kwargs) +# MPS workaround for https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/14046 +def interpolate_with_fp32_fallback(orig_func, *args, **kwargs) -> Tensor: + try: + return orig_func(*args, **kwargs) + except RuntimeError as e: + if "not implemented for" in str(e) and "Half" in str(e): + input_tensor = args[0] + return orig_func(input_tensor.to(torch.float32), *args[1:], **kwargs).to(input_tensor.dtype) + else: + print(f"An unexpected RuntimeError occurred: {str(e)}") + if has_mps: if platform.mac_ver()[0].startswith("13.2."): # MPS workaround for https://github.com/pytorch/pytorch/issues/95188, thanks to danieldk (https://github.com/explosion/curated-transformers/pull/124) @@ -77,6 +89,9 @@ if has_mps: # MPS workaround for https://github.com/pytorch/pytorch/issues/96113 CondFunc('torch.nn.functional.layer_norm', lambda orig_func, x, normalized_shape, weight, bias, eps, **kwargs: orig_func(x.float(), normalized_shape, weight.float() if weight is not None else None, bias.float() if bias is not None else bias, eps).to(x.dtype), lambda _, input, *args, **kwargs: len(args) == 4 and input.device.type == 'mps') + # MPS workaround for https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/14046 + CondFunc('torch.nn.functional.interpolate', interpolate_with_fp32_fallback, None) + # MPS workaround for https://github.com/pytorch/pytorch/issues/92311 if platform.processor() == 'i386': for funcName in ['torch.argmax', 'torch.Tensor.argmax']: |