Skip to content

MiniMax-H3 I2V/Ref2VA conditioning hangs GPU on gfx1100 ROCm 7.2.4 & 7.14 (works on CPU backend; Unsloth fork 13b9d92) #1985

Description

@kaishi00

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions