llama.cpp single 3090 — Qwen3.6-27B + MTP at 60 t/s code, matches vLLM dual aider on half the hardware (v0.8.3) #170
Replies: 6 comments 8 replies
-
|
Hey noonghunna, First up a big thank you for the relentless pursuit of 3090 greatness, correctness and speed. I wanted to look into your tuning of llama.cpp and see the performance for myself. Sadly your mentioned method of building the container still seems to be work in progress? I was not able to find a code-path in Regards |
Beta Was this translation helpful? Give feedback.
-
|
Sadly I can't quite reach your numbers with a build from llama.cpp-master ( club-3090 rig reportGenerated: 2026-05-20 07:31:45 UTC Redacted output (paths, host, user, tokens). Re-run with System
CPU + RAM
Disk
GPU hardware
NVLinkNo NVLink detected (PCIe-only) TopologyPCIe / GPU topology matrixPCIe / P2P detail (lspci)lspci PCIe/P2P detail (LnkSta / ACS / topology)Full nvidia-smiFull nvidia-smi outputDisplay / desktop state
Container runtime
Stack version
Profile state
KV math calibration
Full kv-calc --calibration outputActive container
Container engine state (llama.cpp)Model load + KV cache init: Recent warnings/errors (last 5): Full boot log (first 200 lines)First 200 lines of docker logsRecent failed boot attemptsNo recently-exited vLLM or llama.cpp containers found. Generated by |
Beta Was this translation helpful? Give feedback.
-
|
Hi @noonghunna - thank you so for much for doing all this great work! Quick question: Disregard if already included in your sweep and thanks again! |
Beta Was this translation helpful? Give feedback.
-
|
@noonghunna Any tips for reproducing the 102 / 150 (68 %) quality numbers for llamacpp/mtp? I started with master and no modifications, then added the froggeric template v19. After that I started looking into parallel tool calls. llama.cpp doesn't have the command line option and needs I'm getting only 95/150 and am wondering if I'm missing a setting. I'd like to try to reproduce your numbers so I could compare my other experiments against it. Quality resultsllamacpp/mtp defaults
llamacpp/mtp with template fix
|
Beta Was this translation helpful? Give feedback.
-
|
Update-update: Context is only 200k; still good, but not as good as pinned update up top. |
Beta Was this translation helpful? Give feedback.
-
|
FYI, EAGLE3 for Qwen3.6 has been merged into llama.cpp mainline |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
llama.cpp single 3090 — Qwen3.6-27B + MTP at 60 t/s code, matches vLLM dual aider on half the hardware (v0.8.3)
TL;DR: v0.8.3 shipped two new llama.cpp single-card profiles that close a long-standing gap on this stack: getting near-vLLM throughput on a single RTX 3090 without losing context-length to fit. The big surprise:
llamacpp/mtpmatches the dual-3090 vLLM bf16 aider score (17/30 = 56.7%) exactly — half the hardware, same coding outcome — and its boundary stress matrix walks past the previously-documented "Cliff 2" at 50–60K cleanly. Numbers below.Substrate
d14ce3dab) — the merge commit for MTP PR #22673unsloth/Qwen3.6-27B-MTP-GGUF(the MTP-bundled GGUF)scripts/rebench-full.sh(bench + verify-stress + quality-full + soak + aider-polyglot-30); summary inBENCHMARKS.mdThe three profiles
llamacpp/defaultllamacpp/mtpllamacpp/mtp-visionAll three run on the local
llama-cpp:localimage (built byscripts/setup.sh, not pulled from Docker Hub) — they're immune to the vLLM nightly Docker Hub purges that hit some users this week (#165, #167).Headline numbers
llamacpp/mtp(Q4_K_M, 131K, MTP n=2, q4_0 KV)llamacpp/mtp-vision(Q4_K_M, 49K, MTP+vision)llamacpp/default(Q3_K_XL, 262K)Comparison:
llamacpp/mtpvs the vLLM dual-3090 configs (#119):llamacpp/mtp(us)The quality 8-pack is +6 to +16 pp ahead of every vLLM dual config we've benched, and aider-polyglot ties the best bf16-dual leg. We did not expect Q4_K_M GGUF to lead quality across the matrix — it does.
Cliff 2 was config-driven, not architectural
The single-card stack has had a documented "Cliff 2" at ~50–60K accumulated context — a DeltaNet GDN forward path that OOMs prefill on Qwen3.6-27B. The framing in our own
docs/CLIFFS.mdhad been "architectural, single-card Qwen3.6-27B can't go past ~50K reliably." That turned out to be too strong.At
-ub 1024+ 131K KV + MTP n=2 +--reasoning off, the cliff goes away:-ub 2048was the actual bound; halving it (-ub 1024) + the larger 131K KV pool walks past itCLIFFS.mdupdated 2026-05-19 to clarify the finding is llama.cpp-specificHat-tip to @ampersandru (#152) — their cross-engine ik_llama.cpp gauntlet was the forcing function that pushed us to retest at higher ctx + smaller
-ub. Their full config decomposition is also queued as a mainline MTP retune A/B (n=4 + draft-p-min 0.0) on the queue for the next bench cycle.How to run
All three serve on the OpenAI-compatible endpoint at
http://localhost:<port>/v1/chat/completionsand accept all standard sampling / tool-use parameters. Built locally viascripts/setup.sh; no Docker Hub dependency.Updates since posting
2026-05-20 — speed vs context for
llamacpp/mtp-vision(@JensJN's question): the shipped 49K context ceiling onmtp-visionis the speed-optimal point, not the only safe point. Smaller-ub(512 instead of the shipped 1024) trades ~10% TPS for ~4× more context on a single 3090, with full cliff coverage (verify-stress 7/7 incl. 91K needle):ub=1024ub=512 CTX=196608Use it via:
Documented in
models/qwen3.6-27b/llama-cpp/README.md(commit1b2a76c). Defaults unchanged; the lever is yours to dial.2026-05-20 —
llama-cpp:localimage bug fix (@zemaphore's report): v0.8.3 composes referenced an orphan image that didn't exist for fresh-clone users. Fixed in commitsc3e7c7e→4a53eda→78556f8— composes now use the rolling upstreamghcr.io/ggml-org/llama.cpp:server-cudaimage (no patches, no pin), andreport.shcaptures image digest + OCI labels for reproducible bug reports.What's next
n=4 + --spec-draft-p-min 0.0vs the shippedn=2defaults; ampersandru's data suggests headroom here, likely lands within the week--merge-qkv+--merge-up-gate-experts+-khad+ q8_0 KV combo to scope fork-only kernel-fusion residual gainsdocs/CLIFFS.md. The llama.cpp finding doesn't transferIf you're running Qwen3.6-27B on a single 3090 — especially with IDE-agent / coding workloads — try
llamacpp/mtpand report back. Particularly interested in cross-rig confirmations of the >60K context behavior (the verify-stress numbers are from one rig; a second confirmation would harden the "config-driven, not architectural" finding).Beta Was this translation helpful? Give feedback.
All reactions