Skip to main content

InferenceX Benchmark

InferenceX is a third-party LLM serving benchmark tool integrated into Metrum Insights. It follows a SemiAnalysis-style synthetic serving methodology that focuses on GPU-normalized throughput and advanced serving architecture metrics like disaggregated prefill/decode, expert parallelism, and multi-node configurations.

Unlike metrumbench-llm, which uses real prompts from a prompt library and measures TTFT/TPOT at the HTTP client level, InferenceX generates synthetic workloads with fixed input/output token distributions and reports metrics normalized per GPU. This makes it useful for hardware-to-hardware comparisons and for evaluating advanced parallelism strategies.


When to Use InferenceX

Use InferenceX when you need to:

  • Compare raw GPU serving throughput across different hardware configurations
  • Evaluate advanced serving architectures: disaggregated prefill/decode, expert parallelism, tensor parallelism, data-parallel attention
  • Benchmark multi-node inference setups
  • Produce results in a format that aligns with SemiAnalysis-style industry benchmarks
  • Measure per-GPU efficiency rather than aggregate endpoint throughput

Use metrumbench-llm instead when you need real-prompt workloads, streaming TTFT/TPOT at the HTTP client level, prompt library integration, or ramp-up steady-state analysis.


How It Works

Workload Generation

InferenceX generates synthetic chat workloads with configurable input and output token length distributions. Rather than sending real text prompts, it uses controlled synthetic token sequences that produce predictable, repeatable load patterns. This removes prompt variability from the measurement, making it easier to isolate hardware and framework performance differences.

Key parameters that define the synthetic workload:

ParameterWhat it controls
ISL (Input Sequence Length)Number of input tokens per request
OSL (Output Sequence Length)Number of output tokens generated per request
ConcurrencyNumber of simultaneous in-flight requests

Execution

InferenceX is daemon-managed. The agent daemon:

  1. Clones the pinned upstream InferenceX checkout under {work_dir}/inferencex/{version} and creates a shared venv.
  2. Launches upstream utils/bench_serving/benchmark_serving.py as a subprocess with cwd=checkout_root and the venv on PATH / VIRTUAL_ENV / PYTHONPATH.
  3. Rewrites daemon-owned result_dir / result_filename job params from /workspace/... to the agent logs directory (same pattern as metrumbench-llm data_log).
  4. After the job finishes, runs upstream process_result.py and POSTs the aggregate metrics to ingest_inferencex_results.

Users configure only the synthetic workload shape: model, concurrency, input_sequence_length, output_sequence_length, num_requests, random_range_ratio. Everything else (tool version, server config, paths, env vars) is derived from the control plane or set by the daemon.

The tool targets OpenAI-compatible chat completion endpoints, the same endpoints used by metrumbench-llm and metrumbench-vlm.

Results Ingestion

Results are ingested into the database through the ingest_inferencex_results RPC function. This is a single atomic call that:

  1. Validates that the job exists and belongs to the InferenceX tool.
  2. Checks that the caller has access to the project.
  3. Creates a tool invocation record with the benchmark dimensions.
  4. Stores the output metrics in typed columns.
  5. Marks the job as completed.

What Gets Measured

Throughput Metrics (Per GPU)

InferenceX normalizes all throughput metrics by GPU count, which makes cross-hardware comparisons straightforward.

MetricDefinition
Tokens Per GPUTotal tokens (input + output) processed per second per GPU
Output Tokens Per GPUOutput tokens generated per second per GPU
Input Tokens Per GPUInput tokens processed per second per GPU

Latency Metrics

InferenceX reports four latency metrics. Each one is captured as a fan-out of percentiles so the head and the tail are both visible.

Metric GroupWhat it measuresReported percentiles
TTFT (Time to First Token)Wall-clock from request arrival to the first output token. Captures prefill and queueing.Mean, median, P90, P99, P99.9
TPOT (Time Per Output Token)Average time between output tokens after the first. Captures steady-state generation speed.Mean, median, P90, P99, P99.9
E2EL (End-to-End Latency)Total request latency from arrival to final response.Mean, median, P90, P99, P99.9
Interactivity (ITL)User-perceived tokens per second: 1000 / TPOT. Complements TPOT for interactivity studies.Mean, median, plus values at TPOT P90, P99, and P99.9 thresholds

