The Utilization Tax

A June 2026 paper found the effective cost of a self-hosted LLM on identical H100 hardware ranges from $0.21 to $15.25 per million output tokens. Across its 42 benchmarks, that spread has nothing to do with the model, the quantization, or the GPU. It comes entirely from how busy the fleet is when the request arrives. Ordinary business-hours load carries a 2.5 to 24x penalty over a saturated fleet. Near idle, it is up to 36.3x. Every public LLM cost calculator treats utilization as a fixed input. Little's Law says it is the whole story.

Published 2026-07-16 by Dor Amir on the Nadir blog.

Filed under Pricing & Models.

Same GPU, same model, same weights. A 72x spread in what it actually costs.

A paper published to arXiv on June 10, 2026 ran 42 benchmarks across dense and mixture-of-experts model architectures on identical H100 hardware and measured something almost nobody prices in ahead of time: the effective cost of a self-hosted LLM, in dollars per million output tokens, ranged from $0.21 to $15.25. Same chip. Same model family. Same quantization. The only thing that moved was how busy the fleet was when the request showed up. Source: Patil, "Beyond Per-Token Pricing: A Concurrency-Aware Methodology for LLM Infrastructure Cost Estimation," arXiv:2606.11690, June 2026.

At ordinary business-hours load, 1 to 10 requests per second, which is a realistic range for a mid-sized enterprise deployment, the underutilization penalty against a saturated fleet runs 2.5 to 24x. Near idle, the penalty climbs to as much as 36.3x. A cross-check on A100 80GB hardware reproduced the same load-driven spread at 7.0 to 11.4x, so this isn't an H100 artifact. It's a property of how GPU-based inference gets billed.

Every public LLM cost calculator you have ever used treats GPU utilization as a input you set once, usually left at whatever number makes the self-hosted number look good next to the API rate card. This paper's actual finding is that utilization isn't a setting. It's the whole story.

Why a busy GPU and an idle GPU bill the same hour differently

The mechanism is not exotic. You rent a GPU by the hour. That hour costs the same dollar amount whether the chip spends it fully batched across dozens of concurrent requests or sitting mostly idle waiting for the next one to arrive. The cost per output token is just that hourly rate divided by however many tokens the chip actually produced in that hour, and that number depends entirely on how many requests were in flight at once.

Little's Law gives the exact relationship: the average number of requests in a system equals the arrival rate multiplied by the average time each request spends being served. Applied to an inference fleet, the rate of requests an operator offers to their servers directly sets in-flight concurrency, concurrency sets batch size, and batch size sets GPU utilization. The paper formalizes this as an effective-cost function of hardware, model, quantization, request rate, and latency target, and shows that existing calculators, which fix utilization instead of deriving it from request rate, understate true cost by a factor that's exactly the inverse of that missing utilization term.

None of this is a criticism of any specific GPU vendor or serving stack. It's an argument that the number on a self-hosting cost calculator and the number on your actual invoice are two different measurements, and the gap between them is set by your traffic pattern, not your infrastructure choices.

Underutilization penalty vs. a saturated fleet on identical H100 hardware: a saturated fleet costs $0.21 per million output tokens (1x baseline), ordinary 1-10 requests-per-second enterprise load costs 2.5x to 24x that baseline, and a near-idle fleet costs up to 36.3x that baseline
Underutilization penalty vs. a saturated fleet on identical H100 hardware: a saturated fleet costs $0.21 per million output tokens (1x baseline), ordinary 1-10 requests-per-second enterprise load costs 2.5x to 24x that baseline, and a near-idle fleet costs up to 36.3x that baseline

The load you can't smooth away

The paper's numbers describe steady, sustained request rates. Real workloads rarely hold still at one rate for long, and agentic traffic is the worst-behaved kind there is. A support chatbot has a diurnal curve: busy during business hours, close to idle overnight. A coding agent has a product-driven curve on top of that: a team merges a big refactor and the fleet spikes, then nothing for six hours. Coding agents already burn 1,000x more tokens than chat per session, and none of that volume arrives on a schedule a capacity planner can smooth in advance.

