Skip to content

Commit 21effd6

Browse files
committed
Add workaround for using MPS with torchsde
1 parent 98ca437 commit 21effd6

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

modules/sd_samplers.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from PIL import Image
77
import inspect
88
import k_diffusion.sampling
9+
import torchsde._brownian.brownian_interval
910
import ldm.models.diffusion.ddim
1011
import ldm.models.diffusion.plms
1112
from modules import prompt_parser, devices, processing, images
@@ -367,6 +368,19 @@ def randn_like(self, x):
367368
return torch.randn_like(x)
368369

369370

371+
# MPS fix for randn in torchsde
372+
def torchsde_randn(size, dtype, device, seed):
373+
if device.type == 'mps':
374+
generator = torch.Generator(devices.cpu).manual_seed(int(seed))
375+
return torch.randn(size, dtype=dtype, device=devices.cpu, generator=generator).to(device)
376+
else:
377+
generator = torch.Generator(device).manual_seed(int(seed))
378+
return torch.randn(size, dtype=dtype, device=device, generator=generator)
379+
380+
381+
torchsde._brownian.brownian_interval._randn = torchsde_randn
382+
383+
370384
class KDiffusionSampler:
371385
def __init__(self, funcname, sd_model):
372386
denoiser = k_diffusion.external.CompVisVDenoiser if sd_model.parameterization == "v" else k_diffusion.external.CompVisDenoiser

0 commit comments

Comments
 (0)