The full column list in v_inferencex_outputs is listed in How Results Appear.

Benchmark Dimensions

Each InferenceX run records the full configuration so that results are reproducible and comparable:

DimensionWhat it records
HardwareGPU/accelerator type used
FrameworkServing framework (vLLM, SGLang, TensorRT-LLM, etc.)
Inference PrecisionData type used for inference (FP16, BF16, FP8, INT8)
Speculative DecodingWhether speculative decoding was enabled and what kind
ISL / OSL / ConcurrencyThe traffic shape used for the benchmark
Tensor Parallelism (TP)Number of GPUs used for tensor parallelism
Expert Parallelism (EP)Number of GPUs used for expert parallelism (MoE models)
DP AttentionData-parallel attention configuration
DisaggregatedWhether prefill and decode run on separate GPU groups
Multi-nodeWhether the benchmark spans multiple physical nodes
Container ImageThe exact container image used for the model server
Model IDThe model identifier being served

Disaggregated Prefill/Decode Dimensions

For advanced serving architectures that separate prefill and decode onto different GPU groups, InferenceX records additional dimensions:

DimensionWhat it records
Prefill GPU CountNumber of GPUs dedicated to prefill
Decode GPU CountNumber of GPUs dedicated to decode
Prefill TP / EPTensor and expert parallelism for the prefill group
Decode TP / EPTensor and expert parallelism for the decode group
Prefill WorkersNumber of prefill worker processes
Decode WorkersNumber of decode worker processes
Prefill DP AttentionData-parallel attention config for prefill
Decode DP AttentionData-parallel attention config for decode

System Metrics (Hardware Telemetry)

InferenceX runs collect the same hardware telemetry as all other Metrum Insights benchmark workloads. The platform captures system-level metrics from the host during the run so benchmark tool numbers can be interpreted in the context of what the hardware was doing.

What Gets Collected

Telemetry is sampled as a time series throughout the benchmark run.

GPU Metrics (per GPU):

MetricUnitDescription
GPU PowerWattsPower consumption of each GPU during the run
GPU Memory UsedBytesGPU memory actively in use at sample time
GPU Memory TotalBytesTotal GPU memory capacity
GPU Utilization0.0 to 1.0Fraction of GPU compute cycles actively used

On multi-GPU servers, each GPU is tracked independently using a GPU index (0, 1, 2, ...). This identifies load imbalances across GPUs.

CPU Metrics (per CPU socket):

MetricUnitDescription
CPU Utilization0.0 to 1.0Fraction of CPU cycles actively used

System-wide Metrics:

MetricUnitDescription
System RAM UsedBytesHost memory currently in use
System RAM TotalBytesTotal host memory capacity
System PowerWattsTotal system power draw (when available)

Aggregated Views

  • v_telemetry_job_summary - one row per job with sample count, GPU count, average and max GPU power, average GPU utilization, average and max GPU memory percentage, average CPU utilization, and average system RAM percentage.
  • v_telemetry_per_gpu_summary - one row per GPU per job for multi-GPU analysis: average, max, and min GPU power; average and max GPU utilization; average and max GPU memory usage per GPU.
  • v_job_with_telemetry - benchmark jobs joined with their telemetry summaries for a single view of model, framework, status, and resource utilization.

Why System Metrics Matter for InferenceX

System metrics are especially important for interpreting InferenceX results because the tool generates synthetic fixed-length load that pushes hardware to a steady state. The telemetry reveals whether that steady state is limited by compute, memory, or power:

QuestionHow to answer
Is the GPU saturated at this concurrency?GPU utilization near 100% with the target ISL/OSL means compute-bound. Below 50% at high concurrency suggests a CPU, network, or memory bottleneck.
Is the model close to the GPU memory limit?GPU memory percentage shows how much headroom remains before OOM.
Is power delivery the bottleneck?GPU power flat at TDP indicates thermal or power capping.
Is load balanced across GPUs?Per-GPU utilization and power trends from v_telemetry_per_gpu_summary.
Did the GPU throttle during a benchmark?Power oscillation or a sustained drop in utilization with no change in concurrency suggests throttling.

Availability

System metrics are available when the Metrum agent runs on the same host as the model server, which is the normal case for InferenceX. The agent uses NVML for NVIDIA GPU metrics and standard OS interfaces for CPU and system metrics. Full collection details are in the Performance Methodology.


How Results Appear

InferenceX results are available through v_inferencex_outputs and the unified v_benchmark_results view.

v_inferencex_outputs

A SQL view that joins output metrics with tool invocation and job IDs. Every column is prefixed with ix_ so InferenceX metrics stay distinct when joined with other tool results:

Throughput:

ColumnUnitDefinition
ix_tokens_per_secondtokens/sAggregate total tokens processed per second (input + output, all GPUs). Restored from per-GPU storage by multiplying back the tensor-parallel size.
ix_output_tput_per_gputokens/s/GPUOutput tokens generated per second per GPU
ix_input_tput_per_gputokens/s/GPUInput tokens processed per second per GPU

TTFT (Time to First Token):

ColumnUnitDefinition
ix_time_to_first_token_msmsMean TTFT across all requests
ix_ttft_median_msmsMedian TTFT
ix_ttft_p90_msmsP90 TTFT
ix_ttft_p99_msmsP99 TTFT
ix_ttft_p99_9_msmsP99.9 TTFT
ix_p99_ttft_ssP99 TTFT in seconds (same value as ix_ttft_p99_ms, different unit)

TPOT (Time Per Output Token):

ColumnUnitDefinition
ix_mean_tpot_msmsMean TPOT across all requests
ix_tpot_median_msmsMedian TPOT
ix_tpot_p90_msmsP90 TPOT
ix_tpot_p99_msmsP99 TPOT
ix_tpot_p99_9_msmsP99.9 TPOT

E2EL (End-to-End Latency):

ColumnUnitDefinition
ix_mean_e2el_ssMean end-to-end request latency
ix_e2el_median_ssMedian end-to-end request latency
ix_e2el_p90_ssP90 end-to-end request latency
ix_e2el_p99_ssP99 end-to-end request latency
ix_e2el_p99_9_ssP99.9 end-to-end request latency

Interactivity (ITL: Interactive Tokens per Second):

ColumnUnitDefinition
ix_mean_interactivity_tpstok/s/userMean interactivity = 1000 / mean_tpot_ms
ix_intvty_median_tpstok/s/userMedian interactivity = 1000 / median_tpot_ms
ix_intvty_at_p90_tpot_tpstok/s/userInteractivity computed at the TPOT P90 threshold
ix_intvty_at_p99_tpot_tpstok/s/userInteractivity computed at the TPOT P99 threshold
ix_intvty_at_p99_9_tpot_tpstok/s/userInteractivity computed at the TPOT P99.9 threshold

v_benchmark_results

The unified project dashboard view includes all InferenceX columns alongside metrumbench-llm and metrumbench-vlm results. All tools can be compared in one query or export.


Comparison With Other Tools

Aspectmetrumbench-llmInferenceX
WorkloadReal prompts from a prompt librarySynthetic fixed-length token sequences
Throughput unitTokens per second (aggregate)Tokens per second per GPU
TTFT measurementClient-side SSE stream timingReported from tool output
Prompt controlFull prompt library with ISL/OSL targetingSynthetic token distributions
Ramp-upSupported (gradual concurrency increase)Not applicable
StreamingSupported (SSE with chunk-level timing)Depends on tool configuration
Disaggregated servingNot recordedFull prefill/decode GPU breakdown
Multi-nodeNot explicitly recordedRecorded as a dimension
Word metricsPrompt and completion word countsNot applicable
Best forReal-world serving performance with prompt diversityHardware efficiency, GPU-normalized cross-platform comparison