Repository navigation
Description
Git commit
null
Operating System & Version
6.18.54-Unraid
GGML backends
Vulkan
Command-line arguments used
sd-server --listen-ip 127.0.0.1 --listen-port ${PORT} --diffusion-model /models/image/minimax_h3_fl2va_pruned-Q4_K_M.gguf --llm /models/image/encode/qwen3vl_32b_minimax_h3-Q2_K_M.gguf --vae /models/image/vae/minimax_h3_video_vae_int8_convrot.safetensors --audio-vae /models/image/vae/minimax_h3_audio_vae_fp32.safetensors --cfg-scale 1.0 --steps 30 --sampling-method euler --flash-attn off,diffusion=on --conv-direct on --verbose
Steps to reproduce
align video frames from 1 to 5
generate_video 480x480x5
What you expected to happen
I would expect Video VAE decoding to make effective use of the RX 7900 XTX GPU and avoid unnecessary CPU computation or data transfers.
What actually happened
I understand that decoding performance depends heavily on video resolution, frame count, tiling, and backend implementation.
However, 309 seconds for VAE decoding alone seems unusually slow and worth investigating.
Logs / error messages / stack trace
[V] version: stable-diffusion.cpp version unknown, commit 290148d --- main.cpp:90
ggml_vulkan: Found 4 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon RX 7900 XTX (RADV NAVI31) (radv) | uma: 0 | fp16: 1 | bf16: 0 | fp4: 0 | warp size: 64 | shared memory: 65536 | int dot: 0 | matrix cores: KHR_coopmat
ggml_vulkan: 1 = Intel(R) Graphics (RPL-S) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | fp4: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
ggml_vulkan: 2 = Intel(R) Graphics (RPL-S) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | fp4: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
ggml_vulkan: 3 = Intel(R) Graphics (RPL-S) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | fp4: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
[V] System Info:
SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | BMI2 = 1 | OPENMP = 1 | REPACK = 1 | --- main.cpp:91
[V] using 14 threads for model loading --- model_loader.cpp:190
[I] loading diffusion model from '/models/image/minimax_h3_fl2va_pruned-Q4_K_M.gguf' --- diffusion_engine.cpp:692
[I] load /models/image/minimax_h3_fl2va_pruned-Q4_K_M.gguf using gguf format --- model_loader.cpp:216
[V] init from '/models/image/minimax_h3_fl2va_pruned-Q4_K_M.gguf' --- model_loader.cpp:262
[V] GGUF v3, tensor_count=532, metadata_kv_count=0 --- gguf_reader_ext.h:224
[I] loading llm from '/models/image/encode/qwen3vl_32b_minimax_h3-Q2_K_M.gguf' --- diffusion_engine.cpp:749
[I] load /models/image/encode/qwen3vl_32b_minimax_h3-Q2_K_M.gguf using gguf format --- model_loader.cpp:216
[V] init from '/models/image/encode/qwen3vl_32b_minimax_h3-Q2_K_M.gguf' --- model_loader.cpp:262
[V] GGUF v3, tensor_count=902, metadata_kv_count=0 --- gguf_reader_ext.h:224
[I] loading vae from '/models/image/vae/minimax_h3_video_vae_int8_convrot.safetensors' --- diffusion_engine.cpp:763
[I] load /models/image/vae/minimax_h3_video_vae_int8_convrot.safetensors using safetensors format --- model_loader.cpp:222
[V] init from '/models/image/vae/minimax_h3_video_vae_int8_convrot.safetensors', prefix = 'vae.' --- model_loader.cpp:290
[I] loading audio VAE from '/models/image/vae/minimax_h3_audio_vae_fp32.safetensors' --- diffusion_engine.cpp:787
[I] load /models/image/vae/minimax_h3_audio_vae_fp32.safetensors using safetensors format --- model_loader.cpp:222
[V] init from '/models/image/vae/minimax_h3_audio_vae_fp32.safetensors', prefix = '' --- model_loader.cpp:290
[I] Version: MiniMax-H3 --- diffusion_engine.cpp:975
[I] auto-fit plan: --- backend_fit.cpp:334
[I] devices: --- backend_fit.cpp:335
[I] Vulkan0 AMD Radeon RX 7900 XTX (RADV NAVI31) free 21385 MiB, budget 20873 MiB --- backend_fit.cpp:337
[I] Vulkan1 Intel(R) Graphics (RPL-S) free 8805 MiB, budget 8293 MiB --- backend_fit.cpp:337
[I] Vulkan2 Intel(R) Graphics (RPL-S) free 8805 MiB, budget 8293 MiB --- backend_fit.cpp:337
[I] Vulkan3 Intel(R) Graphics (RPL-S) free 8805 MiB, budget 8293 MiB --- backend_fit.cpp:337
[I] RAM free 9783 MiB, params budget 7735 MiB --- backend_fit.cpp:344
[I] compute-device weight cache priority: diffusion > te > vae --- backend_fit.cpp:347
[I] components (params: compute device -> RAM -> other GPU -> disk): --- backend_fit.cpp:348
[I] DiT params 10891 MiB, compute reserve 2048 MiB -> compute Vulkan0, params Vulkan0 --- backend_fit.cpp:357
[I] Conditioner params 12495 MiB, compute reserve 2048 MiB -> compute Vulkan0, params disk --- backend_fit.cpp:357
[I] VAE params 2680 MiB, compute reserve 1024 MiB -> compute Vulkan0, params cpu --- backend_fit.cpp:357
[I] auto-fit: --backend "diffusion=Vulkan0,te=Vulkan0,vae=Vulkan0" --params-backend "te=disk,vae=cpu" --- backend_fit.cpp:485
[V] Initializing backend: Vulkan0 --- ggml_extend_backend.cpp:420
[V] using 14 threads for model loading --- model_loader.cpp:190
[I] Weight type stat: f32: 1454 | f16: 137 | q2_K: 300 | q4_K: 208 | q5_K: 50 | i8: 144 | bf16: 764 --- diffusion_engine.cpp:1548
[I] Conditioner weight type stat: q2_K: 300 | q5_K: 50 | bf16: 552 --- diffusion_engine.cpp:1549
[I] Diffusion model weight type stat: f32: 10 | f16: 102 | q4_K: 208 | bf16: 212 --- diffusion_engine.cpp:1550
[I] VAE weight type stat: f32: 527 | f16: 35 | i8: 144 --- diffusion_engine.cpp:1551
[V] llm: num_layers = 50, vocab_size = 151936, hidden_size = 5120, intermediate_size = 25600 --- llm.hpp:442
[V] enable llm vision --- llm.hpp:2435
[V] minimax_h3: layers=50, hidden=5376, heads=56, head_dim=128, ffn=14336, adaln_curve=1025 --- minimax_h3.hpp:112
[V] Initializing backend: CPU --- ggml_extend_backend.cpp:420
[I] using VAE for encoding / decoding --- model_builders.cpp:210
[V] validating model metadata --- diffusion_engine.cpp:1307
[V] model metadata validated; weights will be prepared lazily --- diffusion_engine.cpp:1377
[I] total params memory size = 26730.80MB (VRAM 23472.95MB, RAM 3257.85MB): text_encoders 12497.02MB(VRAM), diffusion_model 10975.93MB(VRAM), vae 3257.85MB(RAM), controlnet 0.00MB(N/A), extensions 0.00MB(N/A) --- diffusion_engine.cpp:1423
[I] running in MiniMax H3 AV FLOW mode --- diffusion_engine.cpp:1493
[I] listening on: http://127.0.0.1:5804 --- main.cpp:170
[W] MiniMax-H3 uses 24 fps; overriding requested fps 16 --- request.cpp:171
[W] align video frames from 1 to 5 for MiniMax-H3 --- request.cpp:198
[V] using 14 threads for model loading --- model_loader.cpp:190
[I] get_sigmas with discrete scheduler --- denoiser.hpp:1129
[I] sampling using Euler method --- request.cpp:477
[V] parse 'a girl' to [['a girl', 1], ] --- conditioner.hpp:2181
[V] split prompt "a girl" to 2 tokens ["a", "Ġgirl", ] --- bpe_tokenizer.cpp:245
[I] qwen3vl build cached graph cut plan done (taking 1 ms) --- ggml_graph_cut.cpp:1032
[V] loading 551/902 tensors from /models/image/encode/qwen3vl_32b_minimax_h3-Q2_K_M.gguf --- model_loader.cpp:1152
|# | 5/551 - 0.00MB/s
|#### | 42/551 - 845.07MB/s
|###### | 62/551 - 1.92GB/s
|########## | 100/551 - 2.27GB/s
|############ | 124/551 - 2.30GB/s
|############### | 161/551 - 2.42GB/s
|################# | 187/551 - 2.49GB/s
|##################### | 221/551 - 2.44GB/s
|####################### | 246/551 - 2.47GB/s
|########################## | 280/551 - 2.45GB/s
|############################ | 306/551 - 2.52GB/s
|############################### | 334/551 - 2.50GB/s
|################################# | 356/551 - 2.49GB/s
|################################# | 356/551 - 2.30GB/s
|#################################### | 392/551 - 2.86GB/s
|####################################### | 424/551 - 2.83GB/s
|########################################### | 463/551 - 2.87GB/s
|############################################## | 496/551 - 2.88GB/s
|################################################# | 532/551 - 2.89GB/s
|##################################################| 551/551 - 2.86GB/s
[I] loading tensors completed, taking 3.88s (read: 1.01s, memcpy: 0.00s, convert: 0.00s, copy_to_backend: 2.58s) --- model_loader.cpp:1422
[V] model manager prepared params backend buffers (11360.75 MB, 551 tensors, 12 blocks, VRAM) on Vulkan0 --- model_manager.cpp:492
[V] qwen3vl compute buffer size: 0.02 MB(RAM) on CPU (peak across 1 segment) --- ggml_runner.cpp:1065
[V] qwen3vl compute buffer size: 0.66 MB(VRAM) on Vulkan0 (peak across 1 segment) --- ggml_runner.cpp:1065
[V] computing condition graph completed, taking 3969 ms --- conditioner.hpp:3287
[V] conditioning cache stored (1/4) --- conditioning_cache.h:102
[I] get_learned_condition completed, taking 3.97s --- video.cpp:1259
[V] model manager released params backend buffers (11360.75 MB, 551 tensors, 12 blocks, VRAM) from Vulkan0 --- model_manager.cpp:1297
[I] generate_video 480x480x5 --- video.cpp:1676
[V] sample 30x30x2 --- video.cpp:1742
[I] minimax_h3 build cached graph cut plan done (taking 6 ms) --- ggml_graph_cut.cpp:1032
[V] loading 532/532 tensors from /models/image/minimax_h3_fl2va_pruned-Q4_K_M.gguf --- model_loader.cpp:1152
|# | 5/532 - 0.00MB/s
|#### | 36/532 - 1.03GB/s
|###### | 61/532 - 1.88GB/s
|########## | 96/532 - 2.27GB/s
|############ | 121/532 - 2.21GB/s
|############## | 143/532 - 2.46GB/s
|################# | 177/532 - 2.49GB/s
|#################### | 206/532 - 2.57GB/s
|###################### | 231/532 - 2.63GB/s
|########################## | 267/532 - 2.68GB/s
|############################ | 295/532 - 2.76GB/s
|############################### | 327/532 - 2.78GB/s
|################################## | 358/532 - 2.80GB/s
|##################################### | 389/532 - 2.83GB/s
|######################################## | 419/532 - 2.86GB/s
|########################################### | 451/532 - 2.89GB/s
|############################################## | 481/532 - 2.90GB/s
|################################################# | 518/532 - 2.94GB/s
|##################################################| 532/532 - 2.95GB/s
[I] loading tensors completed, taking 3.60s (read: 0.80s, memcpy: 0.00s, convert: 0.01s, copy_to_backend: 2.59s) --- model_loader.cpp:1422
[V] model manager prepared params backend buffers (10975.93 MB, 532 tensors, 12 blocks, VRAM) on Vulkan0 --- model_manager.cpp:492
[V] minimax_h3 compute buffer size: 0.24 MB(RAM) on CPU (peak across 1 segment) --- ggml_runner.cpp:1065
[V] minimax_h3 compute buffer size: 113.22 MB(VRAM) on Vulkan0 (peak across 1 segment) --- ggml_runner.cpp:1065
|=> | 1/30 - 4.24s/it - ETA 02:02[I] minimax_h3 build cached graph cut plan done (taking 5 ms) --- ggml_graph_cut.cpp:1032
[V] minimax_h3 compute buffer size: 0.24 MB(RAM) on CPU (peak across 1 segment) --- ggml_runner.cpp:1065
[V] minimax_h3 compute buffer size: 113.22 MB(VRAM) on Vulkan0 (peak across 1 segment) --- ggml_runner.cpp:1065
|===> | 2/30 - 1.73it/s - ETA 01:07
|=====> | 3/30 - 1.75it/s - ETA 00:48
|======> | 4/30 - 1.76it/s - ETA 00:38
|========> | 5/30 - 1.76it/s - ETA 00:32
|==========> | 6/30 - 1.76it/s - ETA 00:28
|===========> | 7/30 - 1.76it/s - ETA 00:25
|=============> | 8/30 - 1.76it/s - ETA 00:22
|===============> | 9/30 - 1.76it/s - ETA 00:20
|================> | 10/30 - 1.76it/s - ETA 00:18
|==================> | 11/30 - 1.76it/s - ETA 00:17
|====================> | 12/30 - 1.76it/s - ETA 00:15
|=====================> | 13/30 - 1.76it/s - ETA 00:14
|=======================> | 14/30 - 1.75it/s - ETA 00:13
|=========================> | 15/30 - 1.76it/s - ETA 00:12
|==========================> | 16/30 - 1.76it/s - ETA 00:11
|============================> | 17/30 - 1.75it/s - ETA 00:10
|==============================> | 18/30 - 1.75it/s - ETA 00:09
|===============================> | 19/30 - 1.75it/s - ETA 00:08
|=================================> | 20/30 - 1.75it/s - ETA 00:07
|===================================> | 21/30 - 1.75it/s - ETA 00:06
|====================================> | 22/30 - 1.75it/s - ETA 00:05
|======================================> | 23/30 - 1.75it/s - ETA 00:05
|========================================> | 24/30 - 1.75it/s - ETA 00:04
|=========================================> | 25/30 - 1.75it/s - ETA 00:03
|===========================================> | 26/30 - 1.75it/s - ETA 00:02
|=============================================> | 27/30 - 1.75it/s - ETA 00:02
|==============================================> | 28/30 - 1.75it/s - ETA 00:01
|================================================> | 29/30 - 1.74it/s - ETA 00:00
|==================================================| 30/30 - 1.70it/s
[I] sampling completed, taking 20.79s --- video.cpp:1776
[I] generating latent video completed, taking 20.79s --- video.cpp:1920
[V] decode audio latent 8x2x32x1 --- video.cpp:1967
[I] minimax_h3_audio_vae build cached graph cut plan done (taking 7 ms) --- ggml_graph_cut.cpp:1032
[V] loading 781/917 tensors from /models/image/vae/minimax_h3_audio_vae_fp32.safetensors --- model_loader.cpp:1152
|# | 2/781 - 0.00MB/s
|##################################################| 781/781 - 1.20GB/s
[I] loading tensors completed, taking 0.20s (read: 0.07s, memcpy: 0.00s, convert: 0.00s, copy_to_backend: 0.00s) --- model_loader.cpp:1422
[V] model manager prepared params backend buffers (249.99 MB, 781 tensors, 1 blocks, RAM) on Vulkan_Host --- model_manager.cpp:492
[V] model manager staged compute params (247.64 MB, 781 tensors, 1 blocks) to Vulkan0, taking 0.05s --- model_manager.cpp:620
[V] minimax_h3_audio_vae compute buffer size: 0.01 MB(RAM) on CPU (peak across 1 segment) --- ggml_runner.cpp:1065
[V] minimax_h3_audio_vae compute buffer size: 4.30 MB(VRAM) on Vulkan0 (peak across 1 segment) --- ggml_runner.cpp:1065
[I] MiniMax-H3 audio VAE decode completed, taking 0.44s --- minimax_h3_audio_vae.hpp:494
[I] decoding audio latent completed, taking 0.44s --- video.cpp:1980
[V] decode_video_outputs latent 30x30x2x24 --- video.cpp:1281
[V] VAE decode tile size: 256x256 pixels (16x16 latent) --- vae.hpp:347
[V] num tiles : 2, 2 --- tiling.cpp:178
[V] processing 4 tiles --- tiling.cpp:179
[I] minimax_h3_video_vae build cached graph cut plan done (taking 3 ms) --- ggml_graph_cut.cpp:1032
[V] loading 585/706 tensors from /models/image/vae/minimax_h3_video_vae_int8_convrot.safetensors --- model_loader.cpp:1152
|# | 5/585 - 7.81MB/s
|#################### | 231/585 - 3.15GB/s
|#################################### | 413/585 - 3.31GB/s
|##################################################| 585/585 - 3.65GB/s
[I] loading tensors completed, taking 0.63s (read: 0.60s, memcpy: 0.00s, convert: 0.00s, copy_to_backend: 0.00s) --- model_loader.cpp:1422
[V] model manager prepared params backend buffers (2336.70 MB, 585 tensors, 3 blocks, RAM) on Vulkan_Host --- model_manager.cpp:492
[V] model manager staged compute params (2336.69 MB, 585 tensors, 3 blocks) to Vulkan0, taking 0.47s --- model_manager.cpp:620
[V] minimax_h3_video_vae compute buffer size: 7620.06 MB(RAM) on CPU (peak across 1 segment) --- ggml_runner.cpp:1065
[V] minimax_h3_video_vae compute buffer size: 493.13 MB(VRAM) on Vulkan0 (peak across 1 segment) --- ggml_runner.cpp:1065
|============> | 1/4 - 77.07s/it - ETA 03:51[I] minimax_h3_video_vae build cached graph cut plan done (taking 2 ms) --- ggml_graph_cut.cpp:1032
|=========================> | 2/4 - 76.00s/it - ETA 02:33[I] minimax_h3_video_vae build cached graph cut plan done (taking 1 ms) --- ggml_graph_cut.cpp:1032
|=====================================> | 3/4 - 78.03s/it - ETA 01:17
|==================================================| 4/4 - 78.03s/it
[V] computing vae decode graph completed, taking 309.13s --- vae.hpp:384
[I] decode_first_stage completed, taking 309.19s --- video.cpp:1290
[V] decode_video_outputs decoded 480x480x5x3 --- video.cpp:1295
[I] generate_video completed in 334.43s --- video.cpp:2008
Additional context / environment details
No response
Activity
farawayso commentedon Nov 3, 2026
Same card (RX 7900 XTX) and same commit 290148d, but on Windows + ROCm the VAE decode graph stays on the GPU:
A 1024x576x124 video decodes at ~1.9 it/s per 15-tile segment (~8 s each, decode_first_stage total ~66 s). So the decode pipeline itself is fine —your 77 s/tile looks like CPU execution of the decode graph.
The smoking gun in your log:
The 7.6 GB activation buffer did not fit the Vulkan budget, so it landed in RAM. Two things to try:
--backend "diffusion=Vulkan0,te=Vulkan0,vae=Vulkan0"
--params-backend "vae=Vulkan0" (you have ~21 GB free VRAM, which should cover the 2.3 GB staged params + 7.6 GB compute buffer).
/ "compute buffer" lines under --verbose should show which side failed.