T/s is generated tokens per second, but it splits into two metrics: single-stream T/s (one request's decode rate, user-facing) and system T/s (aggregate across all in-flight requests, capacity-facing).
Picture a chef plating dishes. Single-stream T/s asks how many bites this one diner gets per second. System T/s asks how many bites the whole restaurant serves per second across every diner at once. With one diner, both numbers are the same. With sixty-four diners, the kitchen sends out hundreds of bites per second across the room, even though any one diner is still getting bites at roughly their normal pace, maybe a bit slower. So if a vendor brags '4,000 T/s on H100', they are probably counting the whole restaurant. If your chat reply feels slow at 30 T/s, you are measuring your one plate. Both are real; they just answer different questions, and you have to know which the benchmark is reporting.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Tokens-per-second is the most widely-quoted and most commonly misread inference benchmark. The number on a vendor's marketing page and the number you measure in production can differ by an order of magnitude, and both can be technically correct. Understanding why requires distinguishing two distinct metrics that share the name.
This deep dive defines single-stream T/s and system T/s precisely, walks through why they diverge under batching, gives concrete numbers for representative hardware and models, and ends with the benchmarking hygiene that production teams use to compare systems honestly.
Two metrics, one name
T/s as a unit means 'tokens generated per wall-clock second'. The ambiguity is the scope of aggregation. The two canonical interpretations are single-stream and system, and they answer different questions.
Single-stream T/s measures one request in isolation. You send one prompt, the model decodes it, and you divide the output token count by the wall-clock decode time. Mathematically this is 1 / TPOT, where TPOT (time per output token) is the steady-state time between successive token emissions. Single-stream T/s captures user-perceived speed: it is the rate at which the chat UI fills in for one user.
System T/s measures the server's total productivity across all concurrent requests. You time a window during which many requests are in flight, count the total output tokens emitted across all of them, and divide by the window length. System T/s is what feeds cost per token calculations: every token the server emits contributes to revenue and consumes GPU time, so summing them gives the productivity figure.
The relationship between the two is simple in concept: system T/s equals single-stream T/s times the average concurrency, minus the per-request slowdown that batching introduces. At batch size 1, the two are equal. At batch size 128, system T/s is roughly 50-80x single-stream T/s, depending on how aggressively the model and engine support batching.
The practical implication: when a benchmark reports 'X T/s', the first question to ask is which metric. A 70B model at 50 T/s is plausible single-stream; a 70B model at 4,000 T/s is plausible system. Mixing them up leads to nonsensical conclusions like 'Groq is 80x faster than H100' or 'H100 is 80x faster than Groq', both of which are wrong.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- Groq's LPU architecture publishes single-stream T/s benchmarks like '300 T/s on Llama 3 70B', targeting per-request speed at the cost of aggregate throughput.
- vLLM and TGI on H100 publish system T/s benchmarks like '4,000 T/s on Llama 3 70B' at batch sizes of 128 in-flight requests.
What an interviewer would ask next. Try answering before peeking at the approach.
QWhy does single-stream T/s on a 70B model max out around 50 T/s on H100?
Decode is HBM-bandwidth-bound. Each step reads ~70 GB of weights (FP8) from HBM with 3.35 TB/s bandwidth, giving ~50 reads per second. Add KV cache reads and per-token overhead, and theoretical max sits in the 45-55 T/s range. Quantizing to FP4 on B200 or shrinking the model lifts this ceiling.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Comparing one vendor's single-stream T/s to another's system T/s without normalizing. Both numbers are called 'T/s' and they are not the same thing.
60 second bullets to scan on the way to the call.
Define T/s as generated tokens per wall-clock second.
Distinguish single-stream T/s from system T/s in scope.
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.