Environment
- GPU: AMD Radeon RX 7900 XTX (gfx1100, RDNA3), 24 GB
- ROCm: 6.4.1 (rocm/dev-ubuntu-22.04:6.4.1 builder + runtime)
- lucebox-hub: commit
96100834eca003c2bc7cf76eb943b95fcd6d06a0 (+ pinned llama.cpp submodule 30c9d7da…)
- Build:
DFLASH27B_GPU_BACKEND=hip, DFLASH27B_HIP_ARCHITECTURES=gfx1100, SM80_EQUIV=OFF (Phase-1 HIP, matches the default in Dockerfile.rocm)
- Model: unsloth
Qwen3.6-27B-Q4_K_M.gguf (target) + Lucebox/Qwen3.6-27B-DFlash-GGUF/dflash-draft-3.6-q4_k_m.gguf (drafter)
- Built/run in rootless podman with
--device /dev/kfd --device /dev/dri --group-add keep-groups.
Summary
On gfx1100, dflash_server is ~2× slower than upstream llama.cpp for the same model on the same GPU, its DDTree speculative decode never engages (silently falls back to autoregressive decode), and it SIGSEGVs at long context. Filing in case gfx1100 is intended to be supported — or to confirm the HIP speculative path is gfx1151-only.
Benchmarks — Qwen3.6-27B Q4_K_M, f16 KV cache, full GPU offload
| Engine |
Decode |
Prompt eval |
56k-token prefill |
| llama.cpp (Vulkan/RADV, b64739ea3) |
36.4 tok/s |
67 tok/s |
prefill 641 tok/s, decode 32 tok/s, stable (20.8 GB) |
dflash_server (HIP, Phase-1) |
17.6 tok/s |
— |
SIGSEGV during prefill |
Same 300-token generation prompt, temperature matched, both with f16 KV.
1. DDTree speculation never engages on gfx1100
Started with the matched drafter and DDTree on:
dflash_server /models/Qwen3.6-27B-Q4_K_M.gguf \
--draft /models/dflash-draft-3.6-q4_k_m.gguf \
--ddtree --ddtree-budget 8 --cache-type-k f16 --cache-type-v f16
Startup confirms draft = …dflash-draft-3.6…, ddtree = ON, ddtree_budget = 8, but every request logs:
[ar-decode] tokens=300 time=17.06 s speed=17.58 tok/s
[server] chat DONE … decode=17.1s(17.6tok/s)
i.e. plain autoregressive decode — identical speed with or without the drafter. No DDTree acceptance stats, no error. It looks like the draft-tree verify path (the rocWMMA flashprefill kernels) isn't available on gfx1100, so speculation silently no-ops.
2. SIGSEGV at ~56k context
A 56k-token prompt crashes during prefill:
…/ggml-hip/libggml-hip.so.0(+0x2729b2)
…ggml_backend_graph_compute…
ggml_abort → exit 139 (SIGSEGV)
(llama.cpp handles the same 56k prompt fine on the same card.)
3. SM80_EQUIV=ON (rocWMMA Phase-2) won't compile against ROCm 6.4.1
Enabling DFLASH27B_HIP_SM80_EQUIV=ON to get the flashprefill kernels fails:
server/src/flashprefill_kernels.hip.cu:452:47: error: cannot assign to return value
because function 'operator[]' returns a const value
server/src/flashprefill_kernels.hip.cu:493:34: error: (same)
rocwmma/rocwmma_impl.hpp:96:16: error: non-const reference cannot bind to vector element
ROCm 6.4.1 ships rocWMMA 1.7.0, whose fragment operator[] is const-returning; the kernel assigns through it. So Phase-2 is unavailable on this stack, and (per #1) that seems to take DDTree with it.
Questions
- Is gfx1100 (RX 7900 XTX) a supported target, or is the HIP speculative/flashprefill path intended for gfx1151 (Strix Halo) only?
- Is there any way to get DDTree speculation working on gfx1100, or is autoregressive Phase-1 the ceiling there?
- Any plan to update
flashprefill_kernels.hip.cu for rocWMMA 1.7.0 (ROCm 6.4.x) so SM80_EQUIV=ON builds on RDNA3 consumer cards?
Happy to provide full logs or re-run with other flags.
Environment
96100834eca003c2bc7cf76eb943b95fcd6d06a0(+ pinned llama.cpp submodule30c9d7da…)DFLASH27B_GPU_BACKEND=hip,DFLASH27B_HIP_ARCHITECTURES=gfx1100,SM80_EQUIV=OFF(Phase-1 HIP, matches the default inDockerfile.rocm)Qwen3.6-27B-Q4_K_M.gguf(target) +Lucebox/Qwen3.6-27B-DFlash-GGUF/dflash-draft-3.6-q4_k_m.gguf(drafter)--device /dev/kfd --device /dev/dri --group-add keep-groups.Summary
On gfx1100,
dflash_serveris ~2× slower than upstream llama.cpp for the same model on the same GPU, its DDTree speculative decode never engages (silently falls back to autoregressive decode), and it SIGSEGVs at long context. Filing in case gfx1100 is intended to be supported — or to confirm the HIP speculative path is gfx1151-only.Benchmarks — Qwen3.6-27B Q4_K_M, f16 KV cache, full GPU offload
dflash_server(HIP, Phase-1)Same 300-token generation prompt,
temperaturematched, both with f16 KV.1. DDTree speculation never engages on gfx1100
Started with the matched drafter and DDTree on:
Startup confirms
draft = …dflash-draft-3.6…,ddtree = ON,ddtree_budget = 8, but every request logs:i.e. plain autoregressive decode — identical speed with or without the drafter. No DDTree acceptance stats, no error. It looks like the draft-tree verify path (the rocWMMA flashprefill kernels) isn't available on gfx1100, so speculation silently no-ops.
2. SIGSEGV at ~56k context
A 56k-token prompt crashes during prefill:
(llama.cpp handles the same 56k prompt fine on the same card.)
3. SM80_EQUIV=ON (rocWMMA Phase-2) won't compile against ROCm 6.4.1
Enabling
DFLASH27B_HIP_SM80_EQUIV=ONto get the flashprefill kernels fails:ROCm 6.4.1 ships rocWMMA 1.7.0, whose fragment
operator[]is const-returning; the kernel assigns through it. So Phase-2 is unavailable on this stack, and (per #1) that seems to take DDTree with it.Questions
flashprefill_kernels.hip.cufor rocWMMA 1.7.0 (ROCm 6.4.x) soSM80_EQUIV=ONbuilds on RDNA3 consumer cards?Happy to provide full logs or re-run with other flags.