Summary
MiniMax-H3 Ref2VA / keyframe I2V conditioning hangs the GPU when run on the ROCm backend of the Unsloth fork build, while the identical workload completes on the CPU backend. Tested across two ROCm versions (7.2.4 and 7.14), multiple resolutions (384×640, 640×384, 544×960, 960×544), and both Studio-spawned and shell-launched invocations. Text-to-video works fine on the same installation; only the image/ref-conditioning path is affected.
Environment
- HW: AMD Radeon RX 7900 XTX (gfx1100), 24 GB; Ryzen 9 9950X, 64 GB RAM
- OS: Ubuntu 24.04 (LXC, GPU passthrough via /dev/kfd + /dev/dri)
- Binary: self-compiled Unsloth fork
13b9d92 (H3 fixes) — sd-cli --mode vid_gen
- ROCm runtime tested: 7.2.4 (segfault variant) and 7.14.0 (hang variant)
- Models:
minimax_h3_ref2va_pruned-Q5_0.gguf + minimax_h3_fl2va_pruned-Q5_0.gguf + qwen3vl 32B encoder + fp16 video VAE + fp32 audio VAE
Repro
sd-cli --mode vid_gen --offload-to-cpu \
--backend "vae=cpu,clip=cpu,diffusion=ROCm0" --vae-conv-direct \
--diffusion-model .../minimax_h3_ref2va_pruned-Q5_0.gguf \
--vae .../minimax_h3_video_vae_fp16.safetensors \
--audio-vae .../minimax_h3_audio_vae_fp32.safetensors \
--llm .../qwen3vl_32b_minimax_h3-Q4_K_M.gguf \
--ref-image <ref.png> \
--prompt "lantern" --cfg-scale 1 --width 640 --height 384 --rng cpu --fps 24 \
--video-frames 33 --steps 8 --flow-shift 12 --seed 42 \
--output out.webm
Behavior matrix (all tested on this host)
| ROCm |
Backend |
I2V (keyframe/ref) |
Result |
| 7.2.4 |
GPU |
T2V 640-960 |
✅ works |
| 7.2.4 |
GPU |
I2V 640×384 |
❌ SIGSEGV (exit 139) inside libamdhip64, first sampling step |
| 7.2.4 |
GPU |
I2V 960×544 |
❌ SIGSEGV |
| 7.14 |
GPU |
I2V any resolution |
❌ HANG: main thread busy-loops sched_yield() inside libamdhip64; HSA threads wait on GPU events; 0% GPU, VRAM flat, killed after 25+ min |
| 7.14 |
CPU backend |
I2V |
✅ completes (proves conditioning logic + weights are sound) |
gdb backtrace (7.14 hang, main thread)
#0 __GI_sched_yield ()
#1-#11 ?? () from /opt/rocm-7.14/rocm/core-7.14/lib/libamdhip64.so.7
Thread 1 spins in a HIP busy-wait; HSA async threads wait on GPU events that never fire. A GPU kernel launched by the keyframe/ref conditioning encode never completes on gfx1100.
What we ruled out
- Resolution (640→960, portrait and landscape)
- Quantization (Q3_K_XL, Q4_K, Q5_0, Q6_K)
- Image format / staged-file presence (valid PNG verified by md5 before each run)
- Studio wrapper flags (
--diffusion-fa, --max-vram -1, --stream-layers — all removed, same result)
--end-img presence (FLF2V full contract — same crash)
- VRAM pressure (hang occurs at 1.5 GB used, before weights finish loading)
- The Unsloth fork's H3 fixes (CPU backend runs the same conditioning fine — logic is sound, kernel launch is what dies)
Impact
Any I2V / Ref2VA use on gfx1100 with ROCm is blocked. The workaround is running the diffusion model on CPU too (--offload-to-cpu without any GPU backend assignment), which costs ~97 min for a 5-second clip at 544×960/30 steps vs an expected few minutes on GPU.
Happy to provide additional traces, HSA logs (HSA_ENABLE_SDMA=0 was also tested — no change), or test builds.
Summary
MiniMax-H3 Ref2VA / keyframe I2V conditioning hangs the GPU when run on the ROCm backend of the Unsloth fork build, while the identical workload completes on the CPU backend. Tested across two ROCm versions (7.2.4 and 7.14), multiple resolutions (384×640, 640×384, 544×960, 960×544), and both Studio-spawned and shell-launched invocations. Text-to-video works fine on the same installation; only the image/ref-conditioning path is affected.
Environment
13b9d92(H3 fixes) —sd-cli --mode vid_genminimax_h3_ref2va_pruned-Q5_0.gguf+minimax_h3_fl2va_pruned-Q5_0.gguf+ qwen3vl 32B encoder + fp16 video VAE + fp32 audio VAERepro
Behavior matrix (all tested on this host)
sched_yield()inside libamdhip64; HSA threads wait on GPU events; 0% GPU, VRAM flat, killed after 25+ mingdb backtrace (7.14 hang, main thread)
Thread 1 spins in a HIP busy-wait; HSA async threads wait on GPU events that never fire. A GPU kernel launched by the keyframe/ref conditioning encode never completes on gfx1100.
What we ruled out
--diffusion-fa,--max-vram -1,--stream-layers— all removed, same result)--end-imgpresence (FLF2V full contract — same crash)Impact
Any I2V / Ref2VA use on gfx1100 with ROCm is blocked. The workaround is running the diffusion model on CPU too (
--offload-to-cpuwithout any GPU backend assignment), which costs ~97 min for a 5-second clip at 544×960/30 steps vs an expected few minutes on GPU.Happy to provide additional traces, HSA logs (
HSA_ENABLE_SDMA=0was also tested — no change), or test builds.