Matrix A - minicpm5_2b - run 38698723952

tkv advantage over each engine's own bf16 KV

Same engine, same workload, KV cache swapped: bf16 → tkv. Higher is better on every bar.

arbi-servevLLMSGLang
Decode tok/s per stream: tkv vs bf16
0%20%40%60%80%% vs bf16arbi-serve c1: tkv vs bf16 +55.9%+56%vLLM c1: tkv vs bf16 +57.9%+58%SGLang c1: tkv vs bf16 +55.7%+56%c1@126karbi-serve c8: tkv vs bf16 +39.7%+40%vLLM c8: tkv vs bf16 +31.4%+31%SGLang c8: tkv vs bf16 +34.0%+34%c8@14karbi-serve c64: tkv vs bf16 +42.9%+43%vLLM c64: tkv vs bf16 +42.5%+42%SGLang c64: tkv vs bf16 +41.0%+41%c64@1.6karbi-serve c256: tkv vs bf16 +16.1%+16%vLLM c256: tkv vs bf16 +17.7%+18%SGLang c256: tkv vs bf16 +29.2%+29%c256@0.8kconcurrency @ median prompt length
Prefill tok/s: tkv vs bf16
0%20%40%60%80%% vs bf16arbi-serve c1: tkv vs bf16 +66.7%+67%vLLM c1: tkv vs bf16 +65.5%+66%SGLang c1: tkv vs bf16 +66.9%+67%c1@126karbi-serve c8: tkv vs bf16 +24.5%+25%vLLM c8: tkv vs bf16 +18.9%+19%SGLang c8: tkv vs bf16 +30.9%+31%c8@14karbi-serve c64: tkv vs bf16 +1.7%+2%vLLM c64: tkv vs bf16 +4.9%+5%SGLang c64: tkv vs bf16 +8.8%+9%c64@1.6karbi-serve c256: tkv vs bf16 +0.5%+0.5%vLLM c256: tkv vs bf16 -0.4%-0.4%SGLang c256: tkv vs bf16 +4.0%+4%c256@0.8kconcurrency @ median prompt length
TTFT reduction: tkv vs bf16
0%10%20%30%40%50%% lower TTFTarbi-serve c1: tkv vs bf16 +40.0%+40%vLLM c1: tkv vs bf16 +39.6%+40%SGLang c1: tkv vs bf16 +40.1%+40%c1@126karbi-serve c8: tkv vs bf16 +17.5%+17%vLLM c8: tkv vs bf16 +15.3%+15%SGLang c8: tkv vs bf16 +23.2%+23%c8@14karbi-serve c64: tkv vs bf16 +2.3%+2%vLLM c64: tkv vs bf16 +7.3%+7%SGLang c64: tkv vs bf16 +9.0%+9%c64@1.6karbi-serve c256: tkv vs bf16 +0.2%+0.2%vLLM c256: tkv vs bf16 -1.4%-1%SGLang c256: tkv vs bf16 +4.8%+5%c256@0.8kconcurrency @ median prompt length

Engine parity

One colour per engine: the engines track each other, with the tkv lines (solid) above the bf16 lines (dashed).

arbi-servevLLMSGLangtkv KVbf16 KV
Decode tok/s per stream
050100150tok/s per streamc1@126kc8@14kc64@1.6kc256@0.8kconcurrency (log scale) @ median prompt lengtharbi-serve bf16 c1: 85.4 tok/s per streamarbi-serve bf16 c8: 68.3 tok/s per streamarbi-serve bf16 c64: 68.7 tok/s per streamarbi-serve bf16 c256: 27.4 tok/s per streamvLLM bf16 c1: 85.3 tok/s per streamvLLM bf16 c8: 70.8 tok/s per streamvLLM bf16 c64: 67.9 tok/s per streamvLLM bf16 c256: 27.2 tok/s per streamSGLang bf16 c1: 84.7 tok/s per streamSGLang bf16 c8: 69.2 tok/s per streamSGLang bf16 c64: 67.1 tok/s per streamSGLang bf16 c256: 23.4 tok/s per streamarbi-serve tkv c1: 133 tok/s per streamarbi-serve tkv c8: 95.3 tok/s per streamarbi-serve tkv c64: 98.1 tok/s per streamarbi-serve tkv c256: 31.9 tok/s per streamvLLM tkv c1: 135 tok/s per streamvLLM tkv c8: 93.0 tok/s per streamvLLM tkv c64: 96.8 tok/s per streamvLLM tkv c256: 32.0 tok/s per streamSGLang tkv c1: 132 tok/s per streamSGLang tkv c8: 92.7 tok/s per streamSGLang tkv c64: 94.6 tok/s per streamSGLang tkv c256: 30.3 tok/s per stream
Prefill tok/s
02.5k5k7.5k10k12.5kprefill tok/sc1@126kc8@14kc64@1.6kc256@0.8kconcurrency (log scale) @ median prompt lengtharbi-serve bf16 c1: 5777 prefill tok/sarbi-serve bf16 c8: 4452 prefill tok/sarbi-serve bf16 c64: 934 prefill tok/sarbi-serve bf16 c256: 220 prefill tok/svLLM bf16 c1: 5811 prefill tok/svLLM bf16 c8: 4240 prefill tok/svLLM bf16 c64: 799 prefill tok/svLLM bf16 c256: 210 prefill tok/sSGLang bf16 c1: 5658 prefill tok/sSGLang bf16 c8: 4443 prefill tok/sSGLang bf16 c64: 867 prefill tok/sSGLang bf16 c256: 234 prefill tok/sarbi-serve tkv c1: 9632 prefill tok/sarbi-serve tkv c8: 5545 prefill tok/sarbi-serve tkv c64: 950 prefill tok/sarbi-serve tkv c256: 221 prefill tok/svLLM tkv c1: 9619 prefill tok/svLLM tkv c8: 5040 prefill tok/svLLM tkv c64: 838 prefill tok/svLLM tkv c256: 209 prefill tok/sSGLang tkv c1: 9440 prefill tok/sSGLang tkv c8: 5815 prefill tok/sSGLang tkv c64: 944 prefill tok/sSGLang tkv c256: 244 prefill tok/s

Scaling with batch

Total decode throughput over all concurrent streams.

arbi-servevLLMSGLangtkv KVbf16 KV
Total decode tok/s (all streams)
02k4k6k8k10ktok/s, all streamsc1@126kc8@14kc64@1.6kc256@0.8kconcurrency (log scale) @ median prompt lengtharbi-serve bf16 c1: 85 tok/s, all streamsarbi-serve bf16 c8: 697 tok/s, all streamsarbi-serve bf16 c64: 4736 tok/s, all streamsarbi-serve bf16 c256: 8173 tok/s, all streamsvLLM bf16 c1: 85 tok/s, all streamsvLLM bf16 c8: 721 tok/s, all streamsvLLM bf16 c64: 4702 tok/s, all streamsvLLM bf16 c256: 8035 tok/s, all streamsSGLang bf16 c1: 85 tok/s, all streamsSGLang bf16 c8: 708 tok/s, all streamsSGLang bf16 c64: 4648 tok/s, all streamsSGLang bf16 c256: 6798 tok/s, all streamsarbi-serve tkv c1: 133 tok/s, all streamsarbi-serve tkv c8: 890 tok/s, all streamsarbi-serve tkv c64: 6494 tok/s, all streamsarbi-serve tkv c256: 9299 tok/s, all streamsvLLM tkv c1: 135 tok/s, all streamsvLLM tkv c8: 892 tok/s, all streamsvLLM tkv c64: 6368 tok/s, all streamsvLLM tkv c256: 9333 tok/s, all streamsSGLang tkv c1: 132 tok/s, all streamsSGLang tkv c8: 885 tok/s, all streamsSGLang tkv c64: 6233 tok/s, all streamsSGLang tkv c256: 8477 tok/s, all streams

Canonical table

Matrix A - minicpm5_2b - run 38698723952
       │                                     c1@126k                                      │                                      c8@14k                                      │                                     c64@1.6k                                     │                                    c256@0.8k                                     
engine │ prefill tok/s decode/stream  decode total          TTFT          TPOT agg@900 tok/s │ prefill tok/s decode/stream  decode total          TTFT          TPOT agg@900 tok/s │ prefill tok/s decode/stream  decode total          TTFT          TPOT agg@900 tok/s │ prefill tok/s decode/stream  decode total          TTFT          TPOT agg@900 tok/s 
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
arbi   │     9632/5777      133/85.4        133/85   13395/22333      7.5/11.7         45/27 │     5545/4452     95.3/68.3       890/697     2567/3111     10.5/14.7       523/390 │       950/934     98.1/68.7     6494/4736     2248/2302     10.2/14.6     4888/3705 │       221/220     31.9/27.4     9299/8173     4521/4530     31.4/36.4     6320/5728 
vllm   │     9619/5811      135/85.3        135/85   13414/22202      7.4/11.7         45/27 │     5040/4240     93.0/70.8       892/721     3355/3960     10.8/14.1       505/400 │       838/799     96.8/67.9     6368/4702     2910/3140     10.3/14.7     4630/3541 │       209/210     32.0/27.2     9333/8035     4904/4837     31.3/36.8     6220/5608 
sglang │     9440/5658      132/84.7        132/85   13667/22805      7.6/11.8         44/27 │     5815/4443     92.7/69.2       885/708     2753/3583     10.8/14.5       529/397 │       944/867     94.6/67.1     6233/4648     2219/2438     10.6/14.9     4719/3591 │       244/234     30.3/23.4     8477/6798     4096/4302     33.0/42.7     5598/4647 
cells: tkv/bf16 · TTFT,TPOT=ms median · prefill=prompt tok / TTFT · decode/stream=1000/TPOT · decode total=all streams over their decode spans · agg=all streams @ 900 tok, prefill INCLUDED · best / worst>20% / worst-close / plain mid