If vLLM already solved LLM serving, why did SGLang appear?
Updated on
Published on
By
Table of Content
About the author
Inference is now the bigger AI job, and the bigger bill. But when it comes to running models in production, tokens per second does not tell the whole story. So what actually determines whether your AI service feels fast and stays cost-effective at scale? This blog breaks down the three numbers that matter, why they change across workloads, and what they mean for your infrastructure.
Training built the models. Running them is now the bigger job, and the bigger bill. By Deloitte’s estimate, inference has grown from about a third of the world’s AI compute in 2023 to roughly two-thirds in 2026. It has overtaken training as the larger cost.

That leaves every team deploying a model with a question: will it be fast enough for users, and cheap enough to run at scale?
The industry answers both with a single number, usually at the top of every graphics processing unit (GPU) spec sheet: tokens per second. It reads as speed. And since more tokens per second per GPU also means a lower cost per token, it looks like it answers cost as well.
It answers neither. Tokens per second is a lab measurement. It is taken with a single request on an idle machine, or with one big batch run flat out and no latency target at all.
Production looks nothing like that. When hundreds of users hit your service at once, each waiting on their own response, the same GPU delivers well below its spec-sheet figure.

The benchmarks now reflect this. MLPerf, the industry-standard testing platform, throws out any tokens-per-second result that misses its time limit. It counts only throughput a user could actually receive. What it reports is the rate a system sustains while still meeting its deadline.
Three numbers actually predict whether a service is fast and what it costs to run: time to first token, tokens per second, and queue depth.
The clearest way to understand them is to follow a single request through the server.
Someone sends a request to your model. Three things decide how fast or slow it feels.
That is the whole life of a request: it waits in line, then it waits for the first word, then it reads the rest. Every slow experience your users have is one of those three going wrong. The skill is knowing which one, because each has a different fix, and fixing the wrong one costs money and changes nothing.

| Metric | What it is | What the user feels |
| Time to first token (TTFT) | how long until the first word appears | the pause before the answer starts |
| Tokens per second | how fast words stream after that | the speed of the answer |
| Queue depth | how many requests are waiting ahead | how long they wait before anything starts |
Of the three, tokens per second is the one on the spec sheet, and it is the easiest to game. It is not one number but three, depending on what you divide by.
The two numbers that do matter – per user and per server – pull in opposite directions.
Batch more requests together and the server gets through more work in total, while each person’s answer slows down.
Think of a bus and a taxi. The bus moves far more people per hour, but taxis move the individual person faster.

So a tokens-per-second number means nothing until you ask two things about it:
| Per user or per server? One is the speed a person feels; the other is a company-wide total that can hide it. Measured with how many requests waiting? A number taken with an empty queue is not the number you will run at. |
Without both answers, it is a marketing figure.
Which number you fight for depends on the workload, because each kind of workload is slow in a different place. Push on the one that bites, and the other two mostly look after themselves.
A chatbot cares about the wait, not the streaming speed.

Search-and-answer, or RAG, also cares about the wait, for a different reason.
Agents care about the wait, over and over.
Reasoning models turn it around.
Voice needs an even rhythm.


The expensive mistake is running one of these on settings meant for another. An agent tuned like a chatbot, or a reasoning model sized as if the visible answer were the whole bill, pays for speed it cannot use while starving the number it actually lives on.
| Workload | The number it lives on | What to work on |
| Chatbot | the first-word wait | fast first token; streaming only needs to beat reading speed |
| Search-and-answer (RAG) | the first-word wait | read the retrieved documents once and reuse |
| Agents | the first-word wait, many times over | reuse the repeated context between steps |
| Voice | first word fast, then a steady beat | even pacing, not just a fast average |
Queue depth is the metric that most often decides how bad your worst moments get.
When your service suddenly slows down, the model almost certainly did not get slower. Your requests are piling up behind each other. Queues have a nasty habit: the fuller you run the GPU, the sharper the wait climbs. Run it at 70 percent busy and you are already adding waiting time. Past 90 percent, a small rise in traffic causes a huge jump in wait. This is why “just run the GPUs hotter to save money” backfires. The last bit of saving you squeeze out comes straight back as a slow experience for your users.

You can see this directly. A serving engine like vLLM shows you two counts side by side: how many requests it is working on right now, and how many are waiting to start. That second count is the one to watch. If requests are waiting, your problem is the queue, and a faster chip will not fix it. If nothing is waiting but the first word is still slow, your problem is a long prompt taking a while to read.
One edge case is worth calling out. A single very long prompt can hog the GPU while the model reads it, and every short request behind it just sits and waits. One person pasting in a 32,000-word document can slow the first word for everyone else in line. The fix is to chop the long prompt into pieces and let other requests slip in between them, so one big job stops blocking the line.
One caution the other way. An always-empty queue is not the goal either. It means you are paying for machines that sit idle most of the time, waiting for a rush that rarely comes. What you want is a short, steady line that absorbs bursts and still gets people served quickly.
Four things move your cost per token, and only one of them is the chip:
| Move | Cost per token | The trade-off |
| Bigger batches | falls | every user’s answer slows down |
| Tighter speed target | rises | you serve fewer requests at once |
| Better serving software | falls sharply | the work is in the tuning |
| A faster chip | falls a little | the smallest lever of the four |
The chip sets the floor. The software running the queue sets the ceiling. Most teams shop hard for the floor and never look up.
Everything so far points to the same place. The numbers that decide your service are the first-word wait, the streaming speed, the queue behind them, and what all three cost. Most platforms keep them hidden.
The Neysa Velocis platform puts them in front of you, on hardware sized to your workload, with engineers on hand.
Before you compare a single tokens-per-second number, decide which of the three your workload actually lives on.
Put one live model on a Neysa Velocis endpoint, set your target, and watch what it does.
Track inference performance, queue depth and cost on infrastructure sized for your workload.