leejet / stable-diffusion.cpp

Stable Diffusion and Flux in pure C/C++
MIT License
3.39k stars 287 forks source link

Corrupted images on Vukan backend #439

Open wbruna opened 1 day ago

wbruna commented 1 day ago

I'm getting either corrupted or inconsistent images on Vulkan backend, for any resolution other than 512x512.

My system is a Linux PC with a Ryzen 3400G, almost-vanilla Debian 12 (using the distro graphic stack). All following tests with: --type f16 --lora-model-dir ./LoRA --model ./SD/dreamshaper_8.safetensors --prompt 'a fantasy character, detailed background, colorful<lora:lcm-lora-sdv1-5:1>' --cfg-scale 1.0 --sampling-method lcm --steps 4 --rng cuda --seed 42 -b 1 --color , and a script alternating resolution and compiled binary (Vulkan or CPU backend).

320x512:

Vulkan 1 Vulkan 2 CPU
320x512_vulkan1 320x512_vulkan2 320x512_cpu

Vulkan images look ok-ish (for such a small resolution anyway), but the same seed should produce the same image. And the CPU render looks quite different.

Second test, 384x384; similar behavior (changes between Vulkan 1 and 2 may not be apparent on the thumbnail):

Vulkan 1 Vulkan 2 CPU
384x384_vulkan1 384x384_vulkan2 384x384_cpu

The third test, 448x448, gets weird:

Vulkan 1 Vulkan 2 CPU
448x448_vulkan1 448x448_vulkan2 448x448_cpu

At first, I blamed my PC drivers. But then, the 512x512 test:

Vulkan 1 Vulkan 2 CPU
512x512_vulkan1 512x512_vulkan2 512x512_cpu

Looks absolutely fine, and identical between Vulkan and CPU.

In summary:

(related: #122 )

stduhpf commented 1 day ago

Good catch. Using the same prompt, i get a smilar behavior as you. Though I don't get anything as dramatic as your 448x448 results. (I only get variations of your "Vulkan 1" images, no matter how many times I try).

I might try to investigate what's going on, but I'm not confident I'll figure it out.

stduhpf commented 1 day ago

@0cc4m Do you have a clue?

stduhpf commented 1 day ago

This also happens with images bigger than 512x512 if the resolution isn't a multiple of 128...