julianmb's picture
Upload README.md with huggingface_hub
c9d10b0 verified
|
Raw
History Blame Contribute Delete
6.06 kB
metadata
license: other
license_name: qwen-community-license-1.0
base_model: Qwen/Qwen3.8-Flash-Next-FP8
library: gguf
quantized_by: julianmb
pipeline_tag: text-generation
tags:
  - qwen4exp
  - strix-halo
  - rocmfpx
  - gguf
  - ple-quantized

Qwen3.8-Flash-Next GGUFs β€” provenance-verified quants for Strix Halo

Four files:

file size what it is
Qwen3.8-Flash-Next-IQ4_XS-PLE.gguf 91 GiB recommended daily driver β€” iq4_xs trunk with the 27G PLE n-gram table at iq4_nl
Qwen3.8-Flash-Next-IQ4_XS.gguf 116 GiB static reference quant, PLE at q8_0
Qwen3.8-Flash-Next-IQ4_XS-M2.gguf 115 GiB imatrix-calibrated quant, PLE table at q8_0 β€” best measured perplexity
mtp-Qwen3.8-Flash-Next-Q8_0.gguf 3.9 GiB MTP draft sidecar for nathanw1014-lineage engines (fork-specific β€” will NOT load on apepojken/mainline)

M2 β€” the imatrix quant

second-generation quant: same trunk type (iq4_xs), but calibrated with a 926-entry imatrix (1,024 chunks) via the ROCmFPX banded quantizer, and the 51B PLE lookup table left at q8_0 (no --tensor-type cut). 5.56 bpw, 115 giB β€” 24 giB bigger than the 91g PLE file.

perplexity (wiki.test.raw, ctx 2048, 145 chunks):

quant PPL
M2 (imatrix, PLE q8_0) 4.2809 Β±0.025
PLE 91g 4.2932 Β±0.025 (statistically tied, <0.5Οƒ)
static 116g 4.5221 Β±0.026 (~9Οƒ worse)

speed profile is honest-mixed (single runs, nathanw1014 vulkan engine, q8_0 kv, temp 0):

depth plain tg mtp tg
8k 23.8 (β‰ˆ PLE 23.8) 25.1 (PLE 33.5 β€” M2 slower)
32k 19.0 (β‰ˆ PLE 19.0) 29.1 (best of the three)
128k β€” 13.3 (PLE 13.5 β€” tied)

pick M2 when you want the best measured quality and don't mind the 24 giB: at ≀32k plain it matches PLE, and at 32k MTP it measured fastest. for shallow-depth MTP speed take the 91g PLE; for deep 128k+ MTP the static 116g had a small in-sweep edge (17.4 vs 13.3/13.5 β€” within the same-config spread, n=1 caveat).

provenance

every quant descends from an F16 that was byte-verified against the official Qwen/Qwen3.8-Flash-Next-FP8 checkpoint: hyper-connection norms folded to (1 + w) (97/97 tensors β€” the converter bug that produces deterministic garbage is fixed in our pipeline), PLE fp8 scale applied, expert stacking identity probed 512x3, GDN v-head reorder checked. details: https://github.com/julianmb/haloq38flash

the PLE cut (what makes the 91G special)

the 51B-parameter n-gram lookup table was moved from q8_0 (54G) to iq4_nl (27G) via --tensor-type. hash-gathered lookup rows tolerate the precision drop β€” verified by smoke and full benchmark, no degradation observed:

depth static 116G plain/mtp t/s PLE 91G plain/mtp t/s
0 29.2 / 48.4 29.9 / 53.1
8k 22.9 / 42.8 24.1 / 56.4
32k 19.5 / 29.5 20.1 / 30.2

prefill at 32k: 384 β†’ 397 t/s. no collapse at depth. engine: nathanw1014 strix-halo-vulkan (ad914eb), vulkan/radv, q8_0 KV, -ub 2048, temp 0.

fork compatibility caveat (important)

the iq4_nl PLE rows assert in SOME forks: engines that feed gathered PLE rows directly as mul_mat B operands without dequantizing (apepojken qwen4exp-spec-mtp) abort at ggml-vulkan.cpp:7794 (b_type must be F32/F16/Q8_1). verified working on nathanw1014 strix-halo-vulkan. if your engine asserts on load or first token, use the 116G static file instead. M2 keeps the PLE table at q8_0 and has no such assert exposure.

provenance note

the same --tensor-type cut applied to unverified-source quants will NOT fix a broken converter (hc norms, PLE scale) β€” garbage in, garbage out. ours is built from a fixed, audited pipeline.

128k+ context caveat (measured)

the depth story is not monotonic. measured on the same engine (nathanw1014 vulkan, q8_0 kv, temp 0, single runs):

depth static 116g plain/mtp t/s PLE 91g plain/mtp t/s
0 29.2 / 48.4 29.9 / 53.1
8k 22.9 / 42.8 24.1 / 56.4
32k 19.5 / 29.5 20.1 / 30.2
128k 10.8 / 26.9 11.0 / 18.6
  • plain decode collapses with depth on both quants (~11 t/s at 128k) β€” the cost is context-mechanics (sparse-attention indexer), not the quant.
  • with mtp at 128k the PLE quant measured SLOWER than static (18.6 vs 26.9, single runs): plausible draft-acceptance drop from ple quantization noise compounding over deep n-gram history. unverified mechanism, n=1 caveat.
  • practical: <=32k work β†’ PLE file. 128k+ contexts β†’ static file (or M2 for the best quality at plain speed).

run it (strix halo, 128 GB unified memory)

full methodology, receipts, and the benchmark record: https://github.com/julianmb/haloq38flash

docker (one-liner; image default serves the 91g PLE on :8080):

git clone https://github.com/julianmb/haloq38flash && cd haloq38flash
docker compose up --build

point it at M2 with the MTP sidecar and the warm-turn cache:

docker compose run qwen38-flash-next /app/llama-server \
  -m /models/Qwen3.8-Flash-Next-IQ4_XS-M2.gguf \
  -md /models/mtp-Qwen3.8-Flash-Next-Q8_0.gguf \
  --spec-type draft-mtp --spec-draft-n-max 6 --spec-draft-p-min 0.75 \
  --cache-ram 8192 --ctx-checkpoints 32 \
  -c 32768 -ngl 999 -fa on -ctk q8_0 -ctv q8_0 -ub 2048 -t 4

or raw llama.cpp (nathanw1014 strix-halo-vulkan lineage engines):

llama-server -m Qwen3.8-Flash-Next-IQ4_XS-M2.gguf \
  -md mtp-Qwen3.8-Flash-Next-Q8_0.gguf \
  --spec-type draft-mtp --spec-draft-n-max 6 --spec-draft-p-min 0.75 \
  -ngl 999 -fa on -ctk q8_0 -ctv q8_0 -ub 2048 -t 4 -c 32768

perf notes: -t 16 lifts prefill up to +43% at 128k (decode indifferent); the --cache-ram/--ctx-checkpoints warm-turn flags make repeated context nearly free (measured 438 s β†’ 0.68 s at 128k, 994 s β†’ 0.74 s at 256k β€” 640x/1351x). swap M2's filename for the other quants; same flags.

license

qwen community license 1.0 (distribution permitted with notice; maas restrictions apply). base model: Qwen/Qwen3.8-Flash-Next.