Open Source Continuous Inference Benchmark trusted by Operators of Trillion Dollar GigaWatt Scale Token Factories
As the world progresses exponentially towards AGI, software development and model releases move at the speed of light. Existing benchmarks rapidly become obsolete due to their static nature, and participants often submit software images purpose-built for the benchmark itself which do not reflect real world performance.
InferenceX™ (formerly InferenceMAX) is our independent, vendor neutral, reproducible benchmark which addresses these issues by continuously benchmarking inference software across a wide range of AI accelerators that are actually available to the ML community.
Our open data & insights are widely adopted by the ML community, capacity planning strategy teams at trillion dollar token factories & AI Labs & at multiple billion dollar NeoClouds. Learn more in our articles: InferenceX v1, InferenceX v2.
AgentX: How the Benchmark Works
AgentX measures inference the way a coding agent actually uses a model: long, multi-turn sessions with shared prefixes, pauses between turns, parallel subagents, and repeated KV-cache reuse. It is a scenario in AIPerf built around public agentic-coding traces and a fixed replay recipe, so results from different serving stacks can be compared on the same workload.
This FAQ explains the benchmark's operating model, the settings that protect comparability, and the deployment details most likely to affect a run.
What does AgentX measure?
Traditional load tests often send unrelated single-turn prompts at a fixed request rate. AgentX instead keeps a configurable number of complete session trees alive. A root coding conversation may spawn child conversations, wait for them, and resume after they finish. Each turn carries the accumulated message history, creating the long shared prefixes and bursty fan-out seen in real agent systems.
The prompt text is synthesized, but the workload shape comes from recorded sessions: input and output lengths, prefix-sharing relationships, subagent topology, and inter-turn timing. This preserves the parts that matter to schedulers, routers, and prefix caches without replaying private user content.
Where does the workload come from?
The scenario uses SemiAnalysis public Weka-format agentic-coding trace corpora. For reproducible comparisons, choose a date-pinned corpus rather than the rolling alias. A _256k variant removes individual requests above the 256K-token range and is the better match for servers with a context window around that size.
The short semianalysis_cc_traces_weka name is the legacy corpus without subagents. Use a dated corpus or a with_subagents alias when you want AgentX fan-out behavior.
What does the scenario lock?
Passing --scenario inferencex-agentx-mvp selects agentic replay and enforces the settings that define a comparable run:
- Streaming is enabled so time to first token (TTFT) and inter-token latency (ITL) can be measured.
- ignore_eos:true makes the server generate the requested output length instead of stopping early.
- Recorded per-turn delays remain intact; only globally idle time is capped at 10 seconds.
- first_turn_prefix cache busting gives every replayed conversation a unique first-turn marker, preventing artificial cross-session cache hits while retaining reuse inside a session.
- A valid run lasts at least 900 seconds; the default is 1,800 seconds.
- Warmup primes a deep prefix before profiling begins.
- A random seed is always present and recorded in the artifacts.
What is the minimal command?
Replace the URL, model, corpus, and concurrency with values for your deployment. AIPerf fills in the scenario defaults and writes results under ./artifacts/. Pin --random-seed for exact replay sampling and reconstructed-dataset cache reuse. Add --tokenizer when the served model name is not a resolvable Hugging Face tokenizer.
aiperf profile \
--scenario inferencex-agentx-mvp \
--url http://localhost:8000 \
--model YOUR_MODEL \
--endpoint-type chat \
--public-dataset semianalysis_cc_traces_weka_062126 \
--concurrency 256Why does AgentX use streaming chat completions?
The recorded workload is represented as multi-turn message arrays, which map naturally to an OpenAI-compatible chat-completions endpoint. Streaming exposes first-token and token-to-token timing; a non-streaming response cannot provide those core latency measurements.
--use-server-token-count changes only metric accounting. It trusts the server's usage fields when local tokenization differs because of a tokenizer revision or invisible chat-template overhead. It does not change prompt construction.
What does concurrency mean?
Concurrency is the number of live session trees, not the number of in-flight HTTP requests. A session can fan out into several child conversations, so instantaneous request concurrency may exceed the configured value.
There is intentionally no request-rate control in this scenario. Offered load is produced by the number of active sessions together with their recorded think times and fan-out patterns. This makes --concurrency the primary load dial.
Why can the first run take so long?
Before traffic starts, AIPerf downloads the corpus and reconstructs it into tokenized, cache-aware conversation trees. The result is stored in a memory-mapped disk cache. With the same corpus, tokenizer, reconstruction settings, entry count, and random seed, later runs can restore that prepared dataset in seconds.
For a cold run, raise both configuration timeouts together. The visible run then proceeds through dataset configuration, warmup, timed profiling, and drain/export. Benchmark duration covers only profiling, so total wall time is longer.
export AIPERF_DATASET_CONFIGURATION_TIMEOUT=1800
export AIPERF_SERVICE_PROFILE_CONFIGURE_TIMEOUT=1800Can I run a short smoke test?
A valid run cannot be shorter than 900 seconds. For a cheap but valid check, use low concurrency and keep the 900-second minimum. --num-dataset-entries reduces reconstruction work, but changes the workload and should not be used for a result you plan to compare or submit.
For a minutes-long connectivity test, use --unsafe-override with a short duration and accept the invalid stamp. Keeping the full corpus and pinning the random seed lets the subsequent valid run reuse the reconstructed dataset cache.
How do I know the load generator is not the bottleneck?
AIPerf distributes work across worker processes and reports worker health every two seconds. Treat the high-CPU warning as a saturation signal: add client cores or another load-generator host before trusting the result.
For deeper diagnosis, --show-trace-timing separates time waiting for a free pooled client connection from time waiting on the server's first byte. Healthy worker CPU and little connection-pool blocking are strong evidence that the measured limit is server-side.
Why do connection resets appear partway through a run?
Client and server keep-alive settings may disagree. If AIPerf retains an idle pooled connection longer than the server keeps it open, the client may reuse a closed socket. Set the client keep-alive below the server value. This often appears during paced profiling rather than warmup because warmup connections do not remain idle as long.
export AIPERF_HTTP_KEEPALIVE_TIMEOUT=4How should multi-replica routing work?
Conversation-aware routing is essential when a router fronts several replicas. If turns from one conversation land on different workers, prefix-cache reuse collapses and the benchmark measures routing scatter rather than the serving stack's cache capability.
AIPerf assigns a stable correlation ID to each conversation; subagents receive their own stable IDs. These controls are not scenario-locked because they change request placement rather than request content.
- Prefix-aware routing matches message history against cached prefixes. SGLang Model Gateway provides cache_aware; Dynamo provides KV-aware routing with --router-mode kv.
- Sticky routing maps the AIPerf correlation ID to a router session header. AIPerf supports SGLang's X-SMG-Routing-Key, Dynamo session headers, and a generic X-Session-ID integration.
Which metrics should I inspect?
AgentX reports TTFT, ITL, end-to-end latency, output throughput, and error rates alongside prefix-cache behavior, context overflow, session and subagent execution, worker saturation, and scenario compliance.
Always check submission_valid before comparing runs. Excessive context overflow, cancellation, unsafe overrides, or other scenario violations can invalidate an otherwise complete artifact.
Practical rules of thumb
- Match the corpus to the server's context window; prefer the _256k corpus for a roughly 256K server.
- Use date-pinned corpora and a pinned random seed for comparisons.
- Keep cache busting enabled. Disabling it inflates cache-hit results when traces recycle.
- Preserve recorded timing. Compressing individual trace delays changes cache-TTL behavior and session overlap.
- Monitor client CPU and connection-pool wait time before calling a result server-bound.
- Use conversation-aware routing for every multi-replica deployment.
- Do not interpret synthesized prompt prose; the benchmark preserves token and cache structure, not semantic content.
Credits and further reading
Adapted from the AIPerf AgentX documentation. The upstream source is maintained by NVIDIA and licensed under Apache-2.0.
AgentX is a SemiAnalysis InferenceX benchmark implemented with AIPerf. AIPerf's documentation and implementation are the authoritative references for the current CLI, scenario locks, environment variables, and artifact schema.
- SemiAnalysis AgentX: How the Benchmark Works (FAQ) — Nvidia AIPerf documentation
- AgentX MVP tutorial source — ai-dynamo/aiperf
- Nvidia AIPerf repository
Thanks to the AIPerf team for implementing and documenting the scenario, and to Callan Fox and Weka for the underlying agentic-coding trace work.
Reproducibility
Every data point on the dashboard is the output of a public GitHub Actions workflow run. The recipe, logs, artifacts, and the resulting database row are all linked end to end, so anyone can audit, rerun, or fork a benchmark.
- 1Recipe in repo. Every combination of hardware, framework, model, and precision is a shell script committed to the public repo. The exact image, command line, and parallelism are pinned in source.
- 2Run on real hardware. GitHub Actions schedules the workflow on the actual target accelerator (NVIDIA, AMD, etc.) and streams the full job log publicly while it runs.
- 3Artifacts uploaded. Request latencies, token counts, chip power telemetry, and evaluation samples are attached to the run page. GitHub Actions retains them for 90 days, and a weekly snapshot of the full benchmark database is published as a public GitHub Release for longer auditability.
- 4Ingested into the dashboard. Successful runs are loaded into the database and surfaced here. Every chart tooltip carries a direct link back to the GitHub Actions run that produced the point. Click any point to audit the source.
Frequently Asked Questions
- What is InferenceX?
InferenceX (formerly InferenceMAX) is an open-source, vendor-neutral benchmark that continuously measures AI inference performance across chips and software stacks. Benchmarks re-run whenever a configuration changes, so results stay current as models and frameworks evolve.
- Who is behind InferenceX?
InferenceX is built by SemiAnalysis, an independent semiconductor and AI research firm. It is supported and trusted by MiniMax, Moonshot Kimi, Alibaba Qwen, Zhipu GLM, OpenAI, Microsoft, Meta, Oracle, vLLM, GPU Mode, PyTorch, CoreWeave, TensorWave, SGLang, WEKA, Stanford, Hugging Face, Lambda, Red Hat, SambaNova, TileRT, Mooncake. The benchmark code, data, and dashboard are all open-source on GitHub.
- Which chips does InferenceX benchmark?
New accelerators are added as they become available.
- NVIDIA: H100, H200, B200, B300, GB200, GB300, RTX6000PRO
- AMD: MI300X, MI325X, MI355X
- Which AI models are tested?
Each model is tested across multiple sequence length configurations (1k/1k, 1k/8k, 8k/1k tokens) and concurrency levels.
- DeepSeek-R1-0528
- gpt-oss-120b
- Llama-3.3-70B-Instruct-FP8
- Qwen-3.5-397B-A17B
- Kimi-K2.5
- Kimi-K2.6
- Kimi-K2.7-Code
- Kimi-K3
- MiniMax-M2.5
- MiniMax-M2.7
- MiniMax-M3
- GLM-5
- GLM-5.1
- GLM-5.2
- DeepSeek-V4-Pro
- Which inference frameworks and configurations are tested?
- Frameworks: ATOM, Dynamo SGLang, Dynamo TRTLLM, Dynamo vLLM, llm-d vLLM, Mooncake ATOMesh, MoRI SGLang, SGLang, TileRT, TRTLLM, vLLM, MTP, AIPerf
- Precisions: FP4, FP8, BF16, INT4
- Runtimes: CUDA, ROCm
- Disaggregated serving (separate prefill/decode chip pools)
- Multi-token prediction (MTP)
- Wide expert parallelism for MoE models
- What metrics does InferenceX measure?
- Interactivity (tok/s/user)
- Token throughput per chip (tok/s/chip)
- Input and output throughput per chip
- Token throughput per MW (tok/s/MW)
- P99 time to first token (TTFT)
- Cost per million tokens (total, input, output) across hyperscaler, neocloud, and rental pricing
- Joules per token (total, input, output)
- Custom user-defined cost and power calculations
- How often are benchmarks run?
Benchmarks originally ran on a nightly schedule, but the number of hardware/framework/model combinations grew too large for that to be practical. Now they re-run when a configuration changes, e.g. a new software release, driver update, or model addition. Historical data is available in the dashboard.
- Is InferenceX open source?
Yes. Code, data, and dashboard are all open-source. SemiAnalysisAI/InferenceX
- How is InferenceX different from other AI benchmarks?
Most AI benchmarks are static, point-in-time measurements where participants submit purpose-built images that do not reflect real-world serving performance. InferenceX runs continuously on real hardware with fully reproducible configurations. Every recipe is in the repo, benchmark logs are visible on GitHub Actions, and all results are auditable end-to-end.
- How are results reproducible?
Every data point on the dashboard is produced by a public GitHub Actions workflow run. The recipe (model, framework, precision, parallelism, sequence length, concurrency) is committed to the repo, the run executes on the actual target hardware, and the resulting artifacts (logs, metrics, chip traces) are uploaded to the run page. Anyone can click through from a tooltip in any chart to the exact GitHub Actions run that produced that point.
- Where can I see the raw benchmark logs?
Click any data point on a chart to open its tooltip. The "GitHub Actions Run" link goes directly to the workflow run that produced it. From there you can inspect the full job logs, the exact framework and driver versions, command line arguments, and download the raw artifacts including request latencies, token counts, and chip power telemetry.
- Can I rerun a benchmark myself?
Yes. The benchmark recipes live in the /benchmarks directory of the repo as standalone shell scripts. If you have access to the same hardware, you can fork the repo and run the script directly, or trigger the same GitHub Actions workflow to reproduce a result.
- Are old runs preserved?
Yes. GitHub Actions retains workflow run logs and artifacts for 90 days. For longer auditability, we also publish a weekly snapshot of the full benchmark database as a public GitHub Release, so anyone can download the historical dataset and reproduce or reanalyze any chart in the dashboard.
- Can I use InferenceX data for my own analysis?
Yes. All data is freely available. The dashboard lets you filter by chip, model, framework, and date range, and you can export raw CSV data directly from any chart.