🔧 Runtime: build the ROCmFPX fork below
Stock
llama.cppwill not load this file — it needs the ROCmFP4 tensor types. Buildkingjones30/ROCmFPX(fork ofcharlie12345/ROCmFPX, branchmain). This is aqwen3_5model — the arch, its vision tower and its MTP draft head are all supported by the fork out of the box; no extra patches are needed.git clone https://github.com/kingjones30/ROCmFPX.git cd ROCmFPX cmake -B build -DGGML_HIP=ON -DGPU_TARGETS=gfx1151 -DGGML_NATIVE=ON -DCMAKE_BUILD_TYPE=Release cmake --build build --target llama-server llama-quantize -j$(nproc)
Qwen3.8-27B TURBO-Fable-Cold-Fusion-Heretic — ROCmFP4 FAST imatrix GGUF (Vision + MTP)
An importance-matrix-calibrated ROCmFP4 build of DavidAU's
Qwen3.8-27B-TURBO-Fable-Cold-Fusion-735-882-Heretic-Uncensored-NM-DAU
— a dense qwen3_5 27B (attention + linear-attention layers). This is the full model:
- 🖼️ Vision — the complete Qwen3.5-VL tower (27-layer deepstack encoder) as
mmproj-…-BF16.gguf. Verified: a red test image returned "Red" (1,094 prompt tokens, ~1,024 of them image tokens). - ⚡ MTP speculative decoding — 27–33 tok/s on code / reasoning / JSON, up from ~13 plain. Two 1.68 GB Q4 draft heads are included (see below).
⚠️ Research artifact / uncensored. DavidAU's merge removes refusal behaviour. Use it deliberately and own the output.
Speed — Ryzen AI Max+ 395, gfx1151, ROCm 7.2.4, full offload
Plain decode is ~13 tok/s: this is a dense 27B, so every token reads all ~15 GB of weights and Strix Halo's memory bandwidth caps it (the base Qwen3.8-27B does the same 13.0–13.2 on the same harness). MTP is the lever — the draft head proposes up to 4 tokens and the main model verifies them in one pass.
Same harness for every row: 4 fixed workloads, greedy, cache_prompt:false, 256 tokens, first run
discarded, median of 3, identical binary and flags (see Reproduction).
| draft head | code | prose | reasoning | JSON |
|---|---|---|---|---|
| none (plain decode) | 12.99 | 12.83 | 12.83 | 12.84 |
DAU's own head — mtp-Qwen3.8-27B-TURBO-Fable-Cold-Fusion-Heretic-Q4_0.gguf |
27.06 | 16.53 | 28.24 | 32.50 |
base Qwen3.8-27B head — mtp-Qwen3.8-27B-Q4_0.gguf |
28.31 | 18.65 | 26.96 | 33.13 |
| reference: base Qwen3.8-27B model + its own head | 30.54 | 18.45 | 32.25 | 34.98 |
Which head?
- Reasoning / agentic work → DAU's own head. It is the model's own restored MTP block, so it predicts DAU's reasoning better (draft acceptance 0.667 vs 0.593).
- General chat, code, JSON → the base Qwen3.8-27B head. It is ~1.6% faster averaged across the four workloads and noticeably better on prose. DAU is a merge of Qwen3.8-27B, so the base head is fully compatible (same arch, vocab and block layout).
Honest comparison with the base model: plain speed is identical. With MTP, DAU trails the base Qwen3.8-27B by ~9% overall and ~12% on reasoning — the merged weights are simply harder to predict (reasoning acceptance 0.59–0.67 vs 0.75 on the base). Free-form prose resists MTP on both models (~16–19 tok/s); every other workload roughly doubles or better.
Recommended command (the exact settings the table was measured with)
ROCBLAS_USE_HIPBLASLT=1 llama-server \
-m Qwen3.8-27B-TURBO-Fable-Cold-Fusion-Heretic-Q4_0-ROCmFP4-FAST-imatrix.gguf \
-md mtp-Qwen3.8-27B-TURBO-Fable-Cold-Fusion-Heretic-Q4_0.gguf \
--spec-type draft-mtp --spec-draft-n-min 0 --spec-draft-n-max 4 \
--spec-draft-p-min 0.0 --spec-draft-ngl 99 \
-dev ROCm0 -fa on -ngl 999 --no-mmap -fit off -np 1 \
-ctk q8_0 -ctv q8_0 -cram 8192 -b 2048 -ub 1024 -t 16 --poll 100 -c 32768 \
--repeat-penalty 1.05 --repeat-last-n 256 \
--reasoning off --jinja
- For the base head, swap
-mdtomtp-Qwen3.8-27B-Q4_0.gguf. --spec-draft-p-min 0.0matters — the default (0.75) throttles drafting; opening it was worth +47% in my sweep.-np 1is required for MTP on gfx1151. The table uses--spec-draft-n-max 4; in an earlier sweep with the built-in head, 8 and 12 were slower. Optimal depth depends on the (model, head, box) combination — sweep 3–5 on your own machine.- The numbers were measured with
--reasoning off; drop it to let the model think. - The MTP block is also inside the main GGUF (
blk.64), so-md <the main file>works too — but it loads all ~15 GB a second time. Use one of the 1.68 GB heads.
Vision
Add the vision tower to the same command:
--mmproj mmproj-Qwen3.8-27B-TURBO-Fable-Cold-Fusion-Heretic-BF16.gguf --image-min-tokens 1024
--image-min-tokens 1024 matters — Qwen-VL degrades below ~1024 image tokens (the server warns if
you omit it). Send images via the OpenAI image_url (data-URI or URL) chat format.
Quality (held-out WikiText-2 raw, -c 512)
| build | PPL |
|---|---|
| FAST no-imatrix (control) | 6.6959 ± 0.042 |
| this — FAST imatrix | 6.6577 ± 0.042 (−0.57%) |
Honesty note: imatrix helps this model only −0.57% — much less than the −5.9% it gave the Flash-Next MoE. This heavily-merged 27B is far less imatrix-sensitive; the number is small but real. I also built a STRIX_LEAN imatrix tier (6.6944 — worse than FAST here) and did not ship it: STRIX_LEAN's advantage is upgrading a per-layer embedding table, and this model has none. FAST is the tier to run.
Recipe
Q4_0_ROCMFP4_FAST, importance-matrix weighted. 14.93 GB main file.
| tensor group | type |
|---|---|
attention, FFN, linear-attention (attn_*, ffn_*, ssm_*) |
TYPE_101 (ROCmFP4) |
token_embd.weight |
TYPE_101 |
output.weight (lm head) |
Q6_K (protected) |
blk.64 MTP block (inside the main file) |
ROCmFP4 / Q8_0 eh_proj |
| draft heads (separate files) | Q4_0 (norms F32) — 18 tensors each |
vision tower (separate mmproj) |
BF16 |
64 transformer layers + 1 trailing MTP block. Calibration: bartowski
calibration_datav3,
imatrix computed on the BF16.
Files
| file | size |
|---|---|
Qwen3.8-27B-TURBO-Fable-Cold-Fusion-Heretic-Q4_0-ROCmFP4-FAST-imatrix.gguf |
14.93 GB (text + MTP block) |
mtp-Qwen3.8-27B-TURBO-Fable-Cold-Fusion-Heretic-Q4_0.gguf |
1.68 GB (DAU's own draft head) |
mtp-Qwen3.8-27B-Q4_0.gguf |
1.68 GB (base Qwen3.8-27B draft head) |
mmproj-Qwen3.8-27B-TURBO-Fable-Cold-Fusion-Heretic-BF16.gguf |
0.93 GB (vision tower) |
Single files — no sharding needed.
Reproduction
runtime : ROCmFPX fork build 264 (e771235), HIP+Vulkan build, run on -dev ROCm0, ROCm 7.2.4, gfx1151
llama-server sha256 e860b763d5e8f496ddb4b01236d8a8f37ae09dda456b5d076ab3abe2d9deb9fc
libllama.so sha256 cdfc9d484e8860f91c29f5e4a2282c9c9a09c6247339aa9ae614f603fe0aabd7
env : ROCBLAS_USE_HIPBLASLT=1
argv : exactly the "Recommended command" above (-c 32768), single slot, nothing else loaded on the GPU
bench : 4 fixed prompts (code / prose / reasoning / JSON), /v1/chat/completions, temperature 0,
max_tokens 256, cache_prompt false, 1 warm-up discarded, median of 3 (plain: 1 run each)
convert : convert_hf_to_gguf.py <src> --outtype bf16 (text + MTP block)
convert : convert_hf_to_gguf.py <src> --mmproj (vision tower)
imatrix : llama-imatrix -m <bf16> -f calibration_datav3.txt -o dau.imatrix --output-format dat -ngl 999 -c 512 -fa on
quantize: llama-quantize --imatrix dau.imatrix --output-tensor-type q6_K <bf16> <main> Q4_0_ROCMFP4_FAST 16
head : llama-quantize --imatrix dau.imatrix --output-tensor-type q4_0 --token-embedding-type q4_0 \
--tensor-type eh_proj=q4_0 <bf16> <full-q4> Q4_0 16
then copy token_embd, output, output_norm and blk.64.* (with all metadata, no renumbering)
into a new GGUF → 18 tensors, same layout as the base Qwen3.8-27B head
ppl : llama-perplexity -m <main> -f wiki.test.raw -ngl 999 -fa on -dev ROCm0 -c 512
sha256 of the draft heads: DAU's own 6ce06b967545f25220a10b671ffaa88d6dc2227aa561039ce79d8a1a47ca3193,
base 051a1764cff8c4f3ee6ae8b00593a0364c7539c67fa50ffc58f3f96509fca38e (identical to the file in
kingjones777/Qwen3.8-27B-ROCmFP4-STRIX-MTP-GGUF).
A number without its binary is a rumour — every figure above is measured on that runtime.
Acknowledgements
DavidAU — created the TURBO-Fable-Cold-Fusion-Heretic merge and
restored its MTP head; all model behaviour is theirs. I only converted and quantized it.
Qwen team — the Qwen3.8-27B architecture, and the base model the
mtp-Qwen3.8-27B-Q4_0.gguf draft head comes from (apache-2.0).
charlie12345/ROCmFPX — the ROCmFP4 tensor formats (MIT).
llama.cpp — engine, GGUF, conversion + vision/MTP tooling.
AMD ROCm — ROCm 7.2.4, gfx1151.