add z-image support by leejet · Pull Request #1020 · leejet/stable-diffusion.cpp
.\build\bin\sd.exe --diffusion-model models/z-image/z_image_turbo-Q8_0.gguf --vae models/flux-extra/diffusion_pytorch_model.safetensors --llm models/z-image/qwen_3_4b.safetensors --preview proj -p "girl" 我生成的图片怎么是黑色的,纯黑,没有任何图像,谢谢
@popters Please create an issue describing your environment, such as the commit you are using, the backend, etc., or search for existing issues and provide the relevant information.
你好,我用的是这种
(mkdir build && cd build
cmake .. -DSD_CUDA=ON
cmake --build . --config Release)方式编译的sd,生成的图片就是黑色,
但是用这种
(mkdir build && cd build
cmake ..
cmake --build . --config Release)
就可以正常生成,CPU可用GPU不行
这是用CPU编译后执行的日志信息:
(Q:\stable-diffusion.cpp>.\build\bin\Release\sd.exe --diffusion-model models/z-image/z_image_turbo-Q3_K.gguf --vae models/extra/ae.safetensors --llm models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf --cfg-scale 1 --steps 8 -W 512 -H 512 --vae-tile-size 64 -v --preview proj -p "a cat"
System Info:
SSE3 = 1 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | VSX = 0 | SDCliParams {
mode: img_gen,
output_path: "output.png",
verbose: true,
color: false,
canny_preprocess: false,
preview_method: proj,
preview_interval: 1,
preview_path: "preview.png",
preview_fps: 4,
taesd_preview: false,
preview_noisy: false
}
SDContextParams {
n_threads: 6,
model_path: "",
clip_l_path: "",
clip_g_path: "",
clip_vision_path: "",
t5xxl_path: "",
llm_path: "models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf",
llm_vision_path: "",
diffusion_model_path: "models/z-image/z_image_turbo-Q3_K.gguf",
high_noise_diffusion_model_path: "",
vae_path: "models/extra/ae.safetensors",
taesd_path: "",
esrgan_path: "",
control_net_path: "",
embedding_dir: "",
embeddings: {
}
wtype: NONE,
tensor_type_rules: "",
lora_model_dir: "",
photo_maker_path: "",
rng_type: cuda,
sampler_rng_type: NONE,
flow_shift: INF
offload_params_to_cpu: false,
control_net_cpu: false,
clip_on_cpu: false,
vae_on_cpu: false,
diffusion_flash_attn: false,
diffusion_conv_direct: false,
vae_conv_direct: false,
chroma_use_dit_mask: true,
chroma_use_t5_mask: false,
chroma_t5_mask_pad: 1,
prediction: NONE,
lora_apply_mode: auto,
vae_tiling_params: { 0, 64, 64, 0.5, 0, 0 },
force_sdxl_vae_conv_scale: false
}
SDGenerationParams {
prompt: "a cat",
negative_prompt: "",
clip_skip: -1,
width: 512,
height: 512,
batch_count: 1,
init_image_path: "",
end_image_path: "",
mask_image_path: "",
control_image_path: "",
ref_image_paths: [],
control_video_path: "",
auto_resize_ref_image: true,
increase_ref_index: false,
pm_id_images_dir: "",
pm_id_embed_path: "",
pm_style_strength: 20,
skip_layers: [7, 8, 9],
sample_params: (txt_cfg: 1.00, img_cfg: 1.00, distilled_guidance: 3.50, slg.layer_count: 3, slg.layer_start: 0.01, slg.layer_end: 0.20, slg.scale: 0.00, scheduler: NONE, sample_method: NONE, sample_steps: 8, eta: 0.00, shifted_timestep: 0),
high_noise_skip_layers: [7, 8, 9],
high_noise_sample_params: (txt_cfg: 7.00, img_cfg: 7.00, distilled_guidance: 3.50, slg.layer_count: 3, slg.layer_start: 0.01, slg.layer_end: 0.20, slg.scale: 0.00, scheduler: NONE, sample_method: NONE, sample_steps: 20, eta: 0.00, shifted_timestep: 0),
easycache_option: "",
easycache: disabled (threshold=0, start=1.4013e-45, end=0),
moe_boundary: 0.875,
video_frames: 1,
fps: 16,
vace_strength: 1,
strength: 0.75,
control_strength: 0.9,
seed: 42,
upscale_repeats: 1,
}
[DEBUG] stable-diffusion.cpp:190 - Using CPU backend
[INFO ] stable-diffusion.cpp:235 - loading diffusion model from 'models/z-image/z_image_turbo-Q3_K.gguf'
[INFO ] model.cpp:370 - load models/z-image/z_image_turbo-Q3_K.gguf using gguf format
[DEBUG] model.cpp:412 - init from 'models/z-image/z_image_turbo-Q3_K.gguf'
[INFO ] stable-diffusion.cpp:282 - loading llm from 'models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf'
[INFO ] model.cpp:370 - load models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf using gguf format
[DEBUG] model.cpp:412 - init from 'models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf'
[INFO ] stable-diffusion.cpp:296 - loading vae from 'models/extra/ae.safetensors'
[INFO ] model.cpp:373 - load models/extra/ae.safetensors using safetensors format
[DEBUG] model.cpp:503 - init from 'models/extra/ae.safetensors', prefix = 'vae.'
[INFO ] stable-diffusion.cpp:312 - Version: Z-Image
[INFO ] stable-diffusion.cpp:340 - Weight type stat: f32: 640 | q8_0: 22 | q3_K: 180 | q4_K: 216 | q6_K: 37
[INFO ] stable-diffusion.cpp:341 - Conditioner weight type stat: f32: 145 | q4_K: 216 | q6_K: 37
[INFO ] stable-diffusion.cpp:342 - Diffusion model weight type stat: f32: 251 | q8_0: 22 | q3_K: 180
[INFO ] stable-diffusion.cpp:343 - VAE weight type stat: f32: 244
[DEBUG] stable-diffusion.cpp:345 - ggml tensor size = 400 bytes
[DEBUG] llm.hpp:285 - merges size 151387
[DEBUG] llm.hpp:317 - vocab size: 151669
[DEBUG] llm.hpp:1134 - llm: num_layers = 36, vocab_size = 151936, hidden_size = 2560, intermediate_size = 9728
[DEBUG] ggml_extend.hpp:1883 - qwen3 params backend buffer size = 3555.38 MB(RAM) (398 tensors)
[DEBUG] ggml_extend.hpp:1883 - z_image params backend buffer size = 2997.90 MB(RAM) (453 tensors)
[DEBUG] ggml_extend.hpp:1883 - vae params backend buffer size = 94.57 MB(RAM) (138 tensors)
[DEBUG] stable-diffusion.cpp:688 - loading weights
[DEBUG] model.cpp:1351 - using 6 threads for model loading
[DEBUG] model.cpp:1373 - loading tensors from models/z-image/z_image_turbo-Q3_K.gguf
|====================> | 453/1095 - 728.30it/s�[K
[DEBUG] model.cpp:1373 - loading tensors from models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf
|======================================> | 851/1095 - 520.81it/s�[K
[DEBUG] model.cpp:1373 - loading tensors from models/extra/ae.safetensors
|==================================================| 1095/1095 - 596.41it/s�[K
[INFO ] model.cpp:1580 - loading tensors completed, taking 1.84s (process: 0.00s, read: 1.11s, memcpy: 0.00s, convert: 0.13s, copy_to_backend: 0.00s)
[DEBUG] stable-diffusion.cpp:720 - finished loaded file
[INFO ] stable-diffusion.cpp:792 - total params memory size = 6647.85MB (VRAM 0.00MB, RAM 6647.85MB): text_encoders 3555.38MB(RAM), diffusion_model 2997.90MB(RAM), vae 94.57MB(RAM), controlnet 0.00MB(VRAM), pmid 0.00MB(RAM)
[INFO ] stable-diffusion.cpp:860 - running in FLOW mode
[DEBUG] stable-diffusion.cpp:3154 - generate_image 512x512
[INFO ] stable-diffusion.cpp:3185 - sampling using Euler method
[INFO ] denoiser.hpp:364 - get_sigmas with discrete scheduler
[INFO ] stable-diffusion.cpp:3298 - TXT2IMG
[DEBUG] conditioner.hpp:1671 - parse '<|im_start|>user
a cat<|im_end|>
<|im_start|>assistant
' to [['<|im_start|>user
', 1], ['a cat', 1], ['<|im_end|>
<|im_start|>assistant
', 1], ]
[DEBUG] llm.hpp:259 - split prompt "<|im_start|>user
" to tokens ["<|im_start|>", "user", "Ċ", ]
[DEBUG] llm.hpp:259 - split prompt "a cat" to tokens ["a", "Ġcat", ]
[DEBUG] llm.hpp:259 - split prompt "<|im_end|>
<|im_start|>assistant
" to tokens ["<|im_end|>", "Ċ", "<|im_start|>", "assistant", "Ċ", ]
[DEBUG] ggml_extend.hpp:1697 - qwen3 compute buffer size: 1.09 MB(RAM)
[DEBUG] conditioner.hpp:1884 - computing condition graph completed, taking 265 ms
[INFO ] stable-diffusion.cpp:2929 - get_learned_condition completed, taking 266 ms
[INFO ] stable-diffusion.cpp:3040 - generating image: 1/1 - seed 42
[DEBUG] ggml_extend.hpp:1697 - z_image compute buffer size: 221.56 MB(RAM)
|==================================================| 8/8 - 68.54s/it�[K
[INFO ] stable-diffusion.cpp:3082 - sampling completed, taking 548.42s
[INFO ] stable-diffusion.cpp:3093 - generating 1 latent images completed, taking 548.76s
[INFO ] stable-diffusion.cpp:3096 - decoding 1 latents
[DEBUG] ggml_extend.hpp:1697 - vae compute buffer size: 1664.00 MB(RAM)
[DEBUG] stable-diffusion.cpp:2301 - computing vae decode graph completed, taking 23.93s
[INFO ] stable-diffusion.cpp:3106 - latent 1 decoded, taking 23.93s
[INFO ] stable-diffusion.cpp:3110 - decode_first_stage completed, taking 23.94s
[INFO ] stable-diffusion.cpp:3406 - generate_image completed in 572.97s
save result PNG image to 'output.png' (success))
可以正常生成图片,说明模型和参数没有问题。
### 这是用GPU编译后生成的日志信息:
(Q:\2stable-diffusion.cpp>.\build\bin\Release\sd.exe --diffusion-model models/z-image/z_image_turbo-Q3_K.gguf --vae models/extra/ae.safetensors --llm models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf --cfg-scale 1 --steps 8 -W 512 -H 512 --vae-tile-size 64 -v --preview proj -p "a cat"
System Info:
SSE3 = 1 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | VSX = 0 | SDCliParams {
mode: img_gen,
output_path: "output.png",
verbose: true,
color: false,
canny_preprocess: false,
preview_method: proj,
preview_interval: 1,
preview_path: "preview.png",
preview_fps: 4,
taesd_preview: false,
preview_noisy: false
}
SDContextParams {
n_threads: 6,
model_path: "",
clip_l_path: "",
clip_g_path: "",
clip_vision_path: "",
t5xxl_path: "",
llm_path: "models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf",
llm_vision_path: "",
diffusion_model_path: "models/z-image/z_image_turbo-Q3_K.gguf",
high_noise_diffusion_model_path: "",
vae_path: "models/extra/ae.safetensors",
taesd_path: "",
esrgan_path: "",
control_net_path: "",
embedding_dir: "",
wtype: NONE,
tensor_type_rules: "",
lora_model_dir: "",
photo_maker_path: "",
rng_type: cuda,
sampler_rng_type: NONE,
flow_shift: INF
offload_params_to_cpu: false,
control_net_cpu: false,
clip_on_cpu: false,
vae_on_cpu: false,
diffusion_flash_attn: false,
diffusion_conv_direct: false,
vae_conv_direct: false,
chroma_use_dit_mask: true,
chroma_use_t5_mask: false,
chroma_t5_mask_pad: 1,
prediction: NONE,
lora_apply_mode: auto,
vae_tiling_params: { 0, 64, 64, 0.5, 0, 0 },
force_sdxl_vae_conv_scale: false
}
SDGenerationParams {
prompt: "a cat",
negative_prompt: "",
clip_skip: -1,
width: 512,
height: 512,
batch_count: 1,
init_image_path: "",
end_image_path: "",
mask_image_path: "",
control_image_path: "",
ref_image_paths: [],
control_video_path: "",
auto_resize_ref_image: true,
increase_ref_index: false,
pm_id_images_dir: "",
pm_id_embed_path: "",
pm_style_strength: 20,
skip_layers: [7, 8, 9],
sample_params: (txt_cfg: 1.00, img_cfg: 1.00, distilled_guidance: 3.50, slg.layer_count: 3, slg.layer_start: 0.01, slg.layer_end: 0.20, slg.scale: 0.00, scheduler: NONE, sample_method: NONE, sample_steps: 8, eta: 0.00, shifted_timestep: 0),
high_noise_skip_layers: [7, 8, 9],
high_noise_sample_params: (txt_cfg: 7.00, img_cfg: 7.00, distilled_guidance: 3.50, slg.layer_count: 3, slg.layer_start: 0.01, slg.layer_end: 0.20, slg.scale: 0.00, scheduler: NONE, sample_method: NONE, sample_steps: 20, eta: 0.00, shifted_timestep: 0),
easycache_option: "",
easycache: disabled (threshold=0, start=0, end=0),
moe_boundary: 0.875,
video_frames: 1,
fps: 16,
vace_strength: 1,
strength: 0.75,
control_strength: 0.9,
seed: 42,
upscale_repeats: 1,
}
[DEBUG] stable-diffusion.cpp:160 - Using CUDA backend
[INFO ] ggml_extend.hpp:69 - ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
[INFO ] ggml_extend.hpp:69 - ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
[INFO ] ggml_extend.hpp:69 - ggml_cuda_init: found 1 CUDA devices:
[INFO ] ggml_extend.hpp:69 - Device 0: Tesla V100-SXM2-16GB, compute capability 7.0, VMM: yes
[INFO ] stable-diffusion.cpp:235 - loading diffusion model from 'models/z-image/z_image_turbo-Q3_K.gguf'
[INFO ] model.cpp:370 - load models/z-image/z_image_turbo-Q3_K.gguf using gguf format
[DEBUG] model.cpp:412 - init from 'models/z-image/z_image_turbo-Q3_K.gguf'
[INFO ] stable-diffusion.cpp:282 - loading llm from 'models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf'
[INFO ] model.cpp:370 - load models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf using gguf format
[DEBUG] model.cpp:412 - init from 'models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf'
[INFO ] stable-diffusion.cpp:296 - loading vae from 'models/extra/ae.safetensors'
[INFO ] model.cpp:373 - load models/extra/ae.safetensors using safetensors format
[DEBUG] model.cpp:503 - init from 'models/extra/ae.safetensors', prefix = 'vae.'
[INFO ] stable-diffusion.cpp:312 - Version: Z-Image
[INFO ] stable-diffusion.cpp:340 - Weight type stat: f32: 640 | q8_0: 22 | q3_K: 180 | q4_K: 216 | q6_K: 37
[INFO ] stable-diffusion.cpp:341 - Conditioner weight type stat: f32: 145 | q4_K: 216 | q6_K: 37
[INFO ] stable-diffusion.cpp:342 - Diffusion model weight type stat: f32: 251 | q8_0: 22 | q3_K: 180
[INFO ] stable-diffusion.cpp:343 - VAE weight type stat: f32: 244
[DEBUG] stable-diffusion.cpp:345 - ggml tensor size = 400 bytes
[DEBUG] llm.hpp:285 - merges size 151387
[DEBUG] llm.hpp:317 - vocab size: 151669
[DEBUG] llm.hpp:1134 - llm: num_layers = 36, vocab_size = 151936, hidden_size = 2560, intermediate_size = 9728
[DEBUG] ggml_extend.hpp:1883 - qwen3 params backend buffer size = 3555.38 MB(VRAM) (398 tensors)
[DEBUG] ggml_extend.hpp:1883 - z_image params backend buffer size = 2997.93 MB(VRAM) (453 tensors)
[DEBUG] ggml_extend.hpp:1883 - vae params backend buffer size = 94.57 MB(VRAM) (138 tensors)
[DEBUG] stable-diffusion.cpp:684 - loading weights
[DEBUG] model.cpp:1351 - using 6 threads for model loading
[DEBUG] model.cpp:1373 - loading tensors from models/z-image/z_image_turbo-Q3_K.gguf
|====================> | 453/1095 - 351.16it/s�[K
[DEBUG] model.cpp:1373 - loading tensors from models/z-image/Qwen3-4B-Instruct-2507-Q4_K_M.gguf
|======================================> | 851/1095 - 288.57it/s�[K
[DEBUG] model.cpp:1373 - loading tensors from models/extra/ae.safetensors
|==================================================| 1095/1095 - 347.62it/s�[K
[INFO ] model.cpp:1580 - loading tensors completed, taking 3.15s (process: 0.00s, read: 1.06s, memcpy: 0.00s, convert: 0.10s, copy_to_backend: 0.73s)
[DEBUG] stable-diffusion.cpp:716 - finished loaded file
[INFO ] stable-diffusion.cpp:788 - total params memory size = 6647.88MB (VRAM 6647.88MB, RAM 0.00MB): text_encoders 3555.38MB(VRAM), diffusion_model 2997.93MB(VRAM), vae 94.57MB(VRAM), controlnet 0.00MB(VRAM), pmid 0.00MB(VRAM)
[INFO ] stable-diffusion.cpp:856 - running in FLOW mode
[DEBUG] stable-diffusion.cpp:3152 - generate_image 512x512
[INFO ] stable-diffusion.cpp:3183 - sampling using Euler method
[INFO ] denoiser.hpp:364 - get_sigmas with discrete scheduler
[INFO ] stable-diffusion.cpp:3296 - TXT2IMG
[DEBUG] conditioner.hpp:1701 - parse '<|im_start|>user
a cat<|im_end|>
<|im_start|>assistant
' to [['<|im_start|>user
', 1], ['a cat', 1], ['<|im_end|>
<|im_start|>assistant
', 1], ]
[DEBUG] llm.hpp:259 - split prompt "<|im_start|>user
" to tokens ["<|im_start|>", "user", "Ċ", ]
[DEBUG] llm.hpp:259 - split prompt "a cat" to tokens ["a", "Ġcat", ]
[DEBUG] llm.hpp:259 - split prompt "<|im_end|>
<|im_start|>assistant
" to tokens ["<|im_end|>", "Ċ", "<|im_start|>", "assistant", "Ċ", ]
[DEBUG] ggml_extend.hpp:1697 - qwen3 compute buffer size: 1.09 MB(VRAM)
[DEBUG] conditioner.hpp:1914 - computing condition graph completed, taking 82 ms
[INFO ] stable-diffusion.cpp:2927 - get_learned_condition completed, taking 83 ms
[INFO ] stable-diffusion.cpp:3038 - generating image: 1/1 - seed 42
[DEBUG] ggml_extend.hpp:1697 - z_image compute buffer size: 206.34 MB(VRAM)
|==================================================| 8/8 - 2.46it/s�[K
[INFO ] stable-diffusion.cpp:3080 - sampling completed, taking 3.32s
[INFO ] stable-diffusion.cpp:3091 - generating 1 latent images completed, taking 3.36s
[INFO ] stable-diffusion.cpp:3094 - decoding 1 latents
[DEBUG] ggml_extend.hpp:1697 - vae compute buffer size: 1664.25 MB(VRAM)
[DEBUG] stable-diffusion.cpp:2297 - computing vae decode graph completed, taking 0.25s
[INFO ] stable-diffusion.cpp:3104 - latent 1 decoded, taking 0.25s
[INFO ] stable-diffusion.cpp:3108 - decode_first_stage completed, taking 0.25s
[INFO ] stable-diffusion.cpp:3404 - generate_image completed in 3.71s
save result PNG image to 'output.png' (success))