diff options
author | brkirch <brkirch@users.noreply.github.com> | 2022-11-29 02:24:06 +0000 |
---|---|---|
committer | brkirch <brkirch@users.noreply.github.com> | 2022-11-30 15:33:39 +0000 |
commit | 21effd629d0fdfdbbff2b20a9f4a3767e7e8bd33 (patch) | |
tree | 4e4ab56144447df9eaaad24a667bb27f8036d912 /modules/sd_samplers.py | |
parent | 98ca437edfbf71dd956d67d37f2136b12d13be0d (diff) | |
download | stable-diffusion-webui-gfx803-21effd629d0fdfdbbff2b20a9f4a3767e7e8bd33.tar.gz stable-diffusion-webui-gfx803-21effd629d0fdfdbbff2b20a9f4a3767e7e8bd33.tar.bz2 stable-diffusion-webui-gfx803-21effd629d0fdfdbbff2b20a9f4a3767e7e8bd33.zip |
Add workaround for using MPS with torchsde
Diffstat (limited to 'modules/sd_samplers.py')
-rw-r--r-- | modules/sd_samplers.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index 5fefb227..8b11f569 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -6,6 +6,7 @@ import tqdm from PIL import Image
import inspect
import k_diffusion.sampling
+import torchsde._brownian.brownian_interval
import ldm.models.diffusion.ddim
import ldm.models.diffusion.plms
from modules import prompt_parser, devices, processing, images
@@ -367,6 +368,19 @@ class TorchHijack: return torch.randn_like(x)
+# MPS fix for randn in torchsde
+def torchsde_randn(size, dtype, device, seed):
+ if device.type == 'mps':
+ generator = torch.Generator(devices.cpu).manual_seed(int(seed))
+ return torch.randn(size, dtype=dtype, device=devices.cpu, generator=generator).to(device)
+ else:
+ generator = torch.Generator(device).manual_seed(int(seed))
+ return torch.randn(size, dtype=dtype, device=device, generator=generator)
+
+
+torchsde._brownian.brownian_interval._randn = torchsde_randn
+
+
class KDiffusionSampler:
def __init__(self, funcname, sd_model):
denoiser = k_diffusion.external.CompVisVDenoiser if sd_model.parameterization == "v" else k_diffusion.external.CompVisDenoiser
|