Skip to content

gfx906 (Radeon VII, wave64): Gated Delta Net models (Qwen3-Next/3.8) run at ~0.12 t/s while MoE & dense are fine #72

Description

@philmcneely

Summary

On gfx906 (Radeon VII / Vega 20, wave64), Gated Delta Net models (the Qwen3-Next / "Qwen3.8" family) run at ~0.12 tok/s generation and ~0.16 tok/s prompt — effectively unusable — while MoE and standard models on the same card are fast and the same GDN model on an RDNA2 (wave32) card is fine. So this looks specific to the GDN / linear-attention path on wave64, not a general gfx906 or bandwidth problem.

I have a Radeon VII on a Mac and am happy to run experimental builds and report back (see offer at the bottom).

Environment

  • GPU: AMD Radeon VII (gfx906, Vega 20, wave64, 16 GB HBM2), eGPU over Thunderbolt 3
  • Host: Intel Mac mini 2018 (Macmini8,1), macOS 15.7.9
  • ToshLLM: v0.85.x (Aug 2026 build) — engine build 10495, llama.cpp base commit 3dc7285b4
  • Device init banner:
    wave64 mode (SIMD width 64): GPU prefill matmul, CPU decode/reductions for correct output
    wave64 decode ON: quantized/f16/bf16 mat-vec on GPU (see the allowlist in ggml_metal_library_get_pipeline_mul_mv)
    simdgroup reduction   = false
    simdgroup matrix mul. = false
    

Measurements (all via llama-server, one small /completion each, --load-mode none)

Model Card Config Prompt t/s Gen t/s
Qwen3.8-27B IQ4_XS (GDN) Radeon VII (gfx906) -fa 1 -ctk q8_0 -ctv q8_0 0.16 0.12
Qwen3.8-27B IQ4_XS (GDN) RX 6800 (gfx1030, wave32) -fa 1 -ctk q8_0 -ctv q8_0 ~39 22.6
gemma-4-26B-A4B IQ4_XS (MoE) Radeon VII (gfx906) -fa 1 -ctk q8_0 -ctv q8_0 81 38.5

So on the same Radeon VII, a MoE model gets 38.5 tok/s but the GDN model gets 0.12 tok/s (~300× slower); and the same GDN model on an RDNA2 card gets 22.6 tok/s. On gfx906 both prefill and decode collapse together for the GDN model (~0.12–0.16 t/s), which suggests something in the GDN graph is falling to CPU (or a wave64 GDN/reduction kernel is pathologically slow) rather than a decode-only issue.

Second, possibly-related bug: -fa 0 crashes on gfx906

Running the same GDN model with flash attention disabled (-fa 0, f16 KV) crashes the Metal backend on gfx906 immediately on first decode:

ggml_metal_synchronize: error: command buffer 0 failed with status 5
error: Internal Error (e00002bd:Internal Error)
ggml_metal_graph_compute: backend is in error state from a previous command buffer failure - recreate the backend to recover
llama_decode: failed to decode, ret = -3

(With -fa 1 there is no crash — it just runs at 0.12 t/s.) This may be a separate wave64 bug in the non-flash-attention attention path; noting it in case it's the same root cause.

What I've ruled out

  • Not the card / not general gfx906 — MoE (gemma-4-26B-A4B) runs at 38.5 tok/s on the same card.
  • Not the model / not the quant — the same Qwen3.8-27B IQ4_XS file runs at 22.6 tok/s on an RX 6800 (wave32) with identical flags.
  • Not mmap--load-mode none is used throughout (the fleet servers run this way; llama-bench without it hits the known mmap slowdown, so all numbers above are from llama-server with --load-mode none).

The GDN wave64 kernels do exist in the tree (GGML_OP_GATED_DELTA_NET / SSM_SCAN / SSM_CONV are enabled for wave64_decode, and there is a kernel_gated_delta_net_impl using gdn_sum32), so this reads as a perf/correctness bug in the wave64 GDN path rather than a missing kernel.

Offer

I have this Radeon VII on a Mac available as a gfx906 test rig and can build from source (scripts/build-engines.sh) and run any experimental branch, capture ISA (ISA_MCPU=gfx906), or grab profiles/logs you'd like. Happy to help validate a fix — just point me at a branch or tell me what to instrument.

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