CoolFace
Modelpublic

LordNeel/Ornith-1.0-35B-GGUF-llamacpp-tp1

sourceHugging Facemitupdated 3mo agoView on Hugging Face
10likes3.9kdownloads
Model Card

Ornith-1.0-35B — GGUF (llama.cpp, single-GPU tp=1)

Single-GPU llama.cpp GGUF package for `deepreinforce-ai/Ornith-1.0-35B`. The supported serving policy is tp=1 — one model copy per GPU. Multi-GPU tensor-parallel serving is intentionally out of scope for this version.

This release ships six body quants (Q3KM → Q80) plus an **integrated IQ4XS-MTP graft** that adds a native multi-token-prediction (MTP) draft head for low-concurrency speculative decode. Quant quality is measured against the upstream BF16 GGUF with a native llama.cpp next-token top-64 KL-divergence probe over 32 coding prompts.

TL;DR — pick an artifact

Use caseRecommended artifactKey numbers
Default serving speedornith-1.0-35b-Q4_K_M.gguf19.71 GiB on disk, 21.31 GiB loaded VRAM, 243.3 tok/s c1, 655.6 tok/s c16
Lowest memoryornith-1.0-35b-Q3_K_M.gguf15.61 GiB on disk, 17.27 GiB loaded VRAM, 240.5 tok/s c1, 493.0 tok/s c16
Middle footprintornith-1.0-35b-IQ4_XS.gguf17.64 GiB on disk, 19.34 GiB loaded VRAM, 0.1426 mean top-64 KLD nats
Highest fidelity / footprintornith-1.0-35b-Q6_K.gguf26.56 GiB on disk, 28.03 GiB loaded VRAM, 0.0165 mean top-64 KLD nats, 32/32 top-1
Native low-concurrency MTPornith-1.0-35b-IQ4_XS-MTP-graft-headQ6.gguf19.6 GB decimal, 0.0731 mean top-64 KLD (29/32), c1/128 adaptive MTP 319.53 tok/s, acceptance (0.953, 0.865)
MTP graft note: active MTP is byte-for-byte identical to target-only at the next-token (API-visible) level, and gives ~1.3× single-stream decode. It is not bit-exact to target-only over long deterministic sequences — see MTP. Use target-only for strict reproduction, MTP for throughput on open-ended work.

Quantization & fidelity

Fidelity is KL(P_bf16 || P_candidate) over next-token top-64 distributions, 32 coding prompts, n_predict=1, temperature=-1, n_probs=64, keyed by token ID. Lower KLD and higher greedy top-1 agreement are better.

Primary fidelity table

ArtifactMean KLD (nats)Greedy top-1 †
Q8_00.010831/32 (96.9%)
Q6_K0.016532/32 (100.0%)
Q5_K_M0.035430/32 (93.8%)
`IQ4_XS-MTP` (graft)0.073138244229/32 (90.6%)
Q4_K_M0.086429/32 (90.6%)
IQ4_XS0.142627/32 (84.4%)
Q3_K_M0.362027/32 (84.4%)

[image]

Fidelity ladder — the integrated IQ4_XS-MTP graft (purple) lands between Q5_K_M and Q4_K_M, i.e. better next-token fidelity than its Q4_K_M neighbor.

† Top-1 vs mean KLD are different axes. Top-1 counts how often the single most-likely (argmax) token matches BF16's, over the 32 prompts; mean KLD measures divergence across the full top-64 distribution. Two quants can share a top-1 count yet differ a lot in KLD — e.g. Q3_K_M and IQ4_XS are both 27/32 on top-1, but Q3_K_M's distribution diverges ~2.5× more (0.3620 vs 0.1426 nats). Neither value is a typo.
  • —The integrated IQ4_XS-MTP graft is 48.70% lower mean KLD than the plain IQ4_XS body (0.0731382442 vs 0.1425748206), and improves greedy top-1 from 27/32 to 29/32.
  • —Active `draft-mtp` ≡ target-only at the next-token level: their top-64 next-token distributions are identical (KLD 0.0, 32/32) for the one-token API-visible probe.

Body-quant distribution detail (secondary)

Full per-quant distribution from the corrected top-64 probe (same 32 prompts). Mean / P50 / P95 / Max are explicit nats statistics of the per-prompt top-64 KLD; in this run the BF16 top-64 distribution captured mean probability mass 0.999965, so the top-64 approximation captured essentially all next-token mass.

QuantGGUF GiBKLD-probe VRAM GiBMean natsP50 natsP95 natsMax natsTop-1 †
Q3KM15.6116.320.36200.25481.10771.373027/32 (84.4%)
IQ4_XS17.6419.340.14260.08680.31950.658627/32 (84.4%)
Q4KM19.7120.350.08640.03790.28770.450329/32 (90.6%)
Q5KM23.0323.610.03540.02350.09430.249730/32 (93.8%)
Q6_K26.5627.070.01650.00920.05130.058632/32 (100.0%)
Q8_034.3734.770.01080.00520.04400.059031/32 (96.9%)

The IQ4_XS-MTP graft uses the same probe on a different breakpoint context; its distribution detail (P50 0.0492811974 / P95 0.1593743642 / Max 0.3348258511) is in the MTP section. Source: benchmarks/kld-quant-vs-bf16-top64.md.

Serving performance

Aggregate decode throughput and p95 time-to-first-token across concurrency, llama.cpp tp=1, from scripts/bench_openai.py --stream --max-tokens 256 (0 failed requests per row). Q4KM is the speed pick; Q5KM nearly ties it at c16.

Quantc1 tok/sc1 p95 TTFT msc4 tok/sc4 p95 TTFT msc8 tok/sc8 p95 TTFT msc16 tok/sc16 p95 TTFT ms
Q3KM240.577.9422.0170.7464.4344.9493.0493.7
IQ4_XS234.175.1297.7159.7411.5330.2476.0541.5
Q4KM243.376.3458.3192.3615.0361.8655.6650.0
Q5KM236.775.1311.0198.8439.0383.6638.6620.4
Q6_K225.976.8295.8194.2409.6394.8603.3657.4
Q8_0208.576.9281.5190.8405.8389.1601.4725.8

[image]

[image]

Profile note: the table above is a short-context profile — CTX_SIZE=8192 PARALLEL=16 exposes n_ctx = 512/slot, with ~23-token prompts and 256-token generations. Source: benchmarks/llamacpp-quant-benchmarks.md. For how prefill latency scales with prompt length, see long-context TTFT below.

Long-context TTFT (single stream)

p95 time-to-first-token vs prompt/context length, single GPU tp=1, single stream (CTX_SIZE=131072 PARALLEL=1, n_ctx/slot=131072, exact prompt token counts, 140 rows/quant, 0 failures).

Context tokensQ4_K_M p50/p95 msQ4_K_M tok/sIQ4_XS p50/p95 msIQ4_XS tok/sMTP-graft p50/p95 msMTP-graft tok/s
51291.8 / 94.1188.387.1 / 88.7177.486.0 / 87.8184.0
1024169.6 / 172.2145.8159.9 / 161.6139.9157.6 / 159.0155.9
2048341.8 / 346.197.9316.1 / 318.7112.0307.6 / 308.9113.9
4096699.2 / 702.267.2647.0 / 653.470.7625.7 / 631.369.0
81921447.5 / 1458.033.71342.9 / 1348.539.81297.4 / 1304.040.9
163843009.7 / 3030.419.52793.2 / 2804.020.92709.8 / 2737.321.5
327686302.4 / 6313.09.75829.9 / 5853.110.55673.5 / 5696.610.7

[image]

p95 TTFT rises with prompt length (prefill cost) to ~6.3 s at 32k tokens for Q4KM; the IQ4XS body and IQ4XS-MTP graft prefill slightly faster at every length. Decode throughput falls from ~180–190 tok/s at 512 tokens to ~10 tok/s at 32k as the KV cache grows. Source: benchmarks/llamacpp-longctx-ttft.md.

Multi-token prediction (MTP)

The integrated IQ4_XS-MTP-graft-headQ6 artifact carries a native MTP draft head on the IQ4XS body. The release recommendation is **adaptive**: use MTP for low-concurrency / single-user requests and keep `LLAMASPECMAXDRAFTING_SLOTS=1` so saturated batches fall back to target-only throughput. The MTP catalog validates the published MTP profiles.

Next-token quality

Active MTP does not change the one-token, API-visible next-token distribution. Mean BF16 KLD is 0.0731382442 nats over the 32-prompt top-64 probe (P50 0.0492811974 / P95 0.1593743642 / Max 0.3348258511), top-1 29/32. The active draft-mtp vs target-only graft next-token KLD is 0.0 (32/32 identical).

Sequence-level behavior

A deterministic 8 prompt × 64 token probe (n_predict=64, temperature=-1, n_probs=64) compares the same GGUF running active native draft-mtp against target-only.

RuntimeClient agg tok/sServer decode tok/sDraft acceptanceExact 64-tok seqsToken-position match
Target-only graft172.57~210 (per-request timing)n/a8/8 baselinen/a
Fast active draft-mtp, n_max=2233.81325.70 (/metrics)310/378 = 82.01%; per-position (0.884, 0.747)6/8478/512 = 93.36%
LLAMA_SPEC_VERIFY_SEQUENTIAL=1164.34204.88 (/metrics)313/375 = 83.47%; per-position (0.884, 0.772)5/8455/512 = 88.87%

[image]

  • —Fast active MTP gives ~1.35× client throughput (233.81 vs 172.57) and server decode 325.70 vs ~210, with 82.01% draft acceptance.
  • —It matches 6/8 sequences exactly and 478/512 = 93.36% of token positions; the two non-exact sequences first diverge at positions 60 and 34.
  • —The LLAMA_SPEC_VERIFY_SEQUENTIAL=1 variant is both slower (164.34 / 204.88) and matches less (5/8, 88.87%; divergences at 25, 43, 60) — i.e. the fast verifier is here both faster and more target-matching.
Note: MTP self-speculation is not bit-exact to target-only over long deterministic generations. For workloads that require exact target reproduction, run target-only; for throughput on open-ended work, MTP wins. MTP is a single-user / low-concurrency win — it is not faster on saturated batches, which is why the adaptive throttle falls back to target-only.

Sequence logprob comparability (API limitation)

llama.cpp omits candidate top_logprobs for most accepted speculative tokens, so a naive "sequence KLD" looks enormous — that is an API/logprob-availability artifact, not model quality. On the comparable subset where the emitted token also matches, KLD is ≈ 0.001 nats (near zero):

RuntimePaired positionsComparable top-logprobsMissingComparable same-token mean KLD (nats)Max (nats)
Fast active draft-mtp vs target-only512125000.00112157390.0040239103
Sequential verifier vs target-only512105020.00122931720.0040239103

Full sequence KLD cannot be computed without changing the runtime to return target verifier logprobs for accepted speculative tokens.

Draft-head distillation provenance

The meaningful KL-style metric for a standalone MTP draft head is teacher KL against cached target hidden states, not standard base-model next-token KLD. The draft head was trained and measurably improved across checkpoints — teacher KL fell 1.92 → 1.50 → 0.76 and teacher argmax top-1 rose 0.54 → 0.69 → 0.89.

Draft checkpointTokensWindowsTeacher KLTeacher argmax top-1Teacher argmax top-5Gold top-1
mtp-distill-kl-step50022,6371281.92220257480.53602509170.78817864560.4425939833
snapshots-iq4-live-accepted-a/step-100058,7544131.50387249420.68768083880.83684515100.6764816013
snapshots-iq4-live-allrows-b/step-100032,2642,0480.75916103730.89080709150.93897222910.8076183982

[image]

Teacher KL is measured against cached target hidden states (not base next-token KLD). These training artifacts live under `artifacts/mtp/` locally and are referenced by name as provenance — they are not committed in this HF repo.

Run with llama.cpp

Serve a body quant on GPU0 (tp=1):

bash
QUANT=Q4_K_M PORT=8000 CTX_SIZE=8192 PARALLEL=16 REASONING=off \
  scripts/serve_llamacpp_gpu0.sh

Serve the integrated MTP graft for low-concurrency speculative decode (keep adaptive throttling so saturated batches fall back to target-only):

bash
QUANT=IQ4_XS-MTP-graft-headQ6 PORT=8000 CTX_SIZE=8192 PARALLEL=1 \
  CACHE_RAM=0 REASONING=off LLAMA_SPEC_MAX_DRAFTING_SLOTS=1 \
  scripts/serve_llamacpp_gpu0.sh

REASONING=off is the default because the model otherwise spends simple coding prompts in reasoning_content before producing final content. See benchmarks/llamacpp-q4-reasoning-off-fix.md. Serving / quant / MTP profile catalogs: configs/serving_profiles.yaml, configs/quant_artifacts.yaml, configs/mtp_profiles.yaml.

Benchmark environment

Hardware: NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition, 97,887 MiB VRAM, single GPU (tp=1). Driver 580.159.03, CUDA runtime reported by driver 13.0.

Dedicated MTP KLD eval config (2026-06-28): local llama.cpp CUDA server, single RTX PRO 6000 Blackwell 96GB, tp=1, CTX_SIZE=8192, PARALLEL=1, CACHE_RAM=0, REASONING=off.

  • —llama.cpp build/commit: 050ee92d04c2e1f639025786dea701c70e7d4204 (pinned for the long-context TTFT run; earlier KLD/throughput sweeps were not separately pinned).
  • —Reasoning mode: all benchmarks in this card ran with REASONING=off.

Provenance & reproducibility

  • —Figures: regenerate with `scripts/make_charts.py` → assets/02_fidelity_ladder.png, assets/03_throughput_tps.png, assets/04_ttft_p95.png, assets/05_mtp_draft_head_distill.png, assets/06_mtp_tps.png.
  • —Serving throughput / TTFT: benchmarks/llamacpp-quant-benchmarks.md.
  • —Body-quant fidelity: benchmarks/kld-quant-vs-bf16-top64.md.
  • —Dedicated MTP KLD / sequence eval (2026-06-28): benchmarks/mtp-kld-eval-2026-06-28.md and benchmarks/mtp-dedicated-kld-evaluation.md, with raw evidence under benchmarks/raw/. Includes the sequence-level probe and its logprob-availability limitation (full sequence KLD is not computable from the current llama.cpp API response).
  • —Adaptive MTP serving profile: benchmarks/llamacpp-iq4-xs-mtp-graft-adaptive-profile.md.
  • —Long-context TTFT: benchmarks/llamacpp-longctx-ttft.md.