Views
No views yet
ornith-ai/Ornith-1.5-9B
for vLLM on Blackwell (sm120), with a distilled MTP draft head included. Upstream ships
1.5-9B as bf16, GGUF and MLX — there is no NVFP4 build anywhere else.model-mtp.safetensors, 15 tensors, bf16) — Ornith-1.5-9B has
none upstream, so this is our own KL-distilled head, the same one in
Ornith-1.5-9B-MTP-GGUF.| Component | Precision | Why |
|---|---|---|
| LM attention + MLP linears (128) | NVFP4 W4A4 | the win |
| Vision tower (333 tensors) | bf16 | no sm120 W4A4 kernel for it |
DeltaNet / GDN linear_attn | bf16 | low-precision activations corrupt DeltaNet — standing finding on this arch |
lm_head, embed_tokens | bf16 | quantizing lm_head is the known vLLM NVFP4 crash |
MTP head (mtp.*) | bf16 | drafts only; the target verifies every token |
1vllm serve protoLabsAI/Ornith-1.5-9B-NVFP4 \
2 --max-model-len 32768 --gpu-memory-utilization 0.30 \
3 --enable-auto-tool-choice --tool-call-parser qwen3_xml \
4 --reasoning-parser qwen3 --generation-config auto --trust-remote-code--generation-config auto is load-bearing, not boilerplate. It picks up the model's own
sampling defaults. The Ornith-1.5 family fails to terminate at low temperature — pinning a low
temp will run it to your token cap producing nothing useful.VLLM_USE_FLASHINFER_SAMPLER=0 and VLLM_USE_TRITON_FP8_GEMM=1.max_tokens=400 the model returned 0 characters and finish_reason=length; the
same prompt at 4096 returned a clean 724-character answer plus a 5046-character trace. If you
get blank responses, raise the budget before suspecting the weights.vllm bench serve, random dataset, cache-cold), RTX PRO 6000 Blackwell,
co-tenant lanes live on the box — so these are honest-but-not-quiet-GPU numbers:regime C ttft p50 tpot p50 agg tok/s goodput
chat 1k/1k 1 63ms 6.7ms 148.5 0.15
chat 1k/1k 8 296ms 7.3ms 1059.0 1.03
context 8k/1k 1 305ms 6.8ms 140.2 0.14
context 8k/1k 8 1297ms 9.2ms 775.4 0.69--speculative-config changed:arm decode acceptance
MTP off 151.1 t/s —
MTP on (K=1) 192.5 t/s 0.8041vllm serve protoLabsAI/Ornith-1.5-9B-NVFP4 \
2 --speculative-config '{"method":"mtp","num_speculative_tokens":1}' ...Qwen3_5MTP and shares the target's embedding and lm_head
with the drafter — no separate draft model to wire up.--dataset-name random you are measuring the dataset.probe bf16 NVFP4 p (Fisher, 2-sided)
--------------------------- ------- ------- -------------------
shapes (red circle/blue sq) 20/20 20/20 1.00
wordmark OCR, exact 1/20 1/20 1.00
wordmark OCR, token correct 7/20 13/20 0.11axis score kind detail
-------------- ----- ------------------ ------
function_call 0.963 schema-checked 52/54 · untagged 100% · in-proc 100% · ext 90%
claw 0.675 agentic/LLM-judged 10 tasks · robustness 1.00 · safety-clean
reasoning_hard 0.611 solver-verified 5/9 full-pass
livecodebench 0.115 exec-graded hard-only, 30 problems, thinking-offcompletion PASS coherent, correct, terminates
tool call PASS qwen3_xml, correct name + parsed arguments
vision PASS 5/5 shapes; parity vs bf16 at n=20 (table above)
census PASS 128 LM linears packed; visual/linear_attn/mtp/lm_head packed = 0
MTP sidecar present, 15 tensors; no key-prefix manglingornith-ai/Ornith-1.5-9B (MIT) — dense Qwen3.5-9B-architecture hybrid (linear +
full attention) VL fine-tune, trained with end-to-end RL self-improvement.Qwen/Qwen3.5-9B (Apache-2.0), then KL-distilled against
Ornith-1.5-9B's own hidden states.