A fleet has to be sized for the peak, or requests queue and latency SLAs break. Sizing for the peak means the fleet runs below that peak, meaning underutilized, for most of every day it operates. That's not a mistake anyone made. It's the tradeoff every capacity-planning discipline has always faced, just now priced in dollars per million tokens instead of hidden inside a GPU-hour line item nobody read closely. The same operational reality shows up in the classifier-hosting cost of running your own routing gateway: the hardware you provision for the worst hour is expensive for all the other hours too.

What this actually costs at a few traffic shapes

Modeled on the paper's reported multipliers, on identical hardware, holding the model and quantization fixed:

Fleet conditionEffective $/M output tokensMultiplier vs. saturated
Saturated, high steady RPS$0.211x (baseline)
Ordinary business-hours load, 1-10 RPS$0.53 to $5.042.5x to 24x
Near idle, overnight or off-peakup to $15.25up to 36.3x (paper's reported peak)

Two things worth sitting with. First, "ordinary business-hours load" isn't a stress case, it's the load level most self-hosted enterprise deployments actually run at most of the day. That's the range where the penalty is already 2.5x to 24x. Second, nobody targets near-idle on purpose, but every fleet passes through it every night and every weekend, and the paper's methodology counts that time the same as any other hour, because the GPU rental invoice does too.

Where a rate-card API sidesteps the whole problem

A hosted API provider doesn't have this problem, or more precisely, they have it and you don't. They pool request volume across every customer on the platform simultaneously, so the $/M-token number on the rate card reflects their fleet-wide utilization, not any single customer's traffic shape. A team calling the API at 1 request per second at 3am and a team sending a 200-request burst at 2pm both pay the same published rate, because the provider, not the customer, is the one managing the utilization curve underneath it. That pooling is a large part of what a rate card actually is: someone else absorbing exactly the variance this paper measured.

That reframes the self-host-versus-API decision. It was never purely a per-token price comparison between a GPU rental rate and an API rate card. It's a bet on whether your own traffic is steady and large enough to keep a self-hosted fleet close to saturated, which is exactly the condition under which self-hosting's per-token cost genuinely beats a hosted rate card. Most product traffic, and nearly all agentic traffic, isn't steady. It's spiky in ways that track user behavior, not server capacity.

This doesn't disappear if you self-host anyway

None of this is an argument against self-hosting. Teams with large, steady, predictable volume, batch pipelines, high-traffic internal tools, workloads that genuinely run near-saturated most of the day, are exactly who the paper's low end applies to, and for them self-hosting at $0.21/M tokens against a marked-up API rate is a real, durable win. The paper even ships the tool to go measure it: vllm-cost-meter, an open-source cost meter that attaches to a live vLLM server and reports the real dollars-per-million-tokens number your fleet is actually running at, not the one a spreadsheet assumed.

What the utilization math doesn't remove is the scheduling problem sitting on top of it. If part of your fleet is self-hosted and part of your traffic goes to hosted APIs, or if your self-hosted capacity varies by time of day, the question of which request goes where, right now, given current load, is still a routing decision. Nadir runs that decision layer either way: hosted, so your traffic gets priced against whichever provider's fleet is currently well-utilized instead of your own trough hours, or self-hosted and on-prem, routing across your own infrastructure so the requests that can wait land on the fleet that's already warm instead of spinning up idle capacity to meet them.

What to actually check before you trust a self-hosting estimate

Bottom line

The per-token price on a GPU cost calculator and the per-token price on your actual invoice are two different numbers, and the paper's contribution is showing exactly how far apart they can get: up to 72x on identical hardware, driven entirely by how busy the fleet is when a request lands. That's not a hardware problem or a model-choice problem. It's a traffic-shape problem, and most product traffic, agentic traffic especially, doesn't hold still long enough to keep a self-hosted fleet saturated. If your volume is steady and large, the low end of that range is real and worth capturing. If it isn't, the utilization tax is already priced into whoever's rate card you're comparing against, because pooling that variance across every customer is most of what a hosted rate card is for.

Start free and let routing handle which fleet, hosted or your own, gets each request while it's actually busy enough to be worth it.


Data in this post is illustrative, modeled on the multipliers and ranges reported in the cited paper, not derived from proprietary production traces. Sources: [Patil, "Beyond Per-Token Pricing: A Concurrency-Aware Methodology for LLM Infrastructure Cost Estimation," arXiv:2606.11690, June 10, 2026](https://arxiv.org/abs/2606.11690).

More on pricing & models

What Nadir is

Nadir is an LLM router. Nadir sizes every prompt and routes it to the cheapest model that still clears your quality bar. A small decision model reads each prompt against your model menu and picks the lowest-cost model it expects to handle it. When the decision model is uncertain or unavailable, the request goes to the strongest model on the menu. The routing step makes no call to your model provider.

Nadir runs two ways. The decision API returns a model, reasoning-effort, cache, context, and policy recommendation without calling a model provider, beside the gateway you already run. That is how a shadow-mode evaluation works, and its projected savings stay advisory. The OpenAI compatible managed proxy executes the route, and migration is a two-line change: point the base URL at api.getnadir.com and set model to auto. On that path an optional verifier can score a complete non-streaming answer and escalate to a stronger model when it misses the configured bar. Streaming bypasses post-generation verification. BYOK is supported on every tier.

For coding agents, Nadir Auto is a terminal launcher for Claude Code or Codex that asks Nadir for the main-session model before each turn, with your configured model as the fallback and cost ceiling. Delegation integrations for Claude Code, Codex, or Cursor instead recommend a model tier for subagent work, and the agent decides; the Claude plugin can also move a main-thread turn to Haiku when Nadir's cache check prices it cheaper, unless its switch_main_model option is off. Either way inference runs on your own provider account, so Nadir holds no provider keys on that path.

What the numbers are, and what they are not

Nadir publishes each evaluation with its scope. On checkable code, run-check-escalate solved 392 of 395 common HumanEval and MBPP problems (99.2%), graded by running the canonical tests; that applies only to tasks with runnable deterministic tests. Nadir-Tumbler posts an arena_score of 72.3 on RouterArena's public scorer, 5th of 23 routers, which measures the routing decision on RouterArena's own model pool. A reference-assisted RouterBench evaluation over 11,420 held-out triples produced a 60% lower projected cost than always-Opus with about 98% retained quality and a 1.7% catastrophic-route rate. That experiment gave the verifier the expensive-model reference answer, which production does not have, so it is a research ceiling and not the deployed path.

None of these is a production guarantee, a universal savings rate, or a forecast for any particular workload. Customer savings are reported from measured execution against a declared baseline, and customer quality only from outcome-labelled traffic. Projected savings and realized savings are separate artifacts and are never blended.

Design-partner program

Three rungs, picked by risk appetite. Rung 0 Shadow runs advisory decision calls alongside live traffic and returns a projected receipt, with nothing in the request path changed. Rung 1 Hosted is the two-line swap on a production slice and returns a realized receipt. Rung 2 On-prem is a supervised six-week proof of concept inside the partner's VPC, where no prompt, response, or usage reaches Nadir. The commitments are the same at every rung. Apply for a rung directly: Rung 0 Shadow, Rung 1 Hosted, or Rung 2 On-prem. Not sure which fits? Start at getnadir.com/contact/?reason=design-partner.

Licensing

NadirClaw is the self-hosted core, source-available under the PolyForm Noncommercial License. Source-available is the correct label; NadirClaw is not open source. Nadir Route's hosted plan has no base fee and charges a variable fee only on measured savings from requests Nadir executed.

Pages on this site

Machine-readable summaries of this site: llms.txt and llms-full.txt.