Each LLM deployment has a ceiling, a latency curve, and a unit value. Most groups function blindly, discovering their deployment limits solely when over-provisioning exhausts their GPU price range or peak 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 visitors combine.
DataRobot 11.8 modifications 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 net server, sweeps the concurrency vary and use instances you outline, and returns the empirical inputs to Quota Reservations (out there in DataRobot 11.9).
Why LLM capability is difficult 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 depends upon 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 could’t be inferred from a single low-load measurement.
- Throughput and latency commerce off. You possibly can squeeze extra complete tokens per second out of a deployment by operating it at increased concurrency, at the price of slower per-user response. The suitable trade-off depends upon your SLO, not on a generic suggestion.
- Use case combine issues. Two deployments operating the identical mannequin on the identical {hardware} can have very completely different capability if one serves quick Q&A and the opposite serves long-context summarization. The combination must be within the check, or the check is fallacious.
- Caching and routing change the reply. Prefix caching (widespread in agentic coding with periodic compaction) and KV-aware routing can raise efficient throughput dramatically. Profiles run in opposition to a chilly deployment with random inputs characterize 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 may justify the structure with empirical profiling knowledge. Saturation knee, SLO goal, and forecast visitors make GPU sizing an evidence-based line merchandise. The identical numbers feed Quota Reservations instantly.
- Account for value per client. Complete token throughput plus the GPU occasion value offers a cost-per-million-tokens determine that helps chargeback or showback. Attribute spend to customers proportionally to their reservations, not by guesswork.
- Examine fashions and {hardware} on equal phrases. Maintain the workload profile fixed and range one dimension at a time: the identical mannequin on completely different GPU configurations (a B200 node vs a B300 node, or 4×H100 vs 8×H100), or completely 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 instantly akin to public benchmarks for a similar mannequin and {hardware} combos. The suitable 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 examine in opposition to the prior baseline. Regressions present up within the metrics, not in incident stories.
What LLM benchmark metrics imply
The 4 headline metrics AIPerf returns map on to consumer expertise and to GPU economics:
- Time to first token (TTFT, ms). Measures how lengthy a consumer 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 technology has began. Units the perceived “typing velocity” 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 stories averages and percentiles (p50, p90, p99). When GPU saturation is detected through the sweep, estimatedCapacity stories the iteration instantly earlier than it. When saturation isn’t detected (the widespread case, for the reason that profiler isn’t co-located with the deployment), estimatedCapacity stories the final iteration examined. Sweep vast sufficient that the curve clearly bends, or deal with the outcome as a decrease sure.
Submitting a job
A profiling request takes 4 parameters: a deploymentId (the ID of the DataRobot LLM deployment you need to profile), a listing 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), commonplace 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-Kind: utility/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 }] },
{ "identify": "inter_token_latency", "models": "ms", "measurements": [{ "name": "avg", "value": 23.79 }] },
{ "identify": "time_to_first_token", "models": "ms", "measurements": [{ "name": "avg", "value": 833.06 }] },
{ "identify": "total_token_throughput", "models": "tokens/sec", "measurements": [{ "name": "avg", "value": 4524.80 }] }
]
},
"outcomes": [ "...per-iteration benchmark data..." ]
}
estimatedCapacity is the sustained working level. outcomes comprises 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 beneath is an illustrative instance.
| Concurrent requests | TTFT (ms) | Complete throughput (tokens/sec) | Word |
|---|---|---|---|
| 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 good points. 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 beneath that stage.
From profiling outcome 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 | Decide 70–80% of Capability so enforcement engages earlier than the saturation knee | 80% → enforcement at ~424 RPM |
| Reserved % per client | Sized to the minimal every precedence client 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 Price Limiting vs. Quota Reservations.
A labored value instance
Take the pattern outcome: 4,524 complete 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 price 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 value per million output tokens—the usual benchmark for public API comparisons—divide the entire value by the workload’s output share. For instance, given an ISL of 200 and an OSL of 1000, output accounts for roughly 83% of complete tokens. At a $4 hourly occasion worth, this interprets to roughly $0.30 per million output tokens.
Each benchmark run offers you a recent, correct cost-per-token determine for the precise mannequin, {hardware}, and quantization mixture you’re operating. After a vLLM improve or a {hardware} swap, re-run the identical profile and ensure your unit economics improved as an alternative of trusting a vendor declare. That is the inspiration for per-token and per-agent value transparency in chargeback.
Selecting your inputs
A helpful profile begins with two questions: what concurrency vary do you count on in manufacturing, and what does your visitors truly appear like?
- Concurrencies to comb. Begin vast (
[1, 10, 50, 100]) to find the saturation knee, then slender (comparable 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. Elevate it if variance appears excessive.
- Use instances. Match your actual visitors combine. For those who 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 visitors combine exposes tail-latency conduct (comparable to p99 spikes) {that a} single-use-case common obscures. - Tokenizer. Set it explicitly. The benchmark depends upon correct token counts, so the matching tokenizer is a part of an accurate measurement.
Operational notes
- Profiling generates artificial load. Run jobs in opposition to a non-production LLM deployment or throughout a upkeep window.
- As a result of the 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 professional parallelism it makes use of, the profile measures the externally observable outcome.
- Jobs might be canceled with a
DELETEto the profiling job ID. Cancellation is best-effort and should 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 non-public preview in DataRobot 11.8. To allow in your tenant, contact your DataRobot account crew. They are going to activate the Allow Dynamic Quota Capability Profiling function flag (the interior identify for LLM Profiling Jobs) and configure the profiling job picture in your cluster.
