Skip to content

Commit 860bf8e

Browse files
committed
[IPEX] Support SDE samplers
This is a W/A since `torch.Generator()` API doesn't support `xpu` backend at the moment. So replacing it with `torch.xpu.Generator()` API provided by IPEX.
1 parent 45d50bd commit 860bf8e

File tree

3 files changed

+5
-8
lines changed

3 files changed

+5
-8
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# defaults
22
__pycache__
33
.ruff_cache
4+
.vscode
45
/cache.json
56
/metadata.json
67
/config.json

modules/devices.py

+3
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ def set_cuda_params():
206206
args[4].to("cpu") if args[4] is not None else args[4],
207207
args[5], args[6], args[7], args[8]).to(get_cuda_device_string()),
208208
lambda *args, **kwargs: args[1].device != torch.device("cpu"))
209+
CondFunc('torchsde._brownian.brownian_interval._randn',
210+
lambda _, size, dtype, device, seed: torch.randn(size, dtype=dtype, device=device, generator=torch.xpu.Generator(device).manual_seed(int(seed))),
211+
lambda _, size, dtype, device, seed: device != torch.device("cpu"))
209212

210213
cpu = torch.device("cpu")
211214
device = device_interrogate = device_gfpgan = device_esrgan = device_codeformer = None

modules/sd_samplers_kdiffusion.py

+1-8
Original file line numberDiff line numberDiff line change
@@ -326,14 +326,7 @@ def create_noise_sampler(self, x, sigmas, p):
326326
sigma_max = sigmas.max()
327327

328328
current_iter_seeds = p.all_seeds[p.iteration * p.batch_size:(p.iteration + 1) * p.batch_size]
329-
if devices.backend == 'ipex': #Remove this after Intel adds support for torch.Generator()
330-
try:
331-
return BrownianTreeNoiseSampler(x.to("cpu"), sigma_min, sigma_max, seed=current_iter_seeds, transform=lambda x: x.to("cpu"), transform_last=lambda x: x.to(shared.device)) # pylint: disable=E1123
332-
except Exception:
333-
shared.log.error("Please apply this patch to repositories/k-diffusion/k_diffusion/sampling.py: https://github.com/crowsonkb/k-diffusion/pull/68/files")
334-
return None
335-
else:
336-
return BrownianTreeNoiseSampler(x, sigma_min, sigma_max, seed=current_iter_seeds)
329+
return BrownianTreeNoiseSampler(x, sigma_min, sigma_max, seed=current_iter_seeds)
337330

338331
def sample_img2img(self, p, x, noise, conditioning, unconditional_conditioning, steps=None, image_conditioning=None):
339332
steps, t_enc = sd_samplers_common.setup_img2img_steps(p, steps)

0 commit comments

Comments
 (0)