Skip to content

gfx1100 (RX 7900 XTX, ROCm 6.4.1): dflash_server ~2x slower than llama.cpp, DDTree speculation never engages, SIGSEGV at long context #457

Description

@L0GYKAL

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

  1. Is gfx1100 (RX 7900 XTX) a supported target, or is the HIP speculative/flashprefill path intended for gfx1151 (Strix Halo) only?
  2. Is there any way to get DDTree speculation working on gfx1100, or is autoregressive Phase-1 the ceiling there?
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions