Qwen3.8-27B — the dense hybrid-attention Qwen release (48 gated-delta-net layers + 16
full-attention layers, full_attention_interval = 4, native 262K context, qwen35 GGUF arch) —
quantized to Q4_0_ROCMFP4_STRIX_LEAN (4.34 BPW effective, 13.82 GiB). MTP layer included
(blk.64 with nextn.* tensors, nextn_predict_layers = 1): serve with
--spec-type draft-mtp to enable speculative decoding. Tuned for AMD Strix Halo (gfx1151) on
the ROCmFPX fork family — we serve and benchmark these files on our lab runtime (full
source: pugant/strix-nebulosa;
upstream: charlie12345/ROCmFPX).
⚠️ This GGUF is for the ROCmFPX fork of llama.cpp. It will not load in stock llama.cpp (
invalid ggml type).
q4_0_rocmfp4, K/V protection, Q5_K token embeddings).
Requires a ROCmFPX fork build — see Runtime. Upstream
charlie12345/ROCmFPX loads these files too (any build
with the custom GGML types — HIP or the Vulkan-only build, both ship the deltanet kernels:
gated_delta_net.comp, ssm_scan.comp, ssm_conv.comp).Hardware: AMD Ryzen AI Max+ 395, Radeon 8060S (gfx1151, 128 GB unified LPDDR5X), exclusive GPU
window (no other services), 2026-08-15. Method: plain = llama-bench -ngl 999 -fa on -p 512 -n 128;
MTP = llama-server --spec-type draft-mtp --spec-draft-n-max 2 --spec-draft-p-min 0.75 --spec-draft-p-split 0.10 + server timing (timings.predicted_per_second), 2 runs after warm-up.
| Test | Qwen3.8-27B (this) | Qwen3.6-27B | Backend |
|---|---|---|---|
| plain tg128 | 13.77 ± 0.02 | 13.51 ± 0.40 | ROCm |
| plain pp512 | 354.7 | 344.1 | ROCm |
| MTP n-max 2 — prose | 18.4 / 19.1 | 17.2 / 17.2 | ROCm |
| MTP n-max 2 — deterministic | 27.3 / 22.0 | 20.2 / 20.5 | ROCm |
| plain tg128 | 8.97 | 8.92 | Vulkan RADV |
| plain pp512 | 319.8 | 324.8 | Vulkan RADV |
| MTP n-max 2 — prose | 14.1 / 13.1 | 14.2 / 13.6 | Vulkan RADV |
| MTP n-max 2 — deterministic | 19.9 / 17.0 | 16.5 / 17.3 | Vulkan RADV |
| n-max | ROCm prose | ROCm deterministic | Vulkan prose | Vulkan deterministic |
|---|---|---|---|---|
| plain | 13.8 | 13.8 | 9.0 | 9.0 |
| 2 | 18.4 / 19.1 | 27.3 / 22.0 | 14.1 / 13.1 | 19.9 / 17.0 |
| 4 (balanced pick) | 19.4 / 17.1 | 38.4 / 22.6 | 17.7 / 18.4 | 35.5 / 19.0 |
| 6 (structured pick) | 18.1 / 17.6 | 41.9 / 30.9 | 18.4 / 17.2 | 43.7 / 25.6 |
Per-position acceptance: on prose, positions 3+ are rarely accepted (0.21/0.09 at n-4) → prose plateaus at ~18–19 tok/s for any n-max. On deterministic/structured content acceptance stays high deep into the draft: n-4 best task (0.98, 0.93, 0.91, 0.86), n-6 (0.99, 0.90, 0.86, 0.83, 0.82, 0.80) — mean accepted length 6.2 — which is where 43.7 tok/s (3.2× plain decode) comes from. Recommendation: n-max 4 as default, n-max 6 for code/structured/RAG workloads. (Unlike the Qwen3.6-35B-A3B base where n-4 was dominated — optimal n-max is model-specific.)
Qwen3.8-27B wins the MTP match everywhere: +25–35% deterministic / +8–11% prose on ROCm, +20% deterministic on Vulkan, prose tied. Plain decode is identical and bandwidth-bound.
Notes:
llama-server -m Qwen3.8-27B-Q4_0_ROCMFP4_STRIX_LEAN.gguf \
-ngl 999 -fa on --jinja -c 32768 \
--host 0.0.0.0 --port 1234
# + MTP speculative decoding (n-max 4 balanced; 6 for structured/code):
# --spec-type draft-mtp --spec-draft-ngl all --spec-draft-n-max 4 \
# --spec-draft-p-min 0.75 --spec-draft-p-split 0.10
Besides the built-in MTP layer, this model works with the external DFlash2
drafter (incoai/Qwen3.8-27B-DFlash2-GGUF,
1.9B, Q4_K_M ≈ 1.1 GB) via our lab build (full source included under
rocmfpx/) — port of upstream PR
#27342; usage notes in
rocmfpx/docs/dflash2.md.
llama-server -m Qwen3.8-27B-Q4_0_ROCMFP4_STRIX_LEAN.gguf \
-ngl 999 -fa on --jinja -c 16384 \
--spec-type draft-dflash \
--spec-draft-model Qwen3.8-27B-DFlash2-Q4_K_M.gguf \
--spec-draft-ngl all --spec-draft-n-max 7 --spec-draft-p-min 0.75
Route by workload (Vulkan RADV, temp 0, single stream, p_min 0.75):
| Workload | MTP n6 | DFlash2 n7 | pick |
|---|---|---|---|
| deterministic (counting/alphabet) | 45.2 / 26.1 | 57.4 / 36.3 | DFlash2 (+27–39%) |
| repetitive code | 27.5 | 33.8 | DFlash2 (+23%) |
| fixed-format logs | 28.0 | 35.8 | DFlash2 (+28%) |
| structured JSON | 35.0 | 36.2 | either (~floor) |
| free prose | 19.6 / 20.2 | 14.2 / 15.0 | MTP |
n-max 5 is the best single-drafter compromise (det 52.2/39.5, prose 17.5/15.9). The DFlash2 acceptance stays ≥0.5 per position up to position 7 on structured content, where MTP collapses after position 1; on free prose the acceptance is on par with MTP but the block-diffusion round has a fixed cost, so MTP wins.
The quant was built with an importance matrix calibrated on an interleaved
corpus (agentic-coding traces from
ProCreations/grug-think-v3-10k,
Italian prose, real code). The matrix is published for reuse:
pugant/Qwen3.8-27B-imatrix
(works with any llama.cpp llama-quantize --imatrix).
Q4_0_ROCMFP4_STRIX_LEAN — fork preset (4.38 BPW nominal): FP4 single-scale blocks
for most matrices, attention K/V protected, Q5_K token embeddings. Effective 4.34 BPW on
this architecture (13.82 GiB, 866 tensors, MTP included: nextn.eh_proj → q8_0, draft FFNs →
q4_0_rocmfp4_fast).unsloth/Qwen3.8-27B-GGUF (2 shards, SHA256-verified against the HF
LFS OIDs before quantization).llama-imatrix (fork, GPU offload, 256 chunks × 512 ctx, ~10 min) over a 1.7 MB composite,
round-robin-interleaved corpus: ~55% agentic-coding transcripts (tool-calls + code),
~28% Italian technical prose, ~17% real source code.quantize.imatrix.entries_count = 496). All 64
non-MTP layers covered (attention + gated-deltanet SSM tensors), 0 NaN/Inf, all entry shapes
consistent. By design no imatrix can cover: MTP layer blk.64 (not executed in a plain forward
pass), ssm_conv1d (no observer hooks), token_embd/output — these take the unweighted path,
identical to unsloth's behaviour on Qwen3.6.mmproj-F16.gguf in their repo, untested here).Apache-2.0 (inherited from the base model). See LICENSE.
Benchmark environment: one bare-metal AMD Strix Halo (Ryzen AI MAX+ 395, 128 GB) — full dated configuration and measurement policy: BARE-METAL.md
Requires a ROCmFPX fork build (custom tensor types — stock llama.cpp refuses the file).
Recommended: our lab build (pugant/strix-nebulosa, main) —
reasoning budget and persistent prompt cache on every model; drafter features
where the model ships one: see the engine section of its README.
The canonical model of the lab: dual-drafter routing was measured here (agentic +19%); MTP layer included.
Everything here is experimental and provided as-is, at your own risk.
14 commits
Qwen3.8-27B — the dense hybrid-attention Qwen release (48 gated-delta-net layers + 16
full-attention layers, full_attention_interval = 4, native 262K context, qwen35 GGUF arch) —
quantized to Q4_0_ROCMFP4_STRIX_LEAN (4.34 BPW effective, 13.82 GiB). MTP layer included
(blk.64 with nextn.* tensors, nextn_predict_layers = 1): serve with
--spec-type draft-mtp to enable speculative decoding. Tuned for AMD Strix Halo (gfx1151) on
the ROCmFPX fork family — we serve and benchmark these files on our lab runtime (full
source: pugant/strix-nebulosa;
upstream: charlie12345/ROCmFPX).
⚠️ This GGUF is for the ROCmFPX fork of llama.cpp. It will not load in stock llama.cpp (
invalid ggml type).
q4_0_rocmfp4, K/V protection, Q5_K token embeddings).
Requires a ROCmFPX fork build — see Runtime. Upstream
charlie12345/ROCmFPX loads these files too (any build
with the custom GGML types — HIP or the Vulkan-only build, both ship the deltanet kernels:
gated_delta_net.comp, ssm_scan.comp, ssm_conv.comp).Hardware: AMD Ryzen AI Max+ 395, Radeon 8060S (gfx1151, 128 GB unified LPDDR5X), exclusive GPU
window (no other services), 2026-08-15. Method: plain = llama-bench -ngl 999 -fa on -p 512 -n 128;
MTP = llama-server --spec-type draft-mtp --spec-draft-n-max 2 --spec-draft-p-min 0.75 --spec-draft-p-split 0.10 + server timing (timings.predicted_per_second), 2 runs after warm-up.
| Test | Qwen3.8-27B (this) | Qwen3.6-27B | Backend |
|---|---|---|---|
| plain tg128 | 13.77 ± 0.02 | 13.51 ± 0.40 | ROCm |
| plain pp512 | 354.7 | 344.1 | ROCm |
| MTP n-max 2 — prose | 18.4 / 19.1 | 17.2 / 17.2 | ROCm |
| MTP n-max 2 — deterministic | 27.3 / 22.0 | 20.2 / 20.5 | ROCm |
| plain tg128 | 8.97 | 8.92 | Vulkan RADV |
| plain pp512 | 319.8 | 324.8 | Vulkan RADV |
| MTP n-max 2 — prose | 14.1 / 13.1 | 14.2 / 13.6 | Vulkan RADV |
| MTP n-max 2 — deterministic | 19.9 / 17.0 | 16.5 / 17.3 | Vulkan RADV |
| n-max | ROCm prose | ROCm deterministic | Vulkan prose | Vulkan deterministic |
|---|---|---|---|---|
| plain | 13.8 | 13.8 | 9.0 | 9.0 |
| 2 | 18.4 / 19.1 | 27.3 / 22.0 | 14.1 / 13.1 | 19.9 / 17.0 |
| 4 (balanced pick) | 19.4 / 17.1 | 38.4 / 22.6 | 17.7 / 18.4 | 35.5 / 19.0 |
| 6 (structured pick) | 18.1 / 17.6 | 41.9 / 30.9 | 18.4 / 17.2 | 43.7 / 25.6 |
Per-position acceptance: on prose, positions 3+ are rarely accepted (0.21/0.09 at n-4) → prose plateaus at ~18–19 tok/s for any n-max. On deterministic/structured content acceptance stays high deep into the draft: n-4 best task (0.98, 0.93, 0.91, 0.86), n-6 (0.99, 0.90, 0.86, 0.83, 0.82, 0.80) — mean accepted length 6.2 — which is where 43.7 tok/s (3.2× plain decode) comes from. Recommendation: n-max 4 as default, n-max 6 for code/structured/RAG workloads. (Unlike the Qwen3.6-35B-A3B base where n-4 was dominated — optimal n-max is model-specific.)
Qwen3.8-27B wins the MTP match everywhere: +25–35% deterministic / +8–11% prose on ROCm, +20% deterministic on Vulkan, prose tied. Plain decode is identical and bandwidth-bound.
Notes:
llama-server -m Qwen3.8-27B-Q4_0_ROCMFP4_STRIX_LEAN.gguf \
-ngl 999 -fa on --jinja -c 32768 \
--host 0.0.0.0 --port 1234
# + MTP speculative decoding (n-max 4 balanced; 6 for structured/code):
# --spec-type draft-mtp --spec-draft-ngl all --spec-draft-n-max 4 \
# --spec-draft-p-min 0.75 --spec-draft-p-split 0.10
Besides the built-in MTP layer, this model works with the external DFlash2
drafter (incoai/Qwen3.8-27B-DFlash2-GGUF,
1.9B, Q4_K_M ≈ 1.1 GB) via our lab build (full source included under
rocmfpx/) — port of upstream PR
#27342; usage notes in
rocmfpx/docs/dflash2.md.
llama-server -m Qwen3.8-27B-Q4_0_ROCMFP4_STRIX_LEAN.gguf \
-ngl 999 -fa on --jinja -c 16384 \
--spec-type draft-dflash \
--spec-draft-model Qwen3.8-27B-DFlash2-Q4_K_M.gguf \
--spec-draft-ngl all --spec-draft-n-max 7 --spec-draft-p-min 0.75
Route by workload (Vulkan RADV, temp 0, single stream, p_min 0.75):
| Workload | MTP n6 | DFlash2 n7 | pick |
|---|---|---|---|
| deterministic (counting/alphabet) | 45.2 / 26.1 | 57.4 / 36.3 | DFlash2 (+27–39%) |
| repetitive code | 27.5 | 33.8 | DFlash2 (+23%) |
| fixed-format logs | 28.0 | 35.8 | DFlash2 (+28%) |
| structured JSON | 35.0 | 36.2 | either (~floor) |
| free prose | 19.6 / 20.2 | 14.2 / 15.0 | MTP |
n-max 5 is the best single-drafter compromise (det 52.2/39.5, prose 17.5/15.9). The DFlash2 acceptance stays ≥0.5 per position up to position 7 on structured content, where MTP collapses after position 1; on free prose the acceptance is on par with MTP but the block-diffusion round has a fixed cost, so MTP wins.
The quant was built with an importance matrix calibrated on an interleaved
corpus (agentic-coding traces from
ProCreations/grug-think-v3-10k,
Italian prose, real code). The matrix is published for reuse:
pugant/Qwen3.8-27B-imatrix
(works with any llama.cpp llama-quantize --imatrix).
Q4_0_ROCMFP4_STRIX_LEAN — fork preset (4.38 BPW nominal): FP4 single-scale blocks
for most matrices, attention K/V protected, Q5_K token embeddings. Effective 4.34 BPW on
this architecture (13.82 GiB, 866 tensors, MTP included: nextn.eh_proj → q8_0, draft FFNs →
q4_0_rocmfp4_fast).unsloth/Qwen3.8-27B-GGUF (2 shards, SHA256-verified against the HF
LFS OIDs before quantization).llama-imatrix (fork, GPU offload, 256 chunks × 512 ctx, ~10 min) over a 1.7 MB composite,
round-robin-interleaved corpus: ~55% agentic-coding transcripts (tool-calls + code),
~28% Italian technical prose, ~17% real source code.quantize.imatrix.entries_count = 496). All 64
non-MTP layers covered (attention + gated-deltanet SSM tensors), 0 NaN/Inf, all entry shapes
consistent. By design no imatrix can cover: MTP layer blk.64 (not executed in a plain forward
pass), ssm_conv1d (no observer hooks), token_embd/output — these take the unweighted path,
identical to unsloth's behaviour on Qwen3.6.mmproj-F16.gguf in their repo, untested here).Apache-2.0 (inherited from the base model). See LICENSE.
Benchmark environment: one bare-metal AMD Strix Halo (Ryzen AI MAX+ 395, 128 GB) — full dated configuration and measurement policy: BARE-METAL.md
Requires a ROCmFPX fork build (custom tensor types — stock llama.cpp refuses the file).
Recommended: our lab build (pugant/strix-nebulosa, main) —
reasoning budget and persistent prompt cache on every model; drafter features
where the model ships one: see the engine section of its README.
The canonical model of the lab: dual-drafter routing was measured here (agentic +19%); MTP layer included.
Everything here is experimental and provided as-is, at your own risk.
14 commits