Closed h3rmit-git closed 1 year ago
I've been struggling getting xformers to work in the past, but I believe that this is an error I haven't seen before, I'll look into. In general, I recommend --opt-split-attention
when using FABRIC, especially if using > 2 feedback images as even xformers struggles with VRAM in those cases. I'll also be looking into improving performance (speed, memory) using token mergin or similar in the near future.
I seem to be unable to reproduce the error above. It seems to occur in the VAE forward pass while multi-diffusion is enabled, but it doesn't happen for me even with the respective plugin enabled. Could you share some generation parameters to help reproduce the issue?
Below is a stacktrace without Multidiffusion.
I believe the error may be related to the version of something.
Stability AI version: https://github.com/Stability-AI/stablediffusion/commit/cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf (Mar 25, 2023)
COMMANDLINE_ARGS=--disable-safe-unpickle --medvram --xformers --no-half-vae
The option --opt-split-attention
unfortunately makes me run out of VRAM even when not using FABRIC. I'm running on 4GB of VRAM.
Traceback (most recent call last):
File "E:\stable-diffusion-webui\modules\call_queue.py", line 57, in f
res = list(func(*args, **kwargs))
File "E:\stable-diffusion-webui\modules\call_queue.py", line 37, in f
res = func(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\txt2img.py", line 57, in txt2img
processed = processing.process_images(p)
File "E:\stable-diffusion-webui\modules\processing.py", line 611, in process_images
res = process_images_inner(p)
File "E:\stable-diffusion-webui\extensions\sd-webui-controlnet\scripts\batch_hijack.py", line 42, in processing_process_images_hijack
return getattr(processing, '__controlnet_original_process_images_inner')(p, *args, **kwargs)
File "E:\stable-diffusion-webui\modules\processing.py", line 729, in process_images_inner
samples_ddim = p.sample(conditioning=p.c, unconditional_conditioning=p.uc, seeds=p.seeds, subseeds=p.subseeds, subseed_strength=p.subseed_strength, prompts=p.prompts)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\marking.py", line 28, in process_sample
return process.sample_before_CN_hack(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\processing.py", line 977, in sample
samples = self.sampler.sample(self, x, conditioning, unconditional_conditioning, image_conditioning=self.txt2img_image_conditioning(x))
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 383, in sample
samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args={
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 257, in launch_sampling
return func()
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 383, in <lambda>
samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args={
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\sampling.py", line 594, in sample_dpmpp_2m
denoised = model(x, sigmas[i] * s_in, **extra_args)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 143, in forward
x_out[a:b] = self.inner_model(x_in[a:b], sigma_in[a:b], cond=make_condition_dict([cond_in[a:b]], image_cond_in[a:b]))
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\external.py", line 112, in forward
eps = self.get_eps(input * c_in, self.sigma_to_t(sigma), **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\external.py", line 138, in get_eps
return self.inner_model.apply_model(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 17, in <lambda>
setattr(resolved_obj, func_path[-1], lambda *args, **kwargs: self(*args, **kwargs))
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 28, in __call__
return self.__orig_func(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddpm.py", line 858, in apply_model
x_recon = self.model(x_noisy, t, **cond)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1538, in _call_impl
result = forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddpm.py", line 1335, in forward
out = self.diffusion_model(x, t, context=cc)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 105, in new_forward
pos_latents, neg_latents = get_latents_from_params(p, params, w, h)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 46, in get_latents_from_params
params.pos_latents = get_latents(params.pos_images, params.pos_latents)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 36, in get_latents
return [encode_to_latent(p, img, w, h) for img in images]
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 36, in <listcomp>
return [encode_to_latent(p, img, w, h) for img in images]
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 24, in encode_to_latent
vae_output = p.sd_model.encode_first_stage(x)
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 17, in <lambda>
setattr(resolved_obj, func_path[-1], lambda *args, **kwargs: self(*args, **kwargs))
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 28, in __call__
return self.__orig_func(*args, **kwargs)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddpm.py", line 830, in encode_first_stage
return self.first_stage_model.encode(x)
File "E:\stable-diffusion-webui\modules\lowvram.py", line 48, in first_stage_model_encode_wrap
return first_stage_model_encode(x)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\autoencoder.py", line 83, in encode
h = self.encoder(x)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\model.py", line 536, in forward
h = self.mid.attn_1(h)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\model.py", line 258, in forward
out = xformers.ops.memory_efficient_attention(q, k, v, attn_bias=None, op=self.attention_op)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\weighted_attention.py", line 36, in patched_xformers_attn
bs, nq, nh, dh = q.shape # batch_size, num_queries, num_heads, dim_per_head
I unfortunately still can't reproduce the issue on my end. I tried pushing a blind fix based on the error message, but it's pretty much a shot in the dark at this point. Could you maybe provide the specific steps that lead to the error? Does it happen immediately or only after a few generations?
The error happens immediately and always. The steps I am following are:
After your last two commits that attempted to fix the issue, I am getting some new errors:
First run stacktrace:
Traceback (most recent call last):
File "E:\stable-diffusion-webui\modules\call_queue.py", line 57, in f
res = list(func(*args, **kwargs))
File "E:\stable-diffusion-webui\modules\call_queue.py", line 37, in f
res = func(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\txt2img.py", line 57, in txt2img
processed = processing.process_images(p)
File "E:\stable-diffusion-webui\modules\processing.py", line 611, in process_images
res = process_images_inner(p)
File "E:\stable-diffusion-webui\extensions\sd-webui-controlnet\scripts\batch_hijack.py", line 42, in processing_process_images_hijack
return getattr(processing, '__controlnet_original_process_images_inner')(p, *args, **kwargs)
File "E:\stable-diffusion-webui\modules\processing.py", line 729, in process_images_inner
samples_ddim = p.sample(conditioning=p.c, unconditional_conditioning=p.uc, seeds=p.seeds, subseeds=p.subseeds, subseed_strength=p.subseed_strength, prompts=p.prompts)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\marking.py", line 28, in process_sample
return process.sample_before_CN_hack(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\processing.py", line 977, in sample
samples = self.sampler.sample(self, x, conditioning, unconditional_conditioning, image_conditioning=self.txt2img_image_conditioning(x))
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 383, in sample
samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args={
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 257, in launch_sampling
return func()
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 383, in <lambda>
samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args={
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\sampling.py", line 626, in sample_dpmpp_2m_sde
denoised = model(x, sigmas[i] * s_in, **extra_args)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 143, in forward
x_out[a:b] = self.inner_model(x_in[a:b], sigma_in[a:b], cond=make_condition_dict([cond_in[a:b]], image_cond_in[a:b]))
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\external.py", line 112, in forward
eps = self.get_eps(input * c_in, self.sigma_to_t(sigma), **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\external.py", line 138, in get_eps
return self.inner_model.apply_model(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 17, in <lambda>
setattr(resolved_obj, func_path[-1], lambda *args, **kwargs: self(*args, **kwargs))
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 28, in __call__
return self.__orig_func(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddpm.py", line 858, in apply_model
x_recon = self.model(x_noisy, t, **cond)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1538, in _call_impl
result = forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddpm.py", line 1335, in forward
out = self.diffusion_model(x, t, context=cc)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 199, in new_forward
out = self._fabric_old_forward(x, timesteps, context, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\openaimodel.py", line 797, in forward
h = module(h, emb, context)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\openaimodel.py", line 84, in forward
x = layer(x, context)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\attention.py", line 334, in forward
x = block(x, context=context[i])
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\attention.py", line 269, in forward
return checkpoint(self._forward, (x, context), self.parameters(), self.checkpoint)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\util.py", line 121, in checkpoint
return CheckpointFunction.apply(func, len(inputs), *args)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\autograd\function.py", line 506, in apply
return super().apply(*args, **kwargs) # type: ignore[misc]
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\util.py", line 136, in forward
output_tensors = ctx.run_function(*ctx.input_tensors)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\attention.py", line 272, in _forward
x = self.attn1(self.norm1(x), context=context if self.disable_self_attn else None) + x
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 178, in patched_attn1_forward
out_cond = weighted_attention(attn1, attn1._fabric_old_forward, x_cond, ctx_cond, ws, **kwargs) # (n_cond, seq, dim)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\weighted_attention.py", line 163, in weighted_attention
assert _xformers_attn in locals() or _xformers_attn in globals(), "xformers attention function not found"
AssertionError: xformers attention function not found
Second run stacktrace:
Traceback (most recent call last):
File "E:\stable-diffusion-webui\modules\call_queue.py", line 57, in f
res = list(func(*args, **kwargs))
File "E:\stable-diffusion-webui\modules\call_queue.py", line 37, in f
res = func(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\txt2img.py", line 57, in txt2img
processed = processing.process_images(p)
File "E:\stable-diffusion-webui\modules\processing.py", line 611, in process_images
res = process_images_inner(p)
File "E:\stable-diffusion-webui\extensions\sd-webui-controlnet\scripts\batch_hijack.py", line 42, in processing_process_images_hijack
return getattr(processing, '__controlnet_original_process_images_inner')(p, *args, **kwargs)
File "E:\stable-diffusion-webui\modules\processing.py", line 729, in process_images_inner
samples_ddim = p.sample(conditioning=p.c, unconditional_conditioning=p.uc, seeds=p.seeds, subseeds=p.subseeds, subseed_strength=p.subseed_strength, prompts=p.prompts)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\marking.py", line 28, in process_sample
return process.sample_before_CN_hack(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\processing.py", line 977, in sample
samples = self.sampler.sample(self, x, conditioning, unconditional_conditioning, image_conditioning=self.txt2img_image_conditioning(x))
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 383, in sample
samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args={
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 257, in launch_sampling
return func()
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 383, in <lambda>
samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args={
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\sampling.py", line 626, in sample_dpmpp_2m_sde
denoised = model(x, sigmas[i] * s_in, **extra_args)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 143, in forward
x_out[a:b] = self.inner_model(x_in[a:b], sigma_in[a:b], cond=make_condition_dict([cond_in[a:b]], image_cond_in[a:b]))
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\external.py", line 112, in forward
eps = self.get_eps(input * c_in, self.sigma_to_t(sigma), **kwargs)
File "E:\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\external.py", line 138, in get_eps
return self.inner_model.apply_model(*args, **kwargs)
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 17, in <lambda>
setattr(resolved_obj, func_path[-1], lambda *args, **kwargs: self(*args, **kwargs))
File "E:\stable-diffusion-webui\modules\sd_hijack_utils.py", line 28, in __call__
return self.__orig_func(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddpm.py", line 858, in apply_model
x_recon = self.model(x_noisy, t, **cond)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1538, in _call_impl
result = forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\models\diffusion\ddpm.py", line 1335, in forward
out = self.diffusion_model(x, t, context=cc)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 156, in new_forward
_ = self._fabric_old_forward(zs, ts, ctx)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\openaimodel.py", line 797, in forward
h = module(h, emb, context)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\openaimodel.py", line 84, in forward
x = layer(x, context)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\attention.py", line 334, in forward
x = block(x, context=context[i])
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\attention.py", line 269, in forward
return checkpoint(self._forward, (x, context), self.parameters(), self.checkpoint)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\util.py", line 121, in checkpoint
return CheckpointFunction.apply(func, len(inputs), *args)
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\autograd\function.py", line 506, in apply
return super().apply(*args, **kwargs) # type: ignore[misc]
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\diffusionmodules\util.py", line 136, in forward
output_tensors = ctx.run_function(*ctx.input_tensors)
File "E:\stable-diffusion-webui\repositories\stable-diffusion-stability-ai\ldm\modules\attention.py", line 272, in _forward
x = self.attn1(self.norm1(x), context=context if self.disable_self_attn else None) + x
File "E:\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
return forward_call(*args, **kwargs)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 140, in patched_attn1_forward
out = attn1._fabric_old_forward(x, **kwargs)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\patching.py", line 178, in patched_attn1_forward
out_cond = weighted_attention(attn1, attn1._fabric_old_forward, x_cond, ctx_cond, ws, **kwargs) # (n_cond, seq, dim)
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\weighted_attention.py", line 154, in weighted_attention
if is_the_same(attn_fn, split_cross_attention_forward_invokeAI):
File "E:\stable-diffusion-webui\extensions\sd-webui-fabric\scripts\weighted_attention.py", line 147, in is_the_same
return fn1.__name__ == fn2.__name__ and fn1.__module__ == fn2.__module__
AttributeError: 'functools.partial' object has no attribute '__name__'
I've been struggling getting xformers to work in the past, but I believe that this is an error I haven't seen before, I'll look into.
I also had a look at how the Tiled Diffusion plugin does the hijacking of the attention methods, including xformers. Having used it for months in thousands of image generations without any problems, I consider this plugin to be very robust. Please have a look at the following. It's an interesting alternative hijacking approach that may provide some insights and help solve other issues as well:
Ok, I've pretty much overhauled the entire weighted attention code using a similar approach to the code you linked, which should hopefully make it more robust. Unfortunately, I still didn't have any luck reproducing your error, but I'm more confident now that it should be fixed now.
I had the same error but updating the script seems to have fixed it ! Thank you so much !
It works!
Unlike with --opt-split-attention
, which can only do 256x256 images with 4GB of VRAM, I can now generate 512x512 images with --xformers
and 4 Liked images!
However, there's still one one more bug with the patching/unpatching process. In case of an error during the generation (e.g. out of memory), the next generation enters an infinite loop (100% CPU, 0% GPU, no progress).
Awesome! I think I know what could cause the issue you’re describing, although I thought it was being handled correctly. Should be easier to reproduce as well, will have a look.
Thanks!
On the same topic of patching, there's also always a message about Fabric restoring the original U-Net, even when it's disabled. This should be relevant to the bug.
100%|██████████████████████████████████████████| 20/20 [00:56<00:00, 2.80s/it]
[FABRIC] Restoring original U-Net forward pass█| 20/20 [00:27<00:00, 1.46s/it]
Total progress: 100%|██████████████████████████| 20/20 [00:35<00:00, 1.77s/it]
100%|██████████████████████████████████████████| 20/20 [00:31<00:00, 1.60s/it]
[FABRIC] Restoring original U-Net forward pass█| 20/20 [00:27<00:00, 1.46s/it]
Total progress: 100%|██████████████████████████| 20/20 [00:33<00:00, 1.67s/it]
100%|██████████████████████████████████████████| 20/20 [00:32<00:00, 1.60s/it]
[FABRIC] Restoring original U-Net forward pass█| 20/20 [00:27<00:00, 1.47s/it]
Total progress: 100%|██████████████████████████| 20/20 [00:33<00:00, 1.66s/it]
100%|██████████████████████████████████████████| 20/20 [00:35<00:00, 1.77s/it]
[FABRIC] Restoring original U-Net forward pass█| 20/20 [00:31<00:00, 1.45s/it]
Total progress: 100%|██████████████████████████| 20/20 [00:36<00:00, 1.84s/it]
Total progress: 100%|██████████████████████████| 20/20 [00:36<00:00, 1.45s/it]```
I managed to fix the infinite loop issue and opened a Pull Request: https://github.com/dvruette/sd-webui-fabric/pull/28
Edit: I also added a fix about the above U-Net restoration message in the same Pull Request.
I am getting the following error when running FABRIC with --xformers.
The error goes away with --opt-split-attention instead of --xformers.
Versions: