| Konfiguracja | Mediana | Średnia | vs baseline | Uwagi |
|---|---|---|---|---|
| Baseline (sampling, bez spec) | 39.9 | — | 1.00× | punkt odniesienia |
--spec-type draft-mtp -n 2 | 54.5 | — | +37% | sweet spot; kod +64% |
--spec-default (ngram) + mtp | 54–60 | 71 | +36…51% | wysoka wariancja, kod 105–135 |
| MTP n=3 | 52.5 | 52.7 | +32% | gorszy niż n=2 — za dużo weryfikacji |
Natywny draft-mtp (heady next-token modelu) daje +37% tok/s przy zerowej degradacji jakości. Acceptance rate w kodzie: 0.55–0.92. Wyższe n nie pomaga — n=2 to optimum, n=3 dodaje koszt weryfikacji bez zysku z akceptacji (52.5 vs 54.5 tok/s).
Dodaje drugi mechanizm spekulacji (ngram-match w historii). Na kodzie 105–135 tok/s (vs 65 mtp-only), ale na prozie wariancja jest duża (44–60). Jeśli serwer obsługuje głównie kod — warto; mieszane obciążenie — mały zysk.
Perplexity na korpusie 297 KB (BDH paper, ctx 8192): f16 = 6.3356, q8_0 = 6.3300 (−0.09%, w granicach szumu), q4_0 = 6.3463 (+0.17%, także w granicach błędu ±0.086). Kwantyzacja KV cache jest praktycznie bezstratna — q8_0 używane produkcyjnie.
| Konfiguracja KV | PPL | vs f16 | Wniosek |
|---|---|---|---|
| f16 (referencja) | 6.3356 | — | pełna precyzja |
| q8_0 | 6.3300 | −0.09% | szum pomiarowy — zero degradacji |
| q4_0 | 6.3463 | +0.17% | w granicach błędu ±0.086 |
Korpus: 297 KB (artykuł naukowy, en), ctx 8192, flash-attn on, t=16. Przedział błędu ±0.086 sprawia, że różnice między wszystkimi wariantami są nieistotne statystycznie. Wniosek: KV cache można bezpiecznie kwantyzować — q8_0 wybrane produkcyjnie jako kompromis.
Ten sam --seed 42 + ten sam prompt: 406 znaków wspólnych (cały private-think identyczny), rozjazd dopiero w samplowaniu treści — MTP inaczej zużywa RNG, ale z tej samej dystrybucji. Speculative decoding jest dystrybucyjnie transparentny: MTP zmienia tylko prędkość, nie jakość.
llama-server -m /data/models/qwen3.8/Qwen3.8-27B-Q4_K_M.gguf \
--host 127.0.0.1 --port 8080 -ngl 99 -t 16 \
-c 131072 --no-context-shift --flash-attn on \
--cache-type-k q8_0 --cache-type-v q8_0 \
--jinja --reasoning-format deepseek \
--temp 0.7 --top-p 0.80 --top-k 20 --min-p 0.0 --presence-penalty 1.5 \
--spec-type draft-mtp --spec-draft-n-max 2 -np 1
Multi-Token Prediction: wbudowane "głowice" w modelu przewidują 2 kolejne tokeny. Spekulacyjna dekodacja weryfikuje drafty jednym przejściem — stąd zysk. Model ma wagi MTP wbudowane w GGUF (wariant unsloth) — --spec-type draft-mtp je używa bez pobierania osobnych plików.
--reasoning-preserve / --agent (wyższe tok/s dla reasoning-heavy)