543 tok/s single-request Qwen3.6-35B-A3B on one RTX 5090 over a 65K-token decode
Mirrored from r/LocalLLaMA for archival readability. Support the source by reading on the original site.
TL;DR
I have open-sourced NInfer, a from-scratch C++/CUDA inference engine currently specialized for two exact Qwen3.6 checkpoints on a single RTX 5090. Both the engine and the converted model artifacts are publicly available:
Github: https://github.com/Neroued/ninfer
The main result:
Qwen3.6-35B-A3B sustained 542 tok/s while generating a full 65,536 token completion, on a single RTX 5090, single request.
My goal was to find out how fast inference can get on a single GPU (in my case RTX 5090), with a fixed model and fixed weights, after deep, end-to-end optimization. To that end, I threw everything I could at it and built the entire pipeline from scratch: custom quantization, weight layout design, per op kernel optimization, kernel fusion, a dedicated LM head draft, and so on. NInfer is not a general inference engine, it's designed just for certain model artifacts.
The currently supported models are:
Both converted model artifacts are available on Hugging Face. Under NInfer's quantization scheme, the published artifacts are 16.29 GiB (~5.03 bpw) for Qwen3.6-27B and 20.84 GiB (~4.97 bpw) for Qwen3.6-35B-A3B.
The Qwen3.6-35B-A3B results:
All MTP results below use a draft window of 3 and NInfer’s optimized LM-head draft path. Each result is the mean ± sample standard deviation across five fixed seeds, after one warm-up run.
Long-reasoning runs:
| Completion length | Decode speed | MTP acceptance |
|---|---|---|
| 65,536 tokens | 542.8 ± 12.5 tok/s | 73.0% |
| ~55,171 tokens | 572.9 ± 9.1 tok/s | 77.7% |
| ~8,675 tokens | 634.3 ± 14.2 tok/s | 82.7% |
I also ran a mixed set of code, translation, story, and structured output prompts:
| Workload | Decode speed | MTP acceptance |
|---|---|---|
| Code | 576.5 ± 21.7 tok/s | 71.0% |
| Translation | 559.3 ± 28.1 tok/s | 66.6% |
| Story | 395.9 ± 30.9 tok/s | 37.7% |
| Structured output | 661.2 ± 29.5 tok/s | 87.2% |
MTP0 context-length scaling:
| Prompt length | Prefill speed | Decode speed |
|---|---|---|
| 7,680 | 15,544 tok/s | 271.1 tok/s |
| 64,512 | 10,809 tok/s | 242.9 tok/s |
| 130,048 | 7,828 tok/s | 219.4 tok/s |
| 260,096 | 5,157 tok/s | 188.2 tok/s |
The Qwen3.6-27B results:
NInfer also performs strongly on the 27B dense model:
| Workload | Decode speed | MTP acceptance |
|---|---|---|
| Long-reasoning | 174.2 ± 3.3 tok/s | 79.9% |
| Code | 163.9 ± 6.2 tok/s | 72.5% |
| Translation | 153.6 ± 11.7 tok/s | 65.7% |
| Story | 110.4 ± 9.2 tok/s | 37.9% |
| Structured output | 189.1 ± 15.7 tok/s | 88.9% |
Capability scores:
I also ran the published artifacts through AIME25, AIME26, and GPQA-Diamond (0-shot, rule scoring, single sample, thinking enabled, MTP=3).
| Model | AIME25 | AIME26 | GPQA-Diamond |
|---|---|---|---|
| Qwen3.6-27B-NInfer | 26/30 | 28/30 | 172/198 |
| Qwen3.6-35B-A3B-NInfer | 27/30 | 27/30 | 169/198 |
Full evaluation configurations are availble in the repository.
Capabilities & limitations
For both supported models, NInfer handles text, image, and video input, with OpenAI- and Anthropic-compatible HTTP endpoints. It supports limited prefix caching and a range of sampling parameters. With INT8 KV cache enabled on the RTX 5090's 32 GB, both models can reach their full native context length of 262,144 tokens.
Known limitations:
- Only the two listed models are supported. If a stronger, locally-suitable model drops, I'll jump on it immediately.
- Only RTX 5090 (sm_120a). RTX PRO 6000 should also work, though some kernel tuning may be suboptimal.
- No continuous batching. (If no new models land soon, I may look into adding it.)
I'd genuinely like to see another inference engine match or beat these numbers — similar quantization size, single request, single RTX 5090, Qwen3.6-35B-A3B. Bring it on.
[link] [comments]
Discussion (0)
Sign in to join the discussion. Free account, 30 seconds — email code or GitHub.
Sign in →No comments yet. Sign in and be the first to say something.