| --- |
| license: mit |
| base_model: deepreinforce-ai/Ornith-1.0-9B |
| tags: |
| - speculative-decoding |
| - mtp |
| - multi-token-prediction |
| - qwen3.5 |
| - vllm |
| library_name: vllm |
| --- |
| |
| # Ornith-1.0-9B MTP head |
|
|
| An **MTP (Multi-Token-Prediction) speculative-decode head** for |
| [`deepreinforce-ai/Ornith-1.0-9B`](https://huggingface.co/deepreinforce-ai/Ornith-1.0-9B). |
| Ornith-1.0-9B shipped without the `mtp.*` tensors its Qwen3.5-9B base carries, so it serves |
| with no native speculative speedup. This is that head, re-aligned to Ornith's hidden states. |
|
|
| Merge it into Ornith-1.0-9B (one command, below) and serve with vLLM's `mtp` method for a |
| **lossless +49β57% single-stream decode speedup**. Lossless by construction: the base model |
| verifies every drafted token, so the output distribution is unchanged β the head only buys |
| throughput. |
|
|
| ## Results |
|
|
| Measured on a single RTX PRO 6000 Blackwell, vLLM 0.22.1, `num_speculative_tokens=1`. |
| Acceptance is reported on two prompt distributions (coding, and WildBench/ToolACE-style), |
| sampled at T=0.7. |
|
|
| | Head | Accept (coding) | Accept (corpus) | tok/s | Notes | |
| |---|:---:|:---:|:---:|---| |
| | none (plain Ornith-9B) | β | β | ~75 | no MTP | |
| | graft (Qwen head, zero training) | 0.763 | 0.742 | ~117 | free, reproducible below | |
| | **this head (KL-distilled)** | **0.765** | **0.762** | **~121** | best | |
|
|
| Two findings came out of building it: |
|
|
| 1. **The graft is nearly free.** Copying Qwen3.5-9B's MTP head onto Ornith verbatim already |
| gives ~0.74β0.76 acceptance β the fine-tune is light enough that the base head transfers. |
| You can reproduce that head in one command (no download needed); see below. |
| 2. **The training objective is what matters.** Re-distilling the head with hard |
| cross-entropy on sampled tokens *regressed* acceptance (it sharpens the argmax but |
| miscalibrates the distribution). MTP acceptance is rejection sampling against the target, |
| which rewards a draft distribution that *matches* the target β so this head is trained |
| with **KL divergence to the target's own next-token distribution**. Same data, same |
| schedule; only the loss changed. |
|
|
| ## Use |
|
|
| ```bash |
| # 1. merge this head into Ornith-1.0-9B (verbatim tensor copy; ~0.5 GB head, base untouched) |
| hf download protoLabsAI/Ornith-1.0-9B-MTP --local-dir ./ornith-mtp-head |
| python recipe/graft.py \ |
| --donor ./ornith-mtp-head \ |
| --target deepreinforce-ai/Ornith-1.0-9B \ |
| --out ./Ornith-1.0-9B-MTP |
| |
| # 2. serve with vLLM's native MTP method |
| vllm serve ./Ornith-1.0-9B-MTP \ |
| --speculative-config '{"method":"mtp","num_speculative_tokens":1}' |
| ``` |
|
|
| ### Reproduce the zero-training graft (no download) |
|
|
| ```bash |
| python recipe/graft.py --donor Qwen/Qwen3.5-9B \ |
| --target deepreinforce-ai/Ornith-1.0-9B --out ./Ornith-1.0-9B-MTP-graft |
| ``` |
|
|
| ## Recipe |
|
|
| The full, donor-agnostic toolkit is in [`recipe/`](./recipe) β it retargets any Qwen3.5 |
| fine-tune: `graft.py` (transplant the head), `gen_corpus.py` (self-distillation: the target's |
| own generations, no external data), `distill.py` (`loss: kl`, freeze base / train only the |
| head), `eval_head.py` (offline acceptance proxy), `validate.sh`. The recipe is the product. |
|
|
| ## Provenance & license |
|
|
| - Base model: `deepreinforce-ai/Ornith-1.0-9B` (MIT). This head is a derivative; merging it |
| produces a derivative of Ornith-1.0-9B β its MIT terms carry. |
| - The head was initialized from `Qwen/Qwen3.5-9B`'s `mtp.*` tensors, then re-trained on |
| Ornith-9B's own generations. |
| - Released under **MIT** by [protoLabs.studio](https://protolabs.studio). Open core: free to |
| fork, no paywall on the weights or the recipe. |
|
|
| ## Works on quantized bases too |
|
|
| Verified on [`Ornith-1.0-9B-NVFP4`](https://huggingface.co/protoLabsAI/Ornith-1.0-9B-NVFP4) |
| (calibrated W4A4): acceptance **0.76** on real text vs 0.762 on bf16 β quantizing the target |
| costs the draft head nothing, and NVFP4+MTP measures ~1.5x bf16+MTP under identical load. |
| Same one-command merge; or use the NVFP4 repo, which ships this sidecar in-box. |
|
|
| Benchmark rows: [`protoLabsAI/lab-benchmarks`](https://huggingface.co/datasets/protoLabsAI/lab-benchmarks). |
| Want a different variant? Open a Community discussion β usually ~48h. |
|
|