Each LLM deployment has a ceiling, a latency curve, and a unit price. Most groups function blindly, discovering their deployment limits solely when over-provisioning exhausts their GPU finances or peak site visitors causes a catastrophic failure.
Three numbers matter: most sustained concurrency earlier than GPU saturation, end-to-end latency at that concurrency, and value per million tokens at sustained load. These metrics emerge from how the mannequin interacts together with your {hardware}, runtime, tokenizer, and site visitors combine.
DataRobot 11.8 adjustments that with LLM Profiling Jobs: a local integration of NVIDIA AIPerf, the industry-standard generative AI benchmarking device. One authenticated POST benchmarks any DataRobot LLM deployment serving an OpenAI-compatible internet server, sweeps the concurrency vary and use instances you outline, and returns the empirical inputs to Quota Reservations (obtainable in DataRobot 11.9).
Why LLM capability is tough to foretell
LLM inference doesn’t scale linearly. Compute and reminiscence calls for per request rely dynamically on immediate size, response size, sampling parameters, and KV cache utilization.A deployment that serves 50 quick chat turns per second can stall at 5 long-context RAG requests per second on the identical {hardware}. 4 distinct behaviors make static or speculative capability estimates unreliable:
- Latency is non-linear in concurrency. Time to first token and inter-token latency keep roughly flat throughout a large concurrency vary, then rise sharply as soon as GPU reminiscence bandwidth or compute saturates. TTFT rises when prefill compute saturates; inter-token latency rises when decode reminiscence bandwidth saturates. Which one bites first is determined by the workload combine and the deployment’s GPU configuration (single card or a cluster). The saturation knee is the working level that issues, and it may’t be inferred from a single low-load measurement.
- Throughput and latency commerce off. You’ll be able to squeeze extra whole tokens per second out of a deployment by working it at increased concurrency, at the price of slower per-user response. The proper trade-off is determined by your SLO, not on a generic suggestion.
- Use case combine issues. Two deployments working the identical mannequin on the identical {hardware} can have very totally different capability if one serves quick Q&A and the opposite serves long-context summarization. The combination must be within the take a look at, or the take a look at is mistaken.
- Caching and routing change the reply. Prefix caching (frequent in agentic coding with periodic compaction) and KV-aware routing can elevate efficient throughput dramatically. Profiles run towards a chilly deployment with random inputs signify the ground, not the ceiling.
LLM Profiling Jobs make these curves seen.
How LLM benchmarks assist
- Defend capability and quota choices with measured knowledge. When finance questions a four-H100 footprint, or when cross-functional groups negotiate shared capability, you possibly can justify the structure with empirical profiling knowledge. Saturation knee, SLO goal, and forecast site visitors make GPU sizing an evidence-based line merchandise. The identical numbers feed Quota Reservations immediately.
- Account for price per shopper. Complete token throughput plus the GPU occasion price provides a cost-per-million-tokens determine that helps chargeback or showback. Attribute spend to shoppers proportionally to their reservations, not by guesswork.
- Examine fashions and {hardware} on equal phrases. Maintain the workload profile fixed and differ one dimension at a time: the identical mannequin on totally different GPU configurations (a B200 node vs a B300 node, or 4×H100 vs 8×H100), or totally different fashions on the identical configuration (Qwen3.6 35B-A3B MoE vs Qwen3.6 27B dense). As a result of AIPerf metrics match NVIDIA’s revealed NIM benchmarks, the numbers are additionally immediately akin to public benchmarks for a similar mannequin and {hardware} mixtures. The proper enter for procurement and capacity-sizing choices earlier than a {hardware} order.
- Show a change is protected earlier than you ship it. Earlier than a mannequin improve, vLLM bump, driver swap, or GPU migration, rerun the identical profile and evaluate towards the prior baseline. Regressions present up within the metrics, not in incident experiences.
What LLM benchmark metrics imply
The 4 headline metrics AIPerf returns map on to person expertise and to GPU economics:
- Time to first token (TTFT, ms). Measures how lengthy a person waits between submitting a immediate and seeing the primary character; this metric is dominated by prefill compute.
- Inter-token latency (ITL, ms). Common time between successive output tokens as soon as era has began. Units the perceived “typing pace” of the response.
- Request throughput (requests/sec). Full request-and-response cycles per second on the examined concurrency. The premise for the Capability (RPM) worth on Quota Reservations.
- Complete token throughput (tokens/sec). Complete tokens (enter plus output) processed per second throughout all concurrent requests. The premise for cost-per-token economics.
For every metric, AIPerf experiences averages and percentiles (p50, p90, p99). When GPU saturation is detected through the sweep, estimatedCapacity experiences the iteration instantly earlier than it. When saturation isn’t detected (the frequent case, for the reason that profiler isn’t co-located with the deployment), estimatedCapacity experiences the final iteration examined. Sweep large sufficient that the curve clearly bends, or deal with the consequence as a decrease certain.
Submitting a job
A profiling request takes 4 parameters: a deploymentId (the ID of the DataRobot LLM deployment you need to profile), an inventory of concurrency ranges to comb, a request rely scalar (what number of requests every concurrent employee points), and a number of use instances. Every use case defines an enter sequence size (ISL), an output sequence size (OSL), customary deviations for each, and a weight (prob). Weights throughout all use instances should sum to 100.
export DATAROBOT_ENDPOINT="https://app.datarobot.com"
export DR_API_KEY=""
export HUGGINGFACE_DR_CRED_ID=""
export DEPLOYMENT_ID=""
export CONCURRENCIES="[1,10,50,100]"
export REQUEST_COUNT_SCALAR=2
export MODEL_TOKENIZER="openai/gpt-oss-20b"
export USE_CASES='[{"isl":200,"islStddev":15,"osl":1000,"oslStddev":15,"prob":100}]'
curl -X POST -H "Authorization: Bearer ${DR_API_KEY}"
-H "Content material-Sort: software/json"
"${DATAROBOT_ENDPOINT}/api/v2/llmProfilingJobs/"
-d @- <
A 202 Accepted response returns the job ID, an execution ID, and a standing ID:
{
"id": "69e09f9e25fdfdfab0d27925",
"jobExecutionId": "69e09f9f25fdfdfab0d27926",
"statusId": "5633f028-3f68-4f83-bddc-560d266d6bd2"
}
Monitoring and retrieving LMM benchmark outcomes
Ballot the Standing API with the returned statusId. When the job finishes, the API returns 303 See Different and the Location header factors to the outcomes endpoint:
curl -s -L -i
-H "Authorization: Bearer ${DR_API_KEY}"
"${DATAROBOT_ENDPOINT}/api/v2/standing/${STATUS_ID}/"
Fetch the total outcomes with the profiling job id:
curl -H "Authorization: Bearer ${DR_API_KEY}"
"${DATAROBOT_ENDPOINT}/api/v2/llmProfilingJobs/${LLM_PROFILING_JOB_ID}/profilingResults/"
Instance payload (truncated):
{
"estimatedCapacity": {
"metrics": [
{ "name": "request_throughput", "units": "requests/sec", "measurements": [{ "name": "avg", "value": 8.84 }] },
{ "title": "inter_token_latency", "models": "ms", "measurements": [{ "name": "avg", "value": 23.79 }] },
{ "title": "time_to_first_token", "models": "ms", "measurements": [{ "name": "avg", "value": 833.06 }] },
{ "title": "total_token_throughput", "models": "tokens/sec", "measurements": [{ "name": "avg", "value": 4524.80 }] }
]
},
"outcomes": [ "...per-iteration benchmark data..." ]
}
estimatedCapacity is the sustained working level. outcomes incorporates one entry per concurrency stage examined, with the total metric set.
Studying the curve
The estimated-capacity numbers inform you the sustained ceiling. The per-iteration outcomes present you the way the deployment behaves as load climbs towards that ceiling. The desk under is an illustrative instance.
| Concurrent requests | TTFT (ms) | Complete throughput (tokens/sec) | Be aware |
|---|---|---|---|
| 1 | ~150 | ~600 | Low load, near-floor latency |
| 10 | ~250 | ~2,500 | Throughput scales almost linearly |
| 50 | ~800 | ~4,500 | estimatedCapacity returned from this iteration |
| 100 | ~1,500 | ~4,600 | Saturated: TTFT roughly doubles, throughput plateaus |
When AIPerf detects GPU saturation through the sweep, it identifies the iteration earlier than it (concurrency 50 right here) and returns these metrics as estimatedCapacity. When saturation isn’t detected, estimatedCapacity is solely the final iteration examined, which is why the sweep wants to increase previous the knee. Something previous that time trades user-perceived latency for marginal throughput positive aspects. If the product spec requires TTFT beneath 1 second, the curve exhibits the deployment helps as much as roughly 50 concurrent requests with margin: provision GPU so peak concurrent demand stays at or under that stage.
From profiling consequence to Quota Reservations config
The bridge from a profiling run to a Quota Reservations configuration is direct:
| Quota setting | The place it comes from | Instance (from pattern above) |
|---|---|---|
| Capability (RPM) | estimatedCapacity.request_throughput × 60 |
8.84 req/sec × 60 ≈ 530 RPM |
| Utilization Threshold | Choose 70–80% of Capability so enforcement engages earlier than the saturation knee | 80% → enforcement at ~424 RPM |
| Reserved % per shopper | Sized to the minimal every precedence shopper wants throughout rivalry | 30% Manufacturing Agent A, 20% Agent B, 30% Agent C, 20% unreserved pool |
| Refill price | Capability / 60 (requests per second) | 530 / 60 ≈ 8.83 req/sec |
For a primer on how Capability, Utilization Threshold, and Reserved % work together beneath load, see Charge Limiting vs. Quota Reservations.
A labored price instance
Take the pattern consequence: 4,524 whole tokens per second sustained (enter plus output). That’s roughly 16.3 million tokens per hour from one deployment.
If the underlying GPU occasion prices $X per hour, the associated fee per million tokens is $X / 16.3. For an occasion at $4 per hour, that’s about $0.25 per million tokens. For $12 per hour, about $0.74. To calculate price per million output tokens—the usual benchmark for public API comparisons—divide the full price by the workload’s output share. For instance, given an ISL of 200 and an OSL of 1000, output accounts for roughly 83% of whole tokens. At a $4 hourly occasion value, this interprets to roughly $0.30 per million output tokens.
Each benchmark run provides you a contemporary, correct cost-per-token determine for the precise mannequin, {hardware}, and quantization mixture you’re working. After a vLLM improve or a {hardware} swap, re-run the identical profile and make sure your unit economics improved as a substitute of trusting a vendor declare. That is the inspiration for per-token and per-agent price transparency in chargeback.
Selecting your inputs
A helpful profile begins with two questions: what concurrency vary do you anticipate in manufacturing, and what does your site visitors truly appear to be?
- Concurrencies to comb. Begin large (
[1, 10, 50, 100]) to find the saturation knee, then slim (corresponding to[40, 50, 60, 70]) for an SLO-grade studying round that time. - Request rely scalar. Set it excessive sufficient that every iteration runs lengthy sufficient to easy out noise. A scalar of two is an inexpensive start line. Increase it if variance appears excessive.
- Use instances. Match your actual site visitors combine. When you serve 70% quick chat turns (ISL 200, OSL 300) and 30% long-context RAG (ISL 4000, OSL 800), outline two use instances with
prob: 70andprob: 30. Testing a blended site visitors combine exposes tail-latency conduct (corresponding to p99 spikes) {that a} single-use-case common obscures. - Tokenizer. Set it explicitly. The benchmark is determined by correct token counts, so the matching tokenizer is a part of an accurate measurement.
Operational notes
- Profiling generates artificial load. Run jobs towards a non-production LLM deployment or throughout a upkeep window.
- As a result of the site visitors is artificial, prefill cache hits gained’t seem in token metrics.
- Profiling treats the deployment as a black field. Whether or not the deployment runs on one GPU or many, and no matter mixture of tensor, pipeline, knowledge, or skilled parallelism it makes use of, the profile measures the externally observable consequence.
- Jobs will be canceled with a
DELETEto the profiling job ID. Cancellation is best-effort and will not cease a run that’s almost full. - Earlier than you submit, retailer your Hugging Face token in DataRobot Credential Administration as an “API Token (API Key)” credential. AIPerf makes use of it to fetch the mannequin tokenizer, and the saved credential prevents rate-limit errors.
Get entry
LLM Profiling Jobs are in personal preview in DataRobot 11.8. To allow in your tenant, contact your DataRobot account staff. They’ll activate the Allow Dynamic Quota Capability Profiling function flag (the inner title for LLM Profiling Jobs) and configure the profiling job picture in your cluster.
