gfx1151 / Ryzen AI Max+ 395 throughput datapoints: Qwen3.8-27B with MTP + ngram-mod speculative decoding (b10435-era, ROCm) #27154
Replies: 2 comments 1 reply
|
Thank you for you post. I will try it this week on my Strix Halo system because the current llama.cpp Vulkan version runs into an issue (Device lost) around 50% context usage of configured 262144 context.
The first test shows great initial prompt processing / prefill numbers that are about 2x higher than the Vulkan version BUT the token generation is about 30% slower than just using "--spec-type draft-mtp,ngram-mod --spec-draft-n-max 3" on the llama.cpp Vulkan build. I don't activate/use "HSA_ENABLE_SDMA=0 HSA_XNACK=1" currently and I also don't know how much of a difference both environment variables could make. What OS (Kernel version, Mesa version, amdgpu firmware version) and ROCm version do you use ? Thank you |
|
Thank you for the information.
That's the explanation why I get less token generation. My workflow is different. The model uses heavy reasoning (xhigh setting) for the coding and I get draft acceptance of (way) below 50% mostly. The real coding work is only about 20-30% of the reasoning work. I did a new test with "--spec-draft-n-max 12 + ngram n-min 24" and the highest token generation value was about 26 tg/s. Then some in 2x tg/s range, more in the 1x tg/s range and about 30-50% in the x tg/s range (lowest value was 5.xx tg/s). With "--spec-draft-n-max 3 + ngram n-min 24" I had mostly 1x tg/s values (high around 18 tg/s) with some dips into the x tg/s (7.xx tg/s) range. So the higher draft setting is not good for my workflow. I will also test "--spec-draft-n-max 2 + ngram n-min 24". The important win for me is that the llama.cpp ROCm version solved my device lost issue with half full context and delivers >= 2x prompt processing / prefill values. Initial 380 - 7xx t/s with ROCm vs 240 t/s with Vulkan. 128k context ~80-100 t/s with ROCm vs ~40 t/s with Vulkan. I will not go back to the Vulkan version for now as long as the ROCm version has the same or better performance and runs stable. I'm a casual noob vibe coder at home and I try to improve my setup. Thank you very much for your information. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Datapoint for the gfx1151 perf picture — 27B dense model, full GPU offload,
single box, measured 2026-08-15. Happy to run more configurations on
request; methodology and raw scripts are public (repo link in profile) and
I'll keep this post to numbers.
Stack
-ngl 99 -c 98304--spec-type draft-mtp,ngram-mod --spec-draft-n-max 12 --spec-ngram-mod-n-min 24HSA_ENABLE_SDMA=0 HSA_XNACK=1--flash-attn on)Throughput (count-to-30 bench; cold = first exposure, warm = back-to-back
repeats — warm with ngram is a repetition artifact, labeled as such)
Real novel-prose traffic on the same stack: 11-24 tok/s (bandwidth-bound);
code ~29-40. Cold 16k-prompt TTFT ~41s (PP ~390 tok/s — prefill is the
bottleneck on this build); warm-prefix TTFT 0.2-0.6s.
n_max sweep (code lane): n12 peak; n16 regresses code to 21.3 tok/s —
deep-draft waste returns.
Backend A/B (same source, stacked n12/96k)
i.e. for spec-decode workloads on this box, Vulkan is ~half throughput and
-36% prefill vs ROCm — datapoint against the "Vulkan wins on gfx1151"
folklore for this workload class.
KV quant: q8_0 + FA fails to load on ROCm builds of this era; K-only
loads, saves ~1GB at -1.6% — not worth it (GQA KV is ~2.1GB/32k here, so
context is cheap).
Neural drafters on unified memory (for the spec-decode picture):
DSpark 1.36B BF16 drafter = 32.6 cold vs 59.6 champion cold (drafter pass
~2.7GB reads on the same bus as the verify pass); DFlash CPU-drafted =
79.1 cold but 0.063 acceptance on creative. ngram (prompt-derived, zero
bandwidth) is the winner on iGPUs.
Update (2026-08-17): the 262k unlock + what changed since the table above
The q8_0-KV + FA load failure above was observed on ROCm 7.2.1 — fixed by the ROCm 7.2.4 rebuild (same dflash tree, 9d57ce4). That fix is what unlocks the full native context:
…still Q4_K_XL, same warm decode as the table (148–163 warm; cold at this config measures 52–57), now at 262,144 ctx instead of 98,304 with f16 KV. Two corrections/clarifications to the setup block: the machine here is the 96GB model (the "GTT 64GB" line is the carve, not total), and it's a native ROCm 7.2.4 install (Ubuntu 24.04.4, kernel 6.17.0-1032-oem, no Docker) with
HSA_ENABLE_SDMA=0 HSA_XNACK=1.Practical context guidance for anyone copying the config (measured, see curves below):
(These are model-level characteristics observed on Qwen3.8-27B, not gfx1151-specific — but they matter for anyone planning to actually use the full window. Reproduction details in the thread below; the HIP-over-Vulkan lane choice also got independent corroboration from another Strix Halo user hitting Vulkan DeviceLost at ~50% of 262k ctx in the comments.)
Update (2026-08-17, later): official gsm8k on this config — 0.980, and the raw-lane trap behind low served-model scores
Quality number for the same rig, and it corrects a figure we had briefly recorded internally: gsm8k exact-match 0.980 on the champion config above (Qwen3.8-27B Q4_K_XL, served through the same llama-server). Conditions:
/v1/chat/completionslane, greedy (temp 0), zero-shot CoT prompt ending in####, official grading (last#### Nof the answer, exact numeric match against gold; the reasoning channel is never graded), seeded stratified subset (seed 20260817, 20 problems per answer-magnitude decile, 150 per cell) across 6 thinking-budget cells — 900/900 rows complete, zero API errors.reasoning_budget_tokens2048 / 4096 / 8192, plus one 8192 + budget-message cell: 0.973–0.980 — flat at ceiling. Median thinking on this class is ~130 tokens, so the caps never engage (enforcement itself is real: a 256-token cap injection binds hard).Why we briefly had a 0.300 here (relevant if you eval served models): that run went through the raw
/v1/completionslane, which hits a premature end-of-turn artifact — generations come back empty or truncated and exact-match counts them wrong; correct-when-actually-answered was ~75% even then. The 0.300 measured the lane, not the model. On this server, chat-lane generation grading is the clean path; loglikelihood-style evals through the completions endpoint stay blocked by the prompt-logprobs gap tracked in #27174.All reactions