Every measured result in one place, card by card: what fits, decode and prompt rates by model, KV format, context depth and drafter, several requests at once, Qwen3.8-Flash-Next's expert placements, and quality across cards. Which GPUs run NInfer at all is on Supported GPUs. The measurement pages keep each campaign's setup, analysis and extra tables.
Three methods appear below, and every table names its own:
- Server:
ninfer-servewith one request at a time andtools/bench/refbench.py, greedy, thinking off. Short chat is the mean decode rate of five 512-token answers; a depth is a cold document of that many tokens followed by an answer of about 400 words; prompt time is the server's time to the first token. - Engine:
ninfer_bench, the Engine without HTTP.pp512is a 512-token prompt,tg128128 decoded tokens. - CLI: one
ninferrequest; its summary gives the prompt and decode rates.
Numbers from different methods, hosts or builds are not read against each other as a benchmark. Drafters are written as MTP or DFlash2 with their draft count; acceptance is accepted / drafted drafts with the tokens committed per verify round in brackets.
| Card | Memory | Build | Power limit | Measured on |
|---|---|---|---|---|
| RTX PRO 6000 Blackwell Workstation Edition | 96 GB | 120a |
600 W | reference, Flash-Next |
| RTX 5090 | 32 GB | 120a |
575 W; 450 W for IQ3_S; 600 W boards for Flash-Next | reference, Flash-Next, GGUF |
| RTX 4090 | 24 GB | 89 |
450 W | reference, Flash-Next, GGUF |
| L40S | 48 GB | Flash-Next | ||
| RTX 3090 Ti, two | 24 GB each | 86 |
Flash-Next | |
| RTX 3090 | 24 GB | 86 |
300 to 420 W by campaign | every page |
| RTX 3060 | 12 GB | 86, the image |
170 W | small cards |
| RTX 3060 Ti | 8 GB | 86, the image |
200 W | small cards |
| TITAN RTX | 24 GB | 75 |
280 W | TITAN RTX |
| RTX 2080 Ti | 11 GB | 75, the image |
250 W | small cards |
| Tesla V100-SXM2-16GB | 16 GB | 70 |
300 W | Tesla V100 |
| Tesla V100-SXM2-32GB | 32 GB | 70 |
300 W | 32 GB follow-up |
The largest --max-context (= --kv-capacity, one request) the server starts with, bisected in
4,096-token steps, with --gdn-state-fp16 and --rope-yarn past 262,144; 1,048,576 is the
engine's ceiling, and the RTX PRO 6000 starts every configuration there with at least 50 GiB free.
On the 8 to 12 GB cards a step also had to answer one request. Each cell gives the window without
a drafter / with MTP 3 / with DFlash2 5:
| Model | KV | RTX PRO 6000 | RTX 5090 | RTX 4090 | RTX 3090 | Tesla V100 | RTX 3060 | RTX 2080 Ti | RTX 3060 Ti |
|---|---|---|---|---|---|---|---|---|---|
| Ternary Bonsai 2 27B | rk8v4 |
1,048,576 / 1,048,576 / 1,048,576 | 978,944 / 901,120 / 901,120 | 659,456 / 602,112 / 581,632 | 663,552 / 606,208 / 585,728 | ||||
| Ternary Bonsai 2 27B | rk4v4 |
1,048,576 / 1,048,576 / 1,048,576 | 1,048,576 / 1,048,576 / 1,048,576 | 958,464 / 876,544 / 831,488 | 970,752 / 884,736 / 839,680 | 499,712 / 421,888 / 344,064 | 266,240 | 200,704 / 143,360 | 24,576 / does not fit |
| Ternary Bonsai 2 27B | rk4v4-e8 |
1,048,576 | 1,048,576 | 958,464 | 970,752 | ||||
| Ternary Bonsai 2 27B | int8 |
106,496 | |||||||
| Qwen3.8-27B | rk8v4 |
1,048,576 / 1,048,576 / 1,048,576 | 598,016 / 544,768 / 491,520 | 278,528 / 241,664 / 167,936 | 286,720 / 249,856 / 176,128 | ||||
| Qwen3.8-27B | rk4v4 |
1,048,576 / 1,048,576 / 1,048,576 | 872,448 / 794,624 / 716,800 | 405,504 / 356,352 / 245,760 | 417,792 / 364,544 / 258,048 | ||||
| Qwen3.8-27B | rk4v4-e8 |
1,048,576 | 872,448 | 405,504 | 417,792 | ||||
| Qwen3.8-27B IQ3_S | rk4v4 |
241,664 / 176,128 / 32,768 | 8,192 / does not fit | ||||||
| Gemma 4 26B-A4B Q4_0 | bf16 |
61,440 / 28,672 (MTP 2) |
Gemma 4's windows at eight sequences on an RTX 3090 are in its section.
Filled to that window without a drafter (one request: a document with three codes at 33, 66 and 90%, asked back in order):
| Card | Model | KV | Tokens | Codes found | Prompt time | Decode after it, tok/s |
|---|---|---|---|---|---|---|
| RTX PRO 6000 | Ternary Bonsai 2 27B | rk4v4 |
1,048,576 | 2/3 | 910 s | 55.3 |
| RTX PRO 6000 | Qwen3.8-27B | rk4v4 |
1,048,576 | 2/3 | 999 s | 42.9 |
| RTX 5090 | Ternary Bonsai 2 27B | rk4v4 |
1,048,576 | 2/3 | 937 s | 56.2 |
| RTX 5090 | Ternary Bonsai 2 27B | rk8v4 |
978,944 | 3/3 | 772 s | 46.9 |
| RTX 5090 | Qwen3.8-27B | rk4v4 |
872,448 | 3/3 | 755 s | 47.6 |
| RTX 5090 | Qwen3.8-27B | rk8v4 |
598,016 | 3/3 | 378 s | 49.1 |
| RTX 4090 | Ternary Bonsai 2 27B | rk4v4 |
958,464 | 3/3 | 991 s | 30.9 |
| RTX 4090 | Ternary Bonsai 2 27B | rk8v4 |
659,456 | 3/3 | 484 s | 32.9 |
| RTX 4090 | Qwen3.8-27B | rk4v4 |
405,504 | 3/3 | 293 s | 35.4 |
| RTX 4090 | Qwen3.8-27B | rk8v4 |
278,528 | 3/3 | 166 s | 36.8 |
| RTX 3090 | Ternary Bonsai 2 27B | rk4v4 |
970,752 | 3/3 | 2,359 s | 17.7 |
| RTX 3090 | Ternary Bonsai 2 27B | rk8v4 |
663,552 | 3/3 | 1,137 s | 24.4 |
| RTX 3090 | Qwen3.8-27B | rk4v4 |
417,792 | 3/3 | 644 s | 23.8 |
| RTX 3090 | Qwen3.8-27B | rk8v4 |
286,720 | 3/3 | 353 s | 31.0 |
At 1,048,576 tokens both cards miss the code at 90%, with --rope-yarn and with plain RoPE alike.
Up to the 262,144-token window every card and KV format found all three codes
(needles).
Server, one request, window 262,144 tokens; decode tok/s after a cold document of that many tokens. VRAM is what the server holds when idle (the KV cache, workspaces and graphs are planned at startup):
| Card | KV | Drafter | VRAM | short chat | 1,024 | 8,192 | 32,768 | 65,536 | 131,072 | 196,608 | 261,120 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| RTX PRO 6000 | rk4v4 |
none | 12.6 GiB | 167.2 | 166.6 | 161.3 | 155.1 | 146.4 | 131.3 | 119.5 | 109.8 |
| RTX PRO 6000 | rk4v4 |
DFlash2 5 | 14.0 GiB | 360.9 | 401.3 | 317.4 | 284.2 | 242.7 | 197.9 | 179.4 | 193.0 |
| RTX PRO 6000 | rk4v4 |
MTP 3 | 13.3 GiB | 330.4 | 266.0 | 306.9 | 229.8 | 226.2 | 208.6 | 198.3 | 217.9 |
| RTX PRO 6000 | rk4v4-e8 |
none | 12.6 GiB | 167.3 | 166.9 | 161.8 | 155.2 | 146.6 | 131.3 | 119.7 | 110.0 |
| RTX PRO 6000 | rk4v4-e8 |
DFlash2 5 | 14.0 GiB | 367.4 | 285.1 | 307.0 | 319.9 | 222.8 | 203.7 | 180.8 | 189.7 |
| RTX PRO 6000 | rk8v4 |
none | 14.6 GiB | 167.5 | 166.8 | 162.2 | 151.5 | 139.8 | 121.2 | 107.3 | 96.4 |
| RTX PRO 6000 | rk8v4 |
DFlash2 5 | 16.0 GiB | 361.7 | 304.6 | 318.1 | 309.6 | 250.7 | 204.6 | 233.5 | 200.9 |
| RTX PRO 6000 | rk8v4 |
MTP 3 | 15.4 GiB | 314.7 | 313.0 | 293.3 | 258.1 | 229.7 | 191.4 | 192.0 | 210.5 |
| RTX 5090 | rk4v4 |
none | 12.4 GiB | 171.4 | 170.8 | 165.9 | 159.0 | 150.2 | 134.6 | 122.3 | 112.4 |
| RTX 5090 | rk4v4 |
DFlash2 5 | 13.8 GiB | 366.2 | 408.8 | 292.7 | 325.6 | 259.2 | 203.3 | 179.4 | 168.4 |
| RTX 5090 | rk4v4 |
MTP 3 | 13.1 GiB | 321.1 | 268.3 | 279.3 | 291.5 | 228.9 | 217.2 | 203.0 | 217.6 |
| RTX 5090 | rk4v4-e8 |
none | 12.4 GiB | 170.4 | 169.9 | 166.4 | 158.2 | 149.4 | 134.1 | 122.1 | 112.1 |
| RTX 5090 | rk4v4-e8 |
DFlash2 5 | 13.8 GiB | 387.9 | 315.1 | 332.1 | 301.1 | 241.6 | 219.2 | 219.9 | 197.8 |
| RTX 5090 | rk8v4 |
none | 14.4 GiB | 171.5 | 171.0 | 165.8 | 155.4 | 143.8 | 124.7 | 110.7 | 99.4 |
| RTX 5090 | rk8v4 |
DFlash2 5 | 15.8 GiB | 368.2 | 336.1 | 305.9 | 343.2 | 248.9 | 215.2 | 238.9 | 189.4 |
| RTX 5090 | rk8v4 |
MTP 3 | 15.2 GiB | 329.0 | 336.5 | 299.9 | 306.0 | 244.5 | 207.1 | 198.7 | 207.4 |
| RTX 4090 | rk4v4 |
none | 12.3 GiB | 107.9 | 107.6 | 105.1 | 99.3 | 93.3 | 83.0 | 75.1 | 63.8 |
| RTX 4090 | rk4v4 |
DFlash2 5 | 13.8 GiB | 242.8 | 179.5 | 181.8 | 236.3 | 156.9 | 134.9 | 140.4 | 115.3 |
| RTX 4090 | rk4v4 |
MTP 3 | 13.0 GiB | 206.9 | 158.6 | 179.9 | 180.7 | 142.6 | 134.7 | 131.6 | 116.3 |
| RTX 4090 | rk4v4-e8 |
none | 12.3 GiB | 107.9 | 107.6 | 105.3 | 99.3 | 93.3 | 83.0 | 75.1 | 63.8 |
| RTX 4090 | rk4v4-e8 |
DFlash2 5 | 13.8 GiB | 251.5 | 198.5 | 212.9 | 197.2 | 146.2 | 129.0 | 155.6 | 116.4 |
| RTX 4090 | rk8v4 |
none | 14.3 GiB | 108.4 | 107.8 | 105.2 | 97.8 | 89.9 | 77.3 | 67.9 | 56.4 |
| RTX 4090 | rk8v4 |
DFlash2 5 | 15.8 GiB | 244.8 | 243.6 | 206.7 | 180.0 | 160.9 | 125.8 | 118.7 | 122.9 |
| RTX 4090 | rk8v4 |
MTP 3 | 15.1 GiB | 203.4 | 191.4 | 184.0 | 164.8 | 153.7 | 127.7 | 121.8 | 111.0 |
| RTX 3090 | rk4v4 |
none | 12.2 GiB | 93.8 | 93.2 | 90.3 | 83.7 | 76.1 | 64.4 | 55.5 | 49.2 |
| RTX 3090 | rk4v4 |
DFlash2 5 | 13.7 GiB | 200.8 | 172.3 | 180.3 | 174.7 | 116.5 | 97.5 | 73.5 | 78.6 |
| RTX 3090 | rk4v4 |
MTP 3 | 12.9 GiB | 173.4 | 145.1 | 138.3 | 149.7 | 116.9 | 96.5 | 89.4 | 83.7 |
| RTX 3090 | rk4v4-e8 |
none | 12.2 GiB | 93.6 | 93.2 | 90.4 | 84.0 | 76.5 | 64.9 | 56.0 | 49.8 |
| RTX 3090 | rk4v4-e8 |
DFlash2 5 | 13.7 GiB | 202.8 | 157.2 | 173.3 | 140.0 | 119.4 | 109.2 | 113.9 | 76.3 |
| RTX 3090 | rk8v4 |
none | 14.2 GiB | 94.1 | 93.5 | 90.8 | 84.3 | 76.8 | 65.3 | 56.3 | 50.0 |
| RTX 3090 | rk8v4 |
DFlash2 5 | 15.7 GiB | 201.4 | 198.4 | 161.1 | 135.4 | 124.9 | 92.6 | 85.3 | 89.7 |
| RTX 3090 | rk8v4 |
MTP 3 | 15.0 GiB | 172.2 | 143.6 | 184.8 | 150.4 | 109.4 | 93.7 | 94.7 | 89.3 |
| Tesla V100 | rk4v4 |
none | 11.8 GiB | 73.2 | 73.0 | 71.8 | 67.2 | — | 54.6 | — | — |
| Tesla V100 | rk4v4 |
DFlash2 5 | 13.5 GiB | 116.1 | 100.9 | 88.0 | 91.1 | — | 45.0 | — | — |
| Tesla V100 | rk4v4 |
MTP 3 | 12.7 GiB | 123.1 | 100.1 | 118.7 | 87.4 | — | 60.0 | — | — |
Server, the same runs; seconds to the first token after a cold document of that many tokens:
| Card | KV | Drafter | 1,024 | 8,192 | 32,768 | 65,536 | 131,072 | 196,608 | 261,120 |
|---|---|---|---|---|---|---|---|---|---|
| RTX PRO 6000 | rk4v4 |
none | 0.16 | 1.11 | 4.9 | 11.4 | 28.9 | 52.7 | 82.0 |
| RTX PRO 6000 | rk4v4 |
DFlash2 5 | 0.17 | 1.12 | 4.9 | 11.5 | 29.2 | 53.1 | 82.5 |
| RTX PRO 6000 | rk4v4 |
MTP 3 | 0.17 | 1.11 | 4.9 | 11.4 | 29.0 | 52.9 | 82.1 |
| RTX PRO 6000 | rk4v4-e8 |
none | 0.16 | 1.10 | 4.9 | 11.3 | 28.7 | 52.1 | 81.1 |
| RTX PRO 6000 | rk4v4-e8 |
DFlash2 5 | 0.17 | 1.12 | 4.9 | 11.4 | 28.9 | 52.5 | 81.6 |
| RTX PRO 6000 | rk8v4 |
none | 0.16 | 1.07 | 4.7 | 10.8 | 27.4 | 50.1 | 78.3 |
| RTX PRO 6000 | rk8v4 |
DFlash2 5 | 0.17 | 1.12 | 4.9 | 11.2 | 28.3 | 51.2 | 79.0 |
| RTX PRO 6000 | rk8v4 |
MTP 3 | 0.16 | 1.11 | 4.8 | 11.1 | 28.0 | 50.8 | 78.5 |
| RTX 5090 | rk4v4 |
none | 0.17 | 1.17 | 5.2 | 12.0 | 30.2 | 54.9 | 85.2 |
| RTX 5090 | rk4v4 |
DFlash2 5 | 0.18 | 1.20 | 5.3 | 12.1 | 30.6 | 55.4 | 85.9 |
| RTX 5090 | rk4v4 |
MTP 3 | 0.18 | 1.18 | 5.2 | 12.0 | 30.4 | 55.0 | 85.5 |
| RTX 5090 | rk4v4-e8 |
none | 0.17 | 1.17 | 5.1 | 11.9 | 30.1 | 54.3 | 84.2 |
| RTX 5090 | rk4v4-e8 |
DFlash2 5 | 0.18 | 1.19 | 5.2 | 12.1 | 30.4 | 54.9 | 85.0 |
| RTX 5090 | rk8v4 |
none | 0.17 | 1.14 | 5.0 | 11.5 | 29.0 | 52.7 | 81.9 |
| RTX 5090 | rk8v4 |
DFlash2 5 | 0.18 | 1.19 | 5.2 | 11.9 | 29.8 | 53.5 | 82.7 |
| RTX 5090 | rk8v4 |
MTP 3 | 0.18 | 1.18 | 5.1 | 11.8 | 29.6 | 53.2 | 82.2 |
| RTX 4090 | rk4v4 |
none | 0.21 | 1.44 | 6.4 | 14.7 | 37.2 | 67.6 | 105.2 |
| RTX 4090 | rk4v4 |
DFlash2 5 | 0.21 | 1.47 | 6.5 | 15.0 | 37.7 | 68.4 | 106.2 |
| RTX 4090 | rk4v4 |
MTP 3 | 0.21 | 1.45 | 6.4 | 14.8 | 37.4 | 67.9 | 105.5 |
| RTX 4090 | rk4v4-e8 |
none | 0.21 | 1.44 | 6.3 | 14.6 | 36.8 | 66.7 | 103.5 |
| RTX 4090 | rk4v4-e8 |
DFlash2 5 | 0.22 | 1.47 | 6.5 | 14.8 | 37.3 | 67.6 | 104.6 |
| RTX 4090 | rk8v4 |
none | 0.20 | 1.42 | 6.3 | 14.4 | 36.2 | 65.8 | 102.1 |
| RTX 4090 | rk8v4 |
DFlash2 5 | 0.22 | 1.47 | 6.4 | 14.7 | 36.9 | 66.8 | 103.3 |
| RTX 4090 | rk8v4 |
MTP 3 | 0.21 | 1.44 | 6.3 | 14.5 | 36.6 | 66.3 | 102.6 |
| RTX 3090 | rk4v4 |
none | 0.42 | 2.99 | 13.3 | 30.7 | 77.9 | 142.0 | 221.1 |
| RTX 3090 | rk4v4 |
DFlash2 5 | 0.43 | 3.06 | 13.5 | 31.2 | 79.2 | 143.8 | 223.7 |
| RTX 3090 | rk4v4 |
MTP 3 | 0.42 | 3.00 | 13.3 | 30.8 | 78.3 | 142.7 | 222.0 |
| RTX 3090 | rk4v4-e8 |
none | 0.42 | 2.98 | 13.2 | 30.4 | 77.1 | 140.2 | 218.2 |
| RTX 3090 | rk4v4-e8 |
DFlash2 5 | 0.43 | 3.06 | 13.5 | 31.0 | 78.3 | 141.8 | 220.5 |
| RTX 3090 | rk8v4 |
none | 0.42 | 2.97 | 13.1 | 30.2 | 76.2 | 138.3 | 214.5 |
| RTX 3090 | rk8v4 |
DFlash2 5 | 0.43 | 3.05 | 13.4 | 30.8 | 77.4 | 139.8 | 216.9 |
| RTX 3090 | rk8v4 |
MTP 3 | 0.42 | 2.99 | 13.2 | 30.3 | 76.5 | 138.8 | 215.4 |
| Tesla V100 | rk4v4 |
none | 1.09 | 8.2 | 38.6 | — | 261.2 | — | — |
| Tesla V100 | rk4v4 |
DFlash2 5 | 1.13 | 8.4 | 40.2 | — | 265.9 | — | — |
| Tesla V100 | rk4v4 |
MTP 3 | 1.10 | 8.3 | 39.3 | — | 262.8 | — | — |
| Card | KV | Drafter | short chat | 1,024 | 8,192 | 32,768 | 65,536 | 131,072 | 196,608 | 261,120 |
|---|---|---|---|---|---|---|---|---|---|---|
| RTX PRO 6000 | rk4v4 |
DFlash2 5 | 0.39 (2.91) | 0.46 (3.26) | 0.33 (2.62) | 0.31 (2.54) | 0.26 (2.31) | 0.23 (2.14) | 0.24 (2.17) | 0.32 (2.57) |
| RTX PRO 6000 | rk4v4 |
MTP 3 | 0.54 (2.61) | 0.38 (2.13) | 0.52 (2.60) | 0.33 (1.99) | 0.36 (2.06) | 0.38 (2.14) | 0.41 (2.25) | 0.56 (2.67) |
| RTX PRO 6000 | rk4v4-e8 |
DFlash2 5 | 0.40 (2.96) | 0.26 (2.31) | 0.31 (2.53) | 0.37 (2.84) | 0.23 (2.12) | 0.24 (2.19) | 0.24 (2.18) | 0.30 (2.51) |
| RTX PRO 6000 | rk8v4 |
DFlash2 5 | 0.39 (2.91) | 0.30 (2.47) | 0.33 (2.65) | 0.35 (2.75) | 0.28 (2.38) | 0.24 (2.19) | 0.36 (2.81) | 0.33 (2.63) |
| RTX PRO 6000 | rk8v4 |
MTP 3 | 0.50 (2.48) | 0.50 (2.48) | 0.48 (2.46) | 0.42 (2.24) | 0.39 (2.15) | 0.35 (2.05) | 0.44 (2.30) | 0.60 (2.78) |
| RTX 5090 | rk4v4 |
DFlash2 5 | 0.39 (2.92) | 0.46 (3.28) | 0.28 (2.40) | 0.38 (2.89) | 0.29 (2.46) | 0.24 (2.20) | 0.24 (2.19) | 0.26 (2.28) |
| RTX 5090 | rk4v4 |
MTP 3 | 0.50 (2.49) | 0.37 (2.12) | 0.43 (2.29) | 0.50 (2.48) | 0.36 (2.06) | 0.40 (2.19) | 0.43 (2.27) | 0.56 (2.67) |
| RTX 5090 | rk4v4-e8 |
DFlash2 5 | 0.43 (3.10) | 0.31 (2.53) | 0.35 (2.73) | 0.34 (2.67) | 0.26 (2.29) | 0.28 (2.38) | 0.34 (2.67) | 0.34 (2.67) |
| RTX 5090 | rk8v4 |
DFlash2 5 | 0.39 (2.93) | 0.34 (2.69) | 0.31 (2.54) | 0.41 (3.02) | 0.27 (2.35) | 0.26 (2.27) | 0.36 (2.81) | 0.29 (2.46) |
| RTX 5090 | rk8v4 |
MTP 3 | 0.52 (2.55) | 0.55 (2.63) | 0.47 (2.40) | 0.55 (2.65) | 0.43 (2.29) | 0.40 (2.21) | 0.45 (2.36) | 0.57 (2.71) |
| RTX 4090 | rk4v4 |
DFlash2 5 | 0.39 (2.91) | 0.24 (2.17) | 0.25 (2.26) | 0.43 (3.11) | 0.25 (2.23) | 0.25 (2.22) | 0.32 (2.60) | 0.30 (2.51) |
| RTX 4090 | rk4v4 |
MTP 3 | 0.53 (2.57) | 0.34 (2.01) | 0.44 (2.31) | 0.49 (2.49) | 0.36 (2.09) | 0.41 (2.21) | 0.47 (2.40) | 0.53 (2.59) |
| RTX 4090 | rk4v4-e8 |
DFlash2 5 | 0.41 (3.01) | 0.28 (2.40) | 0.33 (2.63) | 0.32 (2.58) | 0.21 (2.07) | 0.23 (2.12) | 0.37 (2.85) | 0.30 (2.51) |
| RTX 4090 | rk8v4 |
DFlash2 5 | 0.39 (2.93) | 0.39 (2.94) | 0.31 (2.56) | 0.27 (2.36) | 0.26 (2.27) | 0.21 (2.06) | 0.24 (2.19) | 0.33 (2.63) |
| RTX 4090 | rk8v4 |
MTP 3 | 0.51 (2.51) | 0.46 (2.38) | 0.45 (2.34) | 0.42 (2.24) | 0.43 (2.28) | 0.39 (2.18) | 0.44 (2.32) | 0.55 (2.64) |
| RTX 3090 | rk4v4 |
DFlash2 5 | 0.39 (2.91) | 0.31 (2.52) | 0.36 (2.78) | 0.40 (3.03) | 0.25 (2.26) | 0.27 (2.34) | 0.23 (2.13) | 0.33 (2.63) |
| RTX 3090 | rk4v4 |
MTP 3 | 0.52 (2.54) | 0.39 (2.17) | 0.38 (2.15) | 0.51 (2.53) | 0.41 (2.22) | 0.41 (2.23) | 0.50 (2.47) | 0.56 (2.65) |
| RTX 3090 | rk4v4-e8 |
DFlash2 5 | 0.39 (2.94) | 0.26 (2.30) | 0.34 (2.67) | 0.27 (2.34) | 0.25 (2.22) | 0.29 (2.44) | 0.41 (3.07) | 0.27 (2.33) |
| RTX 3090 | rk8v4 |
DFlash2 5 | 0.39 (2.92) | 0.39 (2.91) | 0.30 (2.46) | 0.26 (2.27) | 0.27 (2.35) | 0.22 (2.12) | 0.27 (2.33) | 0.36 (2.80) |
| RTX 3090 | rk8v4 |
MTP 3 | 0.51 (2.51) | 0.37 (2.12) | 0.62 (2.90) | 0.50 (2.49) | 0.34 (2.04) | 0.37 (2.10) | 0.50 (2.51) | 0.55 (2.65) |
| Tesla V100 | rk4v4 |
DFlash2 5 | 0.39 (2.91) | — | 0.28 (2.36) | — | — | 0.24 (2.17) | — | — |
| Tesla V100 | rk4v4 |
MTP 3 | 0.49 (2.45) | — | 0.52 (2.53) | — | — | 0.39 (2.17) | — | — |
Server, rk8v4, one request; --draft-tokens from 1 to 15 at short chat and after 32,768 and
131,072 tokens. The best count with its decode tok/s and acceptance, one run each (acceptance
moves with the answer, so neighbouring counts within a few percent are ties;
full sweeps):
| Card | No drafter: short chat / 32,768 / 131,072 | Drafter | Short chat | 32,768 | 131,072 |
|---|---|---|---|---|---|
| RTX 5090 | 171.6 / 155.2 / 124.5 | MTP | 5: 321.5 (0.38) | 3: 295.6 (0.52) | 3: 207.3 (0.40) |
| RTX 5090 | 171.6 / 155.2 / 124.5 | DFlash2 | 7: 396.7 (0.33) | 4: 338.9 (0.48) | 6: 216.8 (0.23) |
| RTX 4090 | 108.3 / 97.9 / 77.3 | MTP | 3: 201.2 (0.50) | 3: 175.2 (0.47) | 3: 130.9 (0.41) |
| RTX 4090 | 108.3 / 97.9 / 77.3 | DFlash2 | 7: 256.4 (0.31) | 4: 220.4 (0.47) | 6: 144.9 (0.24) |
| RTX 3090 | 92.5 / 82.5 / 63.4 | MTP | 3: 171.4 (0.52) | 3: 128.6 (0.40) | 1: 96.9 (0.73) |
| RTX 3090 | 92.5 / 82.5 / 63.4 | DFlash2 | 7: 202.0 (0.31) | 5: 176.2 (0.41) | 3: 97.2 (0.36) |
Prompt and decode in tok/s:
| Card | Method, KV | Prompt 512 | Prompt 2,048 | Long prompt | Decode | Decode after the long prompt |
|---|---|---|---|---|---|---|
| RTX 3090 | engine, rk8v4 |
3,026 | 3,108 | 2,292 (65,536) | 93.9 | 93.7 |
| TITAN RTX | engine, rk8v4 |
1,304 | 1,375 | 951 (65,536) | 63.4 | 61.8 |
| Tesla V100 | engine, bf16 |
984 | 1,072 | 929 (16,384) | 73.6 | 66.7 |
| RTX 3060 Ti | CLI, int8 |
1,160 (2,273) | 50.1 | |||
| RTX 2080 Ti | CLI, int8 |
1,080 (2,273) | 58.5 | |||
| RTX 3060 | CLI, int8 |
937 (2,273) | 40.5 |
Engine rows decode 128 tokens from the start, CLI rows 256. With a drafter, decode tok/s (acceptance):
| Card | Method | MTP 3 | DFlash2 5 |
|---|---|---|---|
| RTX 3090 | engine, 512-token prompt, 128 tokens | 174.1 (0.49, 2.46) | 149.1 (0.23, 2.15) |
| TITAN RTX | engine, 512-token prompt, 128 tokens | 106.8 (0.47, 2.40) | 92.1 (0.24, 2.19) |
| RTX 2080 Ti | CLI, 2,273-token prompt, 256 tokens | 95.9 (2.33) | |
| RTX 3060 | CLI, 2,273-token prompt, 256 tokens | 69.2 (2.31) |
Engine, a 16,384-token prompt, then 64 decoded tokens, one run each; prompt / decode tok/s:
| KV | Bytes per token | Tesla V100 | TITAN RTX | RTX 3090 |
|---|---|---|---|---|
bf16 |
65,536 | 920 / 66.8 | 1,065 / 62.8 | 2,687 / 92.0 |
int8 |
33,792 | 947 / 69.3 | 1,199 / 62.6 | |
fp8 |
33,024 | 914 / 67.8 | 601 / 59.7 | |
rk8v4 |
26,112 | 934 / 69.0 | 1,251 / 62.1 | 2,875 / 93.9 |
k8v4 |
25,728 | 907 / 66.6 | 634 / 59.6 | |
nvfp4 |
18,432 | 903 / 66.1 | 628 / 62.0 | |
rk4v4 |
17,920 | 937 / 68.5 | 1,234 / 62.0 | |
rk4v4-e8 |
17,920 | 935 / 68.7 | 1,231 / 61.6 | |
rk2v4-e8 |
13,824 | 926 / 67.1 | 1,217 / 61.6 |
After a 65,536-token prompt the TITAN RTX prompts at 951 (rk8v4), 826 (int8) and 607 (bf16)
tok/s and decodes at 61.8, 62.8 and 62.4. On Turing the FP8, NVFP4 and K8V4 prompt kernels run at
about half the rate of the INT8 family (TITAN RTX).
On the V100 --prefill-chunk 4096 raises rk4v4 prompts from 965 to 1,033 tok/s at 4,096 tokens
and from 860 to 914 at 16,384, for 628 MiB of workspace instead of 229
(prompt chunks).
Server, total generated tok/s when N requests arrive together: the short-chat prompts in turn, 512
tokens each, rk8v4, --max-concurrency 8 --max-context 16384 --kv-capacity 131072. An empty
cell at 8: eight lanes of 16,384 tokens do not fit beside that drafter, and the row ran with four.
| Card | Drafter | 1 | 2 | 4 | 8 |
|---|---|---|---|---|---|
| RTX PRO 6000 | none | 165.5 | 321.4 | 599.1 | 1,043.5 |
| RTX PRO 6000 | MTP 3 | 274.4 | 516.0 | 805.0 | 1,155.3 |
| RTX PRO 6000 | DFlash2 5 | 270.6 | 523.9 | 735.5 | 890.4 |
| RTX 5090 | none | 169.8 | 327.4 | 608.6 | 1,053.3 |
| RTX 5090 | MTP 3 | 263.3 | 511.3 | 771.1 | 1,063.0 |
| RTX 5090 | DFlash2 5 | 278.1 | 511.7 | 631.9 | 799.1 |
| RTX 4090 | none | 107.4 | 206.9 | 383.5 | 670.6 |
| RTX 4090 | MTP 3 | 182.1 | 318.3 | 533.8 | 824.1 |
| RTX 4090 | DFlash2 5 | 197.1 | 354.2 | 504.9 | 673.5 |
| RTX 3090 | none | 93.1 | 176.9 | 324.0 | 546.4 |
| RTX 3090 | MTP 3 | 141.7 | 267.3 | 413.7 | 550.8 |
| RTX 3090 | DFlash2 5 | 154.7 | 256.0 | 334.1 | 386.2 |
| Tesla V100 | none | 71.6 | 129.1 | 214.4 | 283.5 |
| Tesla V100 | MTP 3 | 101.5 | 157.2 | 182.6 | 204.9 |
| Tesla V100 | DFlash2 5 | 89.4 | 104.7 | 116.4 |
The same with 256-token answers, --max-context 8192 --kv-capacity 65536, one run each:
| Card | Drafter | 1 | 2 | 4 | 8 |
|---|---|---|---|---|---|
| TITAN RTX | none | 54.8 | 119.3 | 211.9 | 327.1 |
| TITAN RTX | MTP 3 | 94.9 | 161.1 | 247.5 | 308.0 |
| RTX 3090 | none | 73.2 | 172.2 | 308.2 | 498.0 |
| RTX 3090 | MTP 3 | 133.3 | 255.6 | 404.6 | 521.3 |
ninfer-perplexity --quick on ninfer-ppl-1m-v1:
| Card | rk8v4 |
bf16 |
rk2v4-e8 |
|---|---|---|---|
| RTX 3090 | 5.631 | ||
| Tesla V100 | 5.6305 | ||
| TITAN RTX | 5.6314 | 5.6272 | 5.8189 |
Against rk8v4's 5.631 the reference measurement gives 5.650 for rk4v4-e8 and 5.820 for
rk2v4-e8.
The official groupwise-int artifact.
Server, one request. On the 24 GB cards each KV format runs at the largest window DFlash2 fits
beside it, for every drafter; rk4v4-e8 without a drafter runs the full window. A dash: past the
window.
| Card | KV | Drafter | Window | VRAM | short chat | 1,024 | 8,192 | 32,768 | 65,536 | 131,072 | 196,608 | 261,120 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RTX PRO 6000 | rk4v4 |
none | 262,144 | 21.8 GiB | 89.6 | 89.5 | 88.0 | 85.9 | 83.2 | 78.0 | 73.7 | 69.9 |
| RTX PRO 6000 | rk4v4 |
DFlash2 5 | 262,144 | 24.0 GiB | 219.9 | 189.4 | 179.6 | 183.7 | 154.0 | 142.4 | 166.4 | 116.1 |
| RTX PRO 6000 | rk4v4 |
MTP 3 | 262,144 | 22.5 GiB | 186.4 | 164.5 | 169.6 | 149.0 | 161.0 | 143.4 | 142.9 | 128.7 |
| RTX PRO 6000 | rk4v4-e8 |
none | 262,144 | 21.8 GiB | 89.7 | 89.5 | 88.0 | 85.9 | 83.2 | 78.1 | 73.8 | 70.0 |
| RTX PRO 6000 | rk4v4-e8 |
DFlash2 5 | 262,144 | 24.0 GiB | 222.7 | 184.6 | 171.7 | 214.9 | 148.5 | 142.2 | 150.3 | 121.6 |
| RTX PRO 6000 | rk8v4 |
none | 262,144 | 23.8 GiB | 89.6 | 89.4 | 88.0 | 84.9 | 81.1 | 74.5 | 69.1 | 64.4 |
| RTX PRO 6000 | rk8v4 |
DFlash2 5 | 262,144 | 26.0 GiB | 219.1 | 195.9 | 186.0 | 217.2 | 156.9 | 160.2 | 164.5 | 120.9 |
| RTX PRO 6000 | rk8v4 |
MTP 3 | 262,144 | 24.6 GiB | 187.5 | 154.3 | 172.4 | 176.4 | 164.2 | 135.8 | 129.6 | 120.4 |
| RTX 5090 | rk4v4 |
none | 262,144 | 21.6 GiB | 91.9 | 91.7 | 90.2 | 88.1 | 85.3 | 80.0 | 75.4 | 71.6 |
| RTX 5090 | rk4v4 |
DFlash2 5 | 262,144 | 23.8 GiB | 214.9 | 193.9 | 197.2 | 204.7 | 151.8 | 129.7 | 136.0 | 116.1 |
| RTX 5090 | rk4v4 |
MTP 3 | 262,144 | 22.3 GiB | 182.7 | 153.4 | 158.9 | 171.8 | 165.7 | 140.8 | 132.6 | 129.0 |
| RTX 5090 | rk4v4-e8 |
none | 262,144 | 21.6 GiB | 91.5 | 91.3 | 90.2 | 87.8 | 84.9 | 79.7 | 75.2 | 71.3 |
| RTX 5090 | rk4v4-e8 |
DFlash2 5 | 262,144 | 23.8 GiB | 220.3 | 165.0 | 176.0 | 202.2 | 147.0 | 147.9 | 128.7 | 128.8 |
| RTX 5090 | rk8v4 |
none | 262,144 | 23.6 GiB | 92.0 | 91.7 | 90.2 | 87.1 | 83.3 | 76.5 | 71.0 | 66.2 |
| RTX 5090 | rk8v4 |
DFlash2 5 | 262,144 | 25.8 GiB | 221.0 | 186.7 | 204.6 | 205.9 | 157.8 | 152.7 | 134.0 | 129.8 |
| RTX 5090 | rk8v4 |
MTP 3 | 262,144 | 24.4 GiB | 184.7 | 153.7 | 169.8 | 180.1 | 140.5 | 130.3 | 130.5 | 114.0 |
| RTX 4090 | rk4v4 |
none | 245,760 | 21.3 GiB | 54.7 | 54.6 | 53.9 | 52.4 | 50.7 | 47.5 | 44.8 | — |
| RTX 4090 | rk4v4 |
DFlash2 5 | 245,760 | 23.5 GiB | 137.8 | 108.4 | 115.3 | 142.7 | 93.8 | 86.4 | 80.4 | — |
| RTX 4090 | rk4v4 |
MTP 3 | 245,760 | 21.9 GiB | 108.9 | 93.5 | 102.0 | 105.3 | 92.8 | 85.0 | 83.3 | — |
| RTX 4090 | rk4v4-e8 |
none | 262,144 | 21.5 GiB | 54.7 | 54.6 | 54.0 | 52.4 | 50.7 | 47.5 | 44.8 | 40.6 |
| RTX 4090 | rk8v4 |
none | 167,936 | 21.2 GiB | 54.8 | 54.7 | 54.0 | 52.0 | 49.7 | 45.6 | — | — |
| RTX 4090 | rk8v4 |
DFlash2 5 | 167,936 | 23.5 GiB | 138.1 | 127.1 | 129.8 | 140.3 | 102.2 | 90.9 | — | — |
| RTX 4090 | rk8v4 |
MTP 3 | 167,936 | 21.9 GiB | 109.0 | 102.6 | 101.7 | 108.5 | 94.9 | 77.3 | — | — |
| RTX 3090 | rk4v4 |
none | 258,048 | 21.3 GiB | 48.0 | 47.9 | 47.1 | 45.0 | 42.3 | 38.0 | 34.4 | — |
| RTX 3090 | rk4v4 |
DFlash2 5 | 258,048 | 23.6 GiB | 115.9 | 88.5 | 86.1 | 93.2 | 70.6 | 60.5 | 54.1 | — |
| RTX 3090 | rk4v4 |
MTP 3 | 258,048 | 22.0 GiB | 95.9 | 79.0 | 88.1 | 89.4 | 77.5 | 66.3 | 61.5 | — |
| RTX 3090 | rk4v4-e8 |
none | 262,144 | 21.4 GiB | 48.0 | 47.9 | 47.1 | 45.2 | 42.5 | 38.3 | 34.7 | 32.0 |
| RTX 3090 | rk8v4 |
none | 176,128 | 21.3 GiB | 48.2 | 48.0 | 47.2 | 45.1 | 42.6 | 38.4 | — | — |
| RTX 3090 | rk8v4 |
DFlash2 5 | 176,128 | 23.5 GiB | 117.1 | 101.4 | 101.3 | 110.8 | 78.7 | 72.6 | — | — |
| RTX 3090 | rk8v4 |
MTP 3 | 176,128 | 22.0 GiB | 97.2 | 90.6 | 90.5 | 83.6 | 83.9 | 60.9 | — | — |
| Card | KV | Drafter | 1,024 | 8,192 | 32,768 | 65,536 | 131,072 | 196,608 | 261,120 |
|---|---|---|---|---|---|---|---|---|---|
| RTX PRO 6000 | rk4v4 |
none | 0.30 | 1.87 | 7.9 | 17.2 | 40.5 | 70.0 | 104.9 |
| RTX PRO 6000 | rk4v4 |
DFlash2 5 | 0.31 | 1.88 | 7.9 | 17.3 | 40.9 | 70.5 | 105.6 |
| RTX PRO 6000 | rk4v4 |
MTP 3 | 0.31 | 1.87 | 7.8 | 17.2 | 40.6 | 70.1 | 105.0 |
| RTX PRO 6000 | rk4v4-e8 |
none | 0.30 | 1.87 | 7.8 | 17.1 | 40.3 | 69.4 | 104.0 |
| RTX PRO 6000 | rk4v4-e8 |
DFlash2 5 | 0.31 | 1.88 | 7.9 | 17.2 | 40.6 | 69.9 | 104.5 |
| RTX PRO 6000 | rk8v4 |
none | 0.30 | 1.86 | 7.7 | 16.9 | 39.4 | 67.7 | 100.8 |
| RTX PRO 6000 | rk8v4 |
DFlash2 5 | 0.31 | 1.87 | 7.8 | 17.0 | 39.7 | 68.3 | 101.7 |
| RTX PRO 6000 | rk8v4 |
MTP 3 | 0.30 | 1.86 | 7.8 | 16.9 | 39.6 | 68.1 | 101.5 |
| RTX 5090 | rk4v4 |
none | 0.34 | 2.04 | 8.5 | 18.4 | 43.0 | 73.8 | 110.4 |
| RTX 5090 | rk4v4 |
DFlash2 5 | 0.34 | 2.06 | 8.6 | 18.6 | 43.4 | 74.4 | 111.6 |
| RTX 5090 | rk4v4 |
MTP 3 | 0.34 | 2.07 | 8.6 | 18.7 | 43.6 | 74.8 | 111.7 |
| RTX 5090 | rk4v4-e8 |
none | 0.34 | 2.05 | 8.5 | 18.5 | 43.0 | 73.7 | 109.8 |
| RTX 5090 | rk4v4-e8 |
DFlash2 5 | 0.34 | 2.07 | 8.6 | 18.7 | 43.4 | 74.1 | 110.4 |
| RTX 5090 | rk8v4 |
none | 0.33 | 2.03 | 8.4 | 18.2 | 42.1 | 71.9 | 107.0 |
| RTX 5090 | rk8v4 |
DFlash2 5 | 0.34 | 2.05 | 8.5 | 18.3 | 42.4 | 72.4 | 107.7 |
| RTX 5090 | rk8v4 |
MTP 3 | 0.33 | 2.03 | 8.4 | 18.2 | 42.2 | 72.0 | 107.1 |
| RTX 4090 | rk4v4 |
none | 0.56 | 3.24 | 13.1 | 27.8 | 63.0 | 106.0 | — |
| RTX 4090 | rk4v4 |
DFlash2 5 | 0.57 | 3.27 | 13.2 | 28.1 | 63.5 | 106.7 | — |
| RTX 4090 | rk4v4 |
MTP 3 | 0.57 | 3.25 | 13.1 | 27.9 | 63.2 | 106.2 | — |
| RTX 4090 | rk4v4-e8 |
none | 0.56 | 3.23 | 13.1 | 27.7 | 62.6 | 105.0 | 154.1 |
| RTX 4090 | rk8v4 |
none | 0.56 | 3.23 | 13.0 | 27.6 | 62.2 | — | — |
| RTX 4090 | rk8v4 |
DFlash2 5 | 0.57 | 3.26 | 13.2 | 27.8 | 62.7 | — | — |
| RTX 4090 | rk8v4 |
MTP 3 | 0.57 | 3.24 | 13.1 | 27.6 | 62.3 | — | — |
| RTX 3090 | rk4v4 |
none | 1.15 | 5.63 | 23.2 | 50.2 | 118.3 | 203.4 | — |
| RTX 3090 | rk4v4 |
DFlash2 5 | 1.17 | 5.73 | 23.6 | 51.0 | 119.4 | 205.2 | — |
| RTX 3090 | rk4v4 |
MTP 3 | 1.17 | 5.68 | 23.3 | 50.3 | 118.6 | 203.9 | — |
| RTX 3090 | rk4v4-e8 |
none | 1.15 | 5.62 | 23.1 | 50.0 | 117.3 | 201.4 | 300.9 |
| RTX 3090 | rk8v4 |
none | 1.14 | 5.61 | 23.1 | 49.9 | 116.4 | — | — |
| RTX 3090 | rk8v4 |
DFlash2 5 | 1.17 | 5.73 | 23.4 | 50.6 | 117.7 | — | — |
| RTX 3090 | rk8v4 |
MTP 3 | 1.16 | 5.65 | 23.1 | 49.9 | 117.0 | — | — |
| Card | KV | Drafter | short chat | 1,024 | 8,192 | 32,768 | 65,536 | 131,072 | 196,608 | 261,120 |
|---|---|---|---|---|---|---|---|---|---|---|
| RTX PRO 6000 | rk4v4 |
DFlash2 5 | 0.44 (3.18) | 0.36 (2.75) | 0.33 (2.66) | 0.37 (2.85) | 0.30 (2.47) | 0.30 (2.48) | 0.42 (3.11) | 0.26 (2.31) |
| RTX PRO 6000 | rk4v4 |
MTP 3 | 0.60 (2.78) | 0.49 (2.46) | 0.54 (2.62) | 0.45 (2.34) | 0.54 (2.62) | 0.50 (2.49) | 0.54 (2.61) | 0.50 (2.48) |
| RTX PRO 6000 | rk4v4-e8 |
DFlash2 5 | 0.45 (3.21) | 0.34 (2.70) | 0.31 (2.54) | 0.47 (3.33) | 0.28 (2.38) | 0.29 (2.47) | 0.36 (2.78) | 0.28 (2.40) |
| RTX PRO 6000 | rk8v4 |
DFlash2 5 | 0.44 (3.16) | 0.37 (2.84) | 0.35 (2.77) | 0.47 (3.37) | 0.30 (2.51) | 0.35 (2.75) | 0.41 (3.04) | 0.28 (2.38) |
| RTX PRO 6000 | rk8v4 |
MTP 3 | 0.60 (2.80) | 0.44 (2.31) | 0.54 (2.62) | 0.60 (2.85) | 0.57 (2.74) | 0.48 (2.45) | 0.49 (2.46) | 0.48 (2.44) |
| RTX 5090 | rk4v4 |
DFlash2 5 | 0.42 (3.10) | 0.37 (2.81) | 0.38 (2.91) | 0.43 (3.17) | 0.29 (2.44) | 0.25 (2.26) | 0.31 (2.55) | 0.27 (2.34) |
| RTX 5090 | rk4v4 |
MTP 3 | 0.58 (2.71) | 0.44 (2.31) | 0.48 (2.43) | 0.57 (2.69) | 0.57 (2.68) | 0.48 (2.44) | 0.48 (2.44) | 0.51 (2.51) |
| RTX 5090 | rk4v4-e8 |
DFlash2 5 | 0.44 (3.19) | 0.28 (2.40) | 0.32 (2.61) | 0.43 (3.15) | 0.28 (2.37) | 0.32 (2.58) | 0.29 (2.42) | 0.32 (2.58) |
| RTX 5090 | rk8v4 |
DFlash2 5 | 0.44 (3.19) | 0.34 (2.71) | 0.41 (3.05) | 0.43 (3.15) | 0.31 (2.53) | 0.33 (2.63) | 0.30 (2.46) | 0.31 (2.56) |
| RTX 5090 | rk8v4 |
MTP 3 | 0.59 (2.75) | 0.44 (2.32) | 0.53 (2.57) | 0.61 (2.81) | 0.44 (2.30) | 0.44 (2.30) | 0.49 (2.46) | 0.44 (2.32) |
| RTX 4090 | rk4v4 |
DFlash2 5 | 0.44 (3.15) | 0.30 (2.51) | 0.34 (2.71) | 0.49 (3.47) | 0.27 (2.36) | 0.28 (2.37) | 0.28 (2.37) | — |
| RTX 4090 | rk4v4 |
MTP 3 | 0.57 (2.69) | 0.45 (2.36) | 0.53 (2.62) | 0.59 (2.79) | 0.50 (2.48) | 0.48 (2.45) | 0.52 (2.56) | — |
| RTX 4090 | rk8v4 |
DFlash2 5 | 0.44 (3.16) | 0.39 (2.95) | 0.41 (3.05) | 0.48 (3.40) | 0.32 (2.56) | 0.30 (2.48) | — | — |
| RTX 4090 | rk8v4 |
MTP 3 | 0.57 (2.68) | 0.52 (2.57) | 0.52 (2.55) | 0.61 (2.80) | 0.53 (2.56) | 0.42 (2.29) | — | — |
| RTX 3090 | rk4v4 |
DFlash2 5 | 0.45 (3.24) | 0.30 (2.51) | 0.30 (2.51) | 0.38 (2.86) | 0.27 (2.35) | 0.26 (2.31) | 0.27 (2.35) | — |
| RTX 3090 | rk4v4 |
MTP 3 | 0.58 (2.73) | 0.42 (2.26) | 0.53 (2.60) | 0.59 (2.75) | 0.53 (2.57) | 0.50 (2.50) | 0.54 (2.61) | — |
| RTX 3090 | rk8v4 |
DFlash2 5 | 0.46 (3.27) | 0.38 (2.86) | 0.39 (2.92) | 0.48 (3.39) | 0.32 (2.57) | 0.34 (2.68) | — | — |
| RTX 3090 | rk8v4 |
MTP 3 | 0.59 (2.76) | 0.53 (2.59) | 0.55 (2.65) | 0.52 (2.55) | 0.58 (2.74) | 0.42 (2.25) | — | — |
The same sweep as for Bonsai 2; 262,144-token window on the RTX 5090, 139,264 on the 24 GB cards:
| Card | No drafter: short chat / 32,768 / 131,072 | Drafter | Short chat | 32,768 | 131,072 |
|---|---|---|---|---|---|
| RTX 5090 | 91.6 / 86.7 / 76.3 | MTP | 3: 184.2 (0.59) | 5: 183.3 (0.50) | 4: 134.2 (0.40) |
| RTX 5090 | 91.6 / 86.7 / 76.3 | DFlash2 | 7: 236.2 (0.36) | 6: 226.0 (0.43) | 4: 164.0 (0.44) |
| RTX 4090 | 54.8 / 52.0 / 45.6 | MTP | 4: 113.5 (0.52) | 3: 114.7 (0.66) | 3: 80.3 (0.45) |
| RTX 4090 | 54.8 / 52.0 / 45.6 | DFlash2 | 7: 148.8 (0.35) | 7: 151.9 (0.39) | 7: 102.3 (0.27) |
| RTX 3090 | 47.9 / 44.8 / 38.1 | MTP | 3: 95.9 (0.58) | 3: 93.2 (0.63) | 3: 68.5 (0.51) |
| RTX 3090 | 47.9 / 44.8 / 38.1 | DFlash2 | 7: 117.5 (0.37) | 6: 109.3 (0.41) | 4: 79.0 (0.45) |
Engine, rk8v4, the mean of three runs after one warm-up; tok/s:
| Card | Prompt 512 | Prompt 2,048 | Decode 128 | MTP 3, 512-token prompt |
|---|---|---|---|---|
| RTX 3090 | 1,807 | 1,771 | 48.8 | 78.6 (0.32, 1.95) |
| TITAN RTX | 775 | 793 | 29.8 | 35.3 (0.34, 2.02) |
On the Tesla V100 the weights fit only with --embedding-q4 --lm-head-q4 (14.7 GiB) or
--lm-head-q6 (15.0 GiB); the CLI then decodes 30.4 tok/s.
One RTX 3090. Perplexity is ninfer-perplexity --quick on ninfer-ppl-1m-v1 (context 4,096, stride 2,048,
261,167 scored tokens). Decode is 128 steps after a prompt of that depth without a drafter, the
mean of two runs, on a card capped at 315 W of its 350 W default:
| KV format | Bytes per token | Perplexity | Change against bf16 |
Decode at 4,096 | at 16,384 | at 32,768 |
|---|---|---|---|---|---|---|
bf16 |
65,536 | 4.342517 | — | 36.58 | 34.34 | 31.93 |
int8 |
33,792 | 4.342425 | −0.002% | 35.31 | 34.34 | 33.63 |
fp8 |
33,024 | 4.344724 | +0.051% | 35.05 | 33.09 | 30.34 |
rk8v4 |
26,112 | 4.346413 | +0.090% | 35.65 | 34.73 | 33.17 |
k8v4 |
25,728 | 4.347258 | +0.109% | 34.22 | 31.83 | 28.90 |
nvfp4 |
18,432 | 4.352201 | +0.223% | 35.37 | 32.78 | 29.86 |
rk4v4 |
17,920 | +0.214% against int8 |
within 1% of rk8v4 |
The rk4v4 row was measured in a later session (int8 4.343155 there) and is stated against that
session's int8. A simulation of rk2v4-e8's keys on Qwen3.8-27B cost +3.08%.
Context and memory turns these into recommendations.
One RTX 3090, INT8 KV, thinking off, greedy; aggregate decode tok/s through the server, decode time from the request log:
| Requests at once | MTP 3 | DFlash2 7 | Tokens per round, MTP / DFlash2 |
|---|---|---|---|
| 1 | 135.0 | 187.1 | 3.51 / 5.57 |
| 2 | 238.2 | 313.5 | 3.51 / 5.82 |
| 4 | 387.4 | 406.2 | 3.54 / 5.63 |
| 8 | 522.8 | does not fit | 3.53 / — |
Speculation pays because a multi-column round costs about one sweep of the weights; batching
amortizes that sweep already, so the lead shrinks as requests are added while acceptance holds.
DFlash2's draft weights and its refusal of --lm-head-q6 stop it at eight lanes and cost it about
65K tokens of context against MTP on a 24 GB card. Over a reasoning, a code and a summarization
prompt seven drafts were best on average, but the reasoning prompt kept improving to twelve while
summarization fell off there.
One RTX 3090, rk4v4 KV with --lm-head-q6 --embedding-q4 --gdn-state-fp16, greedy, 512
generated tokens, one stream; decode tok/s with tokens per round in brackets:
--draft-tokens |
edit code (copies the prompt) | write new code | explain a concept | short story |
|---|---|---|---|---|
| none | 47.3 | 47.5 | 47.5 | 47.6 |
| 3 | 141.9 (3.9) | 118.2 (3.3) | 102.1 (2.8) | 77.1 (2.1) |
| 5 | 177.7 (5.7) | 124.8 (4.0) | 95.6 (3.1) | 75.1 (2.4) |
| 7 | 226.0 (7.4) | 130.6 (4.3) | 103.9 (3.4) | 67.7 (2.2) |
| 9 | 226.4 (8.8) | 129.9 (5.0) | 91.3 (3.5) | 56.3 (2.2) |
| 15 | 262.6 (12.5) | 114.7 (5.4) | 75.1 (3.5) | 47.6 (2.2) |
Each round verifies K+1 columns and runs K draft steps whether or not the drafts survive, so a larger K pays only where the head keeps guessing right (choosing a draft count).
The same server runs as for Bonsai 2, total generated tok/s:
| Card | Drafter | 1 | 2 | 4 | 8 |
|---|---|---|---|---|---|
| RTX PRO 6000 | none | 88.8 | 172.6 | 327.9 | 569.8 |
| RTX PRO 6000 | MTP 3 | 154.4 | 300.9 | 515.8 | 739.3 |
| RTX PRO 6000 | DFlash2 5 | 176.1 | 319.4 | 473.7 | 534.6 |
| RTX 5090 | none | 91.0 | 172.0 | 324.7 | 569.1 |
| RTX 5090 | MTP 3 | 160.6 | 299.0 | 490.0 | 690.0 |
| RTX 5090 | DFlash2 5 | 171.6 | 311.1 | 430.9 | 469.4 |
| RTX 4090 | none | 54.3 | 105.6 | 198.4 | 356.7 |
| RTX 4090 | MTP 3 | 92.8 | 174.9 | 300.3 | 442.2 |
| RTX 4090 | DFlash2 5 | 107.7 | 185.1 | 295.2 | |
| RTX 3090 | none | 48.1 | 91.9 | 172.2 | 290.2 |
| RTX 3090 | MTP 3 | 88.2 | 154.8 | 238.4 | 328.9 |
| RTX 3090 | DFlash2 5 | 89.1 | 155.4 | 206.0 |
The PRO 6000's server rows measured again next to an RTX 5090 (600 W boards), build 796f98500,
CUDA 13.1; decode tok/s, prompt time in seconds, acceptance in brackets:
| Model, KV, drafter, request | RTX PRO 6000, September | RTX PRO 6000, October | RTX 5090, October |
|---|---|---|---|
Bonsai 2, rk8v4, none, short chat |
167.5 | 167.7 | 170.4 |
Bonsai 2, rk8v4, DFlash2 7, short chat |
381 | 378.8 | 372.1 |
Bonsai 2, rk8v4, MTP 3, short chat |
314.7 | 313.9 | 321.2 |
Bonsai 2, rk8v4, none, prompt of 261,120 tokens |
78.3 s | 75.0 s | 76.7 s |
Bonsai 2, rk8v4, none, decode after it |
96.4 | 96.7 | 99.0 |
Bonsai 2, rk4v4, MTP 3, decode after it |
217.9 (0.56) | 220.9 (0.56) | 194.8 (0.46) |
Bonsai 2, rk8v4, MTP 3, decode after it |
210.5 (0.60) | 186.4 (0.49) | 207.6 (0.57) |
Bonsai 2, rk8v4, MTP 3, eight requests at once |
1,155.3 | 1,159.6 | 1,081.5 |
Qwen3.8, rk8v4, none, short chat |
89.6 | 90.0 | 92.1 |
Qwen3.8, rk8v4, DFlash2 7, short chat |
237 | 238.5 | 233.5 |
Qwen3.8, rk8v4, MTP 3, eight requests at once |
739.3 | 749.5 | 709.9 |
One request decodes no faster on the PRO 6000 than on the RTX 5090: that decode is bound by memory bandwidth, 1.79 TB/s of GDDR7 on both. Its 188 SMs against 170 show where compute decides: it prefills the 261K prompt 2% faster and runs eight requests at once 6 to 7% faster.
The 3.5-bit GGUF release, 10.9 GiB of weights.
rk8v4, one request; IQ3_S / the official artifact on the same card in the same sitting (RTX 3090
at 420 W and RTX 4090 with a 176,128-token window, RTX 5090 at 450 W with 262,144); the Tesla V100
runs IQ3_S alone with a 65,536-token window (16,384 for DFlash2):
| Measure | RTX 5090 | RTX 4090 | RTX 3090 | Tesla V100 |
|---|---|---|---|---|
| short chat, no drafter, tok/s | 107.5 / 88.1 | 70.6 / 55.0 | 59.9 / 40.3 | 45.5 |
| short chat, MTP 3, tok/s | 221.4 / 178.1 | 146.4 / 109.3 | 108.7 / 82.7 | 77.0 (0.58, 2.72) |
| short chat, DFlash2 5, tok/s | 226.5 / 222.5 | 169.4 / 141.3 | 115.6 / 109.2 | 65.3 (0.46, 3.28) |
| decode after 32,768 tokens, no drafter, tok/s | 100.3 / 83.2 | 66.0 / 52.2 | 50.4 / 38.4 | 42.5 |
| prompt time, 32,768 tokens, s | 8.6 / 9.3 | 9.3 / 12.8 | 20.5 / 22.2 | 38.9 |
On the V100, decode after 1,024 and 8,192 tokens is 45.4 and 44.9 tok/s without a drafter, 65.0 and 64.3 with MTP 3 (64.2 after 32,768) and 53.4 and 53.1 with DFlash2 5; prompt time is 1.18 s at 1,024 tokens and 8.3 s at 8,192.
Prompt and decode in tok/s:
| Card | Method, KV | Prompt 512 | Prompt 2,048 | Long prompt | Decode | Decode after the long prompt |
|---|---|---|---|---|---|---|
| RTX 3090 | engine, rk8v4 |
1,826 | 1,877 | 59.2 | ||
| TITAN RTX | engine, rk8v4 |
757 | 772 | 701 (16,384); 598 (65,536) | 34.8 | 33.1; 33.4 |
| Tesla V100 | engine, bf16 |
944 | 1,044 | 914 (16,384) | 45.3 | 42.6 |
| Tesla V100 | llama.cpp, F16 KV | 768 | 792 | 36.6 | 31.2 | |
| RTX 3060 | CLI, int8 |
567 (2,273) | 25.8 |
With MTP 3 the engine decodes 79.1 tok/s on the RTX 3090 and 41.6 on the TITAN RTX (both 0.29, 1.87); with DFlash2 3 the TITAN RTX decodes 32.5 (0.18, 1.52).
WikiText-2 test, disjoint 2,048-token windows, BF16 KV: 7.071 (GGUF), 7.0703 on the Tesla V100; the official artifact 7.286.
The MXFP8 tune, 17 GiB: too
large for 16 GB. On the TITAN RTX (engine, rk8v4) it prompts at 810 tok/s (512 tokens) and 832
(2,048) and decodes at 30.9.
- One RTX 3090 (capped at 315 W, the official
groupwise-intartifact, 19.6 GiB of weights), decode tok/s without a drafter at 4,096 / 16,384 / 32,768 tokens of context, the mean of two runs:rk8v4175.15 / 168.50 / 158.47,int8171.76 / 165.02 / 154.88,bf16166.16 / 156.00 / 142.99,fp8166.01 / 148.82 / 132.00,nvfp4169.04 / 151.81 / 131.75,k8v4165.66 / 143.58 / 122.78 (configuration calculator). - Two TITAN RTX as pipeline stages: 146.6 tok/s, 146.2 with MTP 3 (2.70 tokens a round), CLI, a 144-token prompt and 128 tokens. The artifact does not fit one TITAN RTX beside the runtime.
- NVFP4 on an RTX 5090: the NVFP4 artifact starts in 17 s and leaves 7.4 GiB of the card free.
ninfer-serve with the official groupwise-int artifact, --expert-residency host, a
131,072-token context, three MTP drafts and the automatic expert cache, on one RTX 4090 (PCIe 4.0
x16, a container with a 30-CPU quota, pinned to the GPU's NUMA node), 2026-10-20; 256 greedy
tokens after a 42-token code prompt and a 43-token prose prompt (twice each) and after a
31,865-token document (once). c04ea310 lends neither the layer banks nor free KV pages to the
expert cache and copies every miss; the current build does both and, by default, has the CPU compute
a share of each narrow call's misses (routed expert
residency). Decode in tok/s; after the
document and its prefill: c04ea310 / current / current with --expert-dma-share 1 (no CPU share):
--kv-dtype |
Decode, short prompts: c04ea310 |
current | no CPU share | Decode after the document | Prefill of the document |
|---|---|---|---|---|---|
bf16 |
183-189 | 211-245 | 200-230 | 162 / 186 / 178 | 7,700 / 8,405 / 8,386 |
int8 |
195-210 | 213-254 | 200-233 | 168 / 203 / 191 | 7,621 / 7,999 / 7,942 |
fp8 |
189-215 | 205-249 | 198-227 | 176 / 181 / 174 | 6,012 / 6,326 / 6,303 |
k8v4 |
198-210 | 219-241 | 206-220 | 165 / 188 / 180 | 5,551 / 5,731 / 5,713 |
nvfp4 |
191-210 | 221-242 | 212-227 | 174 / 191 / 184 | 5,306 / 5,425 / 5,405 |
rk8v4 |
202-216 | 220-238 | 215-226 | 182 / 197 / 190 | 7,747 / 8,098 / 8,091 |
rk4v4 |
201-218 | 219-246 | 209-232 | 172 / 192 / 181 | 7,755 / 8,100 / 7,835 |
rk4v4-e8 |
191-223 | 212-225 | 197-217 | 180 / 179 / 173 | 7,741 / 7,934 / 7,945 |
rk2v4-e8 |
180-227 | 203-241 | 195-228 | 180 / 184 / 177 | 7,714 / 7,858 / 7,945 |
Over all 45 decode measurements the current build decoded 0.997-1.329 times as fast as
c04ea310 (geometric mean 1.109) and 0.960-1.260 times without the CPU share (1.063); the slowest
pairs were after the document with rk4v4-e8 (0.997, and 0.960 without the CPU share). The lent
banks and pages raised the cache from 4,156-4,756 to 5,415-5,539 expert slots and cut the expert
bytes copied over the run from 169-197 GB to 122-125 GB (146-151 GB without the CPU share). The
CPU share changes no output: with and without it, all 45 answers were equal with equal log
probabilities. Every answer differs from c04ea310's, whose GPU computed SiLU with CUDA's
expf (an approximate hardware exponential); the current kernels compute it from correctly rounded
operations, as the CPU does. Startup took 1.2-1.7 s longer and device memory was unchanged (22,860 MiB).
Greedy, one request. Decode is measured over a short answer (78 tokens for Q2_0, 81 to 87 for
IQ3_S) and over the first tokens after a 4,463-token prompt; prefill is that prompt. Host memory
is the process's peak resident set, device memory the most nvidia-smi showed. The host-memory
and disk rows of one card use its free memory as the expert cache. A range is two runs.
| Card | Release | Experts | Device memory | Host memory | Decode, short answer | Decode after 4,463 tokens | Prefill |
|---|---|---|---|---|---|---|---|
| RTX PRO 6000 | Q2_0 | on the GPU | 37.7 GiB | 0.8 GiB | 136.0-139.7 | 160.7-162.6 | 2,925-2,952 |
| RTX PRO 6000 | IQ3_S | on the GPU | 53.7 GiB | 1.0 GiB | 123.8-125.9 | 146.8-146.9 | 2,540-2,541 |
| RTX PRO 6000 | Q2_0 | pinned host memory | 38.5 GiB | 34.0 GB | 54.8-55.0 | 67.7-70.0 | 1,296-1,297 |
| RTX PRO 6000 | IQ3_S | pinned host memory | 55.0 GiB | 50.3 GB | 29.3 | 31.2 | 803 |
| RTX PRO 6000 | Q2_0 | disk, in the page cache | 93.6 GiB | 1.0 GiB | 75.9 | 115.8 | 2,024 |
| RTX PRO 6000 | IQ3_S | disk, in the page cache | 93.5 GiB | 1.2 GiB | 65.6 | 106.0 | 1,661 |
| RTX PRO 6000 | Q2_0 | disk, pages evicted every second | 93.5 GiB | 1.0 GiB | 35.1 | 87.1 | 1,000 |
| RTX PRO 6000 | IQ3_S | disk, pages evicted every second | 93.5 GiB | 1.2 GiB | 28.7 | 78.6 | 773 |
| 2× RTX 5090 | Q2_0 | on the GPUs | 18.8 + 19.6 GiB | 0.9 GiB | 136.1-136.3 | 157.0-157.2 | 3,807-3,811 |
| 2× RTX 5090 | IQ3_S | on the GPUs | 26.5 + 27.8 GiB | 1.0 GiB | 121.6-121.9 | 141.8-142.0 | 3,310-3,341 |
| RTX 5090 | Q2_0 | pinned host memory | 30.0 GiB | 34.0 GB | 74.1-74.2 | 93.9-94.2 | 1,676-1,678 |
| RTX 5090 | IQ3_S | pinned host memory | 30.0 GiB | 50.3 GB | 40.7 | 41.0 | 1,100 |
| RTX 5090 | Q2_0 | disk, in the page cache | 29.9 GiB | 1.0 GiB | 67.5 | 76.7 | 1,739 |
| RTX 5090 | IQ3_S | disk, in the page cache | 29.9 GiB | 1.1 GiB | 55.3 | 44.3 | 439 |
| RTX 5090 | Q2_0 | disk, pages evicted every second | 29.9 GiB | 1.0 GiB | 25.3 | 28.7 | 694 |
| RTX 5090 | IQ3_S | disk, pages evicted every second | 29.9 GiB | 1.1 GiB | 18.8 | 14.9 | 171 |
| 2× RTX 4090 | Q2_0 | on the GPUs | 18.5 + 19.4 GiB | 0.8 GiB | 92.6-100.7 | 116-120 | 3,482-3,734 |
| RTX 4090 | Q2_0 | pinned host memory | 20.7 GiB | 34.0 GB | 52.6-52.7 | 44.3-44.6 | 1,137-1,139 |
| RTX 4090 | Q2_0 | disk, in the page cache | 20.7 GiB | 1.0 GiB | 42.0 | 45.6 | 723 |
| RTX 4090 | Q2_0 | disk, pages evicted every second | 20.5 GiB | 1.0 GiB | 17.7 | 12.2 | 160 |
| 2× RTX 3090 Ti | Q2_0 | on the GPUs | 18.4 + 19.4 GB | 0.7 GB | 90.2 | 107 | 1,504 |
| RTX 3090 | Q2_0 | pinned host memory | 22.6 GB | 34 GB | 48.9 | 42.1 | 842 |
| RTX 3090 | Q2_0 | disk, in the page cache | 22.6 GB | 0.9 GB | 47.0 | 39.1 | 630 |
| RTX 3090 | Q2_0 | disk, page cache dropped every second | 22.6 GB | 0.9 GB | 17.2 | 11.3 | 195 |
| RTX 3090 | IQ3_S | pinned host memory | 22.1 GiB | 50.3 GB | 34.4 | 30.2 | 533 |
| RTX 3090 | IQ3_S | disk, the page cache holding part of the file | 22.1 GiB | 19.0 | 21.6 | 209 | |
| RTX 3090 | IQ3_S | disk, pages evicted every second | 22.1 GiB | 10.7 | 5.4 | 47 | |
| RTX 3090 | Q2_0 | pinned host memory | 22.1 GiB | 34.0 GB | 50.2 | 43.7 | 847 |
| L40S (48 GB) | Coder IQ1_M | pinned host memory | 35 | 1,648 | |||
| L40S (48 GB) | Coder IQ1_M | disk, in the page cache | 42 | 1,938 |
The Coder IQ1_M rows are the 28.4 GiB model beside the shared n-gram table on one NVIDIA L40S (48 GB). The two RTX 3090 Q2_0 host-memory rows come from two hosts (an earlier build with 512-token prompt chunks, and the IQ3_S sitting). The host link carries host and disk experts: PCIe 5.0 x16 on the RTX 5090 host, 4.0 x16 on the RTX PRO 6000, RTX 4090 and RTX 3090 hosts. The RTX 4090 rows ran pinned to the GPU's NUMA node; left unpinned, host experts decode 40 tok/s and disk experts 32 to 33.
Other cards ran the Q2_0 release from the CLI with other prompts, 128 generated tokens, a cold expert cache, the files in the page cache (most or all of them on the 8 and 12 GB cards); prefill / decode tok/s with the expert-cache hits:
| Card | Experts | Prompt | Prefill / decode | Hits |
|---|---|---|---|---|
| TITAN RTX, two | on the GPUs, two pipeline stages | 144 tokens | — / 76.0 | |
| TITAN RTX | pinned host memory | 144 tokens | — / 53.5 | 43.7% |
| TITAN RTX | disk | 144 tokens | — / 30.3 | 83.5% |
| Tesla V100 | pinned host memory | 66 tokens | 38.8 / 35.9 | 58.6% |
| Tesla V100 | disk | 66 tokens | 38.2 / 30.8 | 81.0% |
| RTX 3060 | pinned host memory | 69 / 2,273 tokens | 58.9 / 39.9; 569 / 38.2 | 51.3%; 26.4% |
| RTX 3060 | disk | 69 / 2,273 tokens | 37.9 / 23.5; 215 / 22.9 | 70.2%; 44.2% |
| RTX 3060 Ti | pinned host memory | 69 / 2,273 tokens | 73.3 / 33.0; 723 / 30.6 | 29.3%; 13.7% |
| RTX 3060 Ti | disk | 69 / 2,273 tokens | 52.8 / 17.6; 356 / 16.4 | 39.9%; 23.3% |
The RTX 3060 and 3060 Ti hold 4.9 to 5.3 GiB and 0.9 to 1.3 GiB of expert cache; their host-memory rows peak at 32.7 GiB of RAM, their disk rows at 1.2 to 1.3 GiB.
The IQ3_S release through ninfer-serve with host experts and its defaults (three MTP drafts, the
CPU share, the streamed sparse-attention KV), against commit 5ed86dff9 with three drafts and the
CPU share; 256 greedy tokens after short prompts and after a long document
(details):
| Context | Build | Expert cache | Decode, short prompts | Decode after the document | Prefill |
|---|---|---|---|---|---|
| 65,536 | 5ed86dff9 |
14,080 MiB | 66.5-77.1 | 66.5-75.0 (31,865 tokens) | 2,576-2,714 |
| 65,536 | defaults | 16,059 MiB | 72.6-82.5 | 66.0-79.0 (31,865 tokens) | 2,840 |
| 458,752 | 5ed86dff9, no drafts |
4,589 MiB | 39.2-43.0 | 37.7 (136,077 tokens) | 2,612 |
| 458,752 | defaults | 14,643 MiB | 67.3-70.3 | 67.6 (136,077 tokens) | 2,708 |
The same release, context and prompts on a second RTX 4090 rental (a container with a 30-CPU
quota, pinned to the GPU's NUMA node), 2026-10-20, against c04ea310 for every --kv-dtype;
decode in tok/s over the two short prompts answered twice and after the document, and its prefill,
as c04ea310 / current:
--kv-dtype |
Decode, short prompts: c04ea310 |
current | Decode after the document | Prefill of the document |
|---|---|---|---|---|
bf16 |
78.0-82.6 | 78.9-86.1 | 72.8 / 74.4 | 2,861 / 3,736 |
int8 |
79.9-85.9 | 79.5-85.6 | 75.0 / 75.7 | 2,842 / 3,678 |
fp8 |
80.8-89.2 | 81.0-90.4 | 76.2 / 76.0 | 2,767 / 3,599 |
k8v4 |
83.0-90.4 | 81.5-91.8 | 75.9 / 77.6 | 2,778 / 3,562 |
nvfp4 |
76.3-84.0 | 75.9-87.8 | 72.7 / 77.0 | 2,774 / 3,546 |
rk8v4 |
82.6-95.9 | 80.7-93.9 | 74.9 / 77.9 | 2,858 / 3,704 |
rk4v4 |
80.4-89.1 | 83.5-91.6 | 74.3 / 78.9 | 2,835 / 3,667 |
rk4v4-e8 |
76.5-87.6 | 79.0-91.2 | 71.9 / 73.2 | 2,865 / 3,710 |
rk2v4-e8 |
69.1-74.4 | 69.2-73.3 | 60.2 / 60.9 | 2,829 / 3,667 |
Decode changed by 0.956-1.062 times over the 45 measurements (geometric mean 1.016), within the
spread of repeated runs; every answer equals c04ea310's. The document prefilled 1.27-1.31 times
as fast (two prefill buffers by default), and the first token of a short prompt after it came in
0.45-0.71 s instead of 1.03-2.75 s (sequence images in pages pinned at startup). Startup took 0-2.9 s
longer, most of it pinning those pages; device memory was within 80 MiB.
Two RTX 3090s (350 W), the Q2_0 release with Unsloth's shared-Q8_0 MTP block, greedy decoding of
a 117-token answer to a 37-token coding prompt, two runs each; every speculative output is the
plain decode's, token for token:
| Placement | Drafts | Decode, tok/s | Drafts accepted | Tokens a round |
|---|---|---|---|---|
| 2× RTX 3090, experts on the GPUs | none | 92.9-93.0 | ||
| 2× RTX 3090, experts on the GPUs | 1 | 130.1-130.9 | 96.6% | 1.97 |
| 2× RTX 3090, experts on the GPUs | 2 | 150.3-150.5 | 91.5% | 2.83 |
| 2× RTX 3090, experts on the GPUs | 3 | 167.8-171.0 | 95.6% | 3.87 |
| 2× RTX 3090, experts on the GPUs | 4 | 171.9-173.6 | 91.0% | 4.64 |
A prose answer keeps 38.6% of three drafts and gains nothing.
ninfer-serve, INT8 KV, an 8,192-position context, one request at a time; three prompts (Python
code, prose, Chinese) twice, 256 greedy tokens each; decode tok/s of the first / second run:
| Mode | Code | Prose | Chinese |
|---|---|---|---|
| no drafter | 87.3 / 92.3 | 93.7 / 94.3 | 93.4 / 94.3 |
| MTP 2 | 118.8 / 118.6 | 117.3 / 114.8 | 95.8 / 101.2 |
| MTP 3 | 121.2 / 122.6 | 117.7 / 111.1 | 90.0 / 94.6 |
| MTP 4 | 111.1 / 105.9 | 101.9 / 96.2 | 74.6 / 78.5 |
| disk experts, first run | 68.1 | 71.4 |
The first 72 KB of the WikiText sample in perplexity-1m, 2,560-token windows advancing by 1,024,
BF16 KV, the fourteen windows llama.cpp evaluates identically: Q2_0 2.6579 on an RTX 3090, 2.6489
on an L40S and 2.6509 on the Tesla V100 (llama.cpp 2.6502); IQ3_S 2.1317 (llama.cpp 2.1278). Over
five 65,536-token windows of PG-19 on two RTX 5090s: 8.0834 against llama.cpp's 8.0802. Host and
disk experts give the same perplexity on every card checked (2.6057 on the V100 over the first
40 KB, 2.53655 on the TITAN RTX over the first 40,000 bytes of wikitext/00.txt, INT8 KV).
Google's QAT Q4_0 release
with its MTP assistant, F16 KV (bf16) unless a row names another.
Prompt and decode in tok/s; llama.cpp on the same GGUF with flash attention:
| Card | Engine | Prompt 2,048 | Prompt 10,000 | Prompt 40,000 | Decode | after 10,000 | after 40,000 |
|---|---|---|---|---|---|---|---|
| RTX 3090 (350 W) | NInfer | 6,566 | 6,045 | 4,698 | 215.4 | 190.4 | 162.2 |
| RTX 3090 (350 W) | llama.cpp | 4,925 | 4,697 | 3,767 | 168.6 | 151.7 | 135.7 |
| Card | Engine | Prompt 512 | Prompt 2,048 | Prompt 16,384 | Decode 128 | after 16,384 |
|---|---|---|---|---|---|---|
| RTX 3090 | NInfer | 5,068 | 6,976 | 222.9 | ||
| TITAN RTX | NInfer | 2,532 | 3,571 | 2,660 | 158.8 | 158.5 |
| Tesla V100 | NInfer | 2,631 | 3,005 | 2,572 | 167.7 | 145.3 |
| Tesla V100 | llama.cpp | 1,608 | 1,514 | 120.0 | 108.7 |
The MTP assistant with 2 drafts decodes 435.2 tok/s on the RTX 3090 and 290.7 on the TITAN RTX (engine, 512-token prompt; 0.95, 2.91 on both).
Decode tok/s of 128 tokens on an RTX 3090 held at 300 W, the HauhauCS Balanced artifact, one request, no drafts; prompts stay within 1.5% of F16 in every format:
--kv-dtype |
empty context | after 10,000 | after 40,000 |
|---|---|---|---|
bf16 |
199.8 | 176.3 | 150.4 |
int8 |
195.0 | 175.2 | 149.2 |
rk8v4 |
194.6 | 175.9 | 149.7 |
rk4v4 |
193.8 | 175.5 | 150.5 |
rk4v4-e8 |
192.6 | 174.8 | 149.7 |
rk2v4-e8 |
185.6 | 167.7 | 144.7 |
fp8 |
177.9 | 154.7 | 130.5 |
k8v4 |
177.0 | 152.6 | 129.1 |
nvfp4 |
176.8 | 149.7 | 125.5 |
The FP8 and NVFP4 formats lose 11 to 17% already on an empty context: the RTX 3090 has no E4M3 or E2M1 conversion instruction (sm_89 adds them), and those decodes run in software.
The longest --max-context that ninfer-serve --max-concurrency 8 starts with on the RTX 3090,
HauhauCS artifact, context cache on, no vision tower:
--kv-dtype |
8 sequences, MTP 2 | 8 sequences, no drafts |
|---|---|---|
bf16 |
24,576 | 36,864 |
int8 |
82,944 | 96,256 |
fp8 |
84,992 | 98,304 |
rk8v4 |
92,160 | 103,424 |
k8v4 |
94,208 | 105,472 |
nvfp4 |
163,840 | 179,200 |
rk4v4, rk4v4-e8 |
164,864 | 180,224 |
rk2v4-e8 |
173,056 | 186,368 |
Perplexity by format is in Gemma 4.
Ten chat requests one at a time to ninfer-serve on the RTX 3090, 384 generated tokens each; every
configuration generates the same tokens:
| Decode tok/s | greedy | after a 13,600-token prompt | sampled (T 1, top-k 64, top-p 0.95) |
|---|---|---|---|
| no drafter | 209.1 | 186.0 | 207.9 |
| MTP 1 (acceptance 0.81) | 280.1 | 240.2 | |
| MTP 2 (0.70; 0.63 sampled) | 290.7 | 241.9 | 270.6 |
| MTP 3 (0.62; 0.55 sampled) | 293.7 | 229.2 | 268.0 |
llama.cpp's server with the same GGUF and drafter decodes the greedy requests at 131.4 tok/s, 186.4 with one draft, 201.6 with two and 195.2 with three. Parallel streams, total tok/s:
| Streams | no drafter | with the assistant |
|---|---|---|
| 1 | 208.4 | 295.5 with three drafts, 291.8 with two |
| 2 | 310.1 | 370.0 with one draft each |
| 3 | 354.7 | 365.7 with one draft each |
| 4 | 397.2 | 387.6 with one draft each, so four or more decode plainly |
On the Tesla V100 (window 28,672 tokens), short chat decodes 164.3 tok/s without a drafter and 226.3 with MTP 2 (0.70, 2.40); after 1,024 and 8,192 tokens 155.6 and 149.5, with MTP 2 187.7 and 167.0. Prompt time is 0.36 s at 1,024 tokens and 2.9 s at 8,192.
| Page | What it measures | Hardware |
|---|---|---|
| Reference measurements, September 2026 | Ternary Bonsai 2 27B and Qwen3.8-27B at full context: decode and prompt time by depth, drafters, largest context per card, needles, several requests at once, what the device profiles change, and the October re-check | RTX 3090, 4090, 5090, PRO 6000 |
| Tesla V100, October 2026 | a 70 build on 16 GB: what fits, engine and server rates of Ternary Bonsai 2, the Qwen3.8-27B releases, Flash-Next and Gemma 4, perplexity against other cards, llama.cpp on the same card |
Tesla V100-SXM2-16GB |
| TITAN RTX, October 2026 | a 75 build on one and two 24 GB cards: every model's prompt and decode rates against an RTX 3090, drafters, KV formats, depth, Flash-Next and the 35B-A3B over two stages, the device profile, where the time goes, perplexity |
TITAN RTX, RTX 3090 |
| 8, 11 and 12 GB cards, October 2026 | the published image on small cards: which models load, CLI rates, the largest context, Flash-Next with host and disk experts | RTX 3060 Ti, RTX 2080 Ti, RTX 3060 |
| Qwen3.8-Flash-Next | every expert placement of the GSQ-RCO releases, MTP, perplexity against llama.cpp, AIME and GPQA | RTX 3090, 3090 Ti, 4090, 5090, PRO 6000, L40S |
| GGUF block formats | the Qwen3.8-27B GSQ-RCO IQ3_S release against the official artifact: perplexity, reasoning benchmarks, speed | RTX 3090, 4090, 5090 |
| Gemma 4 26B-A4B | against llama.cpp, KV formats, the assistant's drafts, parallel streams | RTX 3090 |
| Quality trades | what each precision option costs in perplexity and buys in memory or speed | RTX 3090 |
| Configuration calculator | which context, KV format and speculation fit an RTX 3090, from measured sizes | RTX 3090 |
The tools behind them: tools/bench/refbench.py
for the server tables, the serving corpus runner,
ninfer_bench for the Engine without HTTP and the Op benchmarks for single operations
(benchmarks), and ninfer-perplexity for quality (perplexity).
An Op benchmark establishes an Op result, not an end-to-end one; a whole request does.
Every configuration reproduces its own output exactly. Configurations do not reproduce each other: a verification evaluates K+1 columns in one pass where plain decode evaluates one, a batch evaluates several requests together, and the different reduction orders can flip a near-tied argmax. MTP and DFlash2 outputs differ from each other and from plain greedy decoding, and DFlash2's output varies with the draft count, without a measurable perplexity cost (batch composition).