Inference Perf is a production-scale GenAI inference performance benchmarking tool that allows you to benchmark and analyze the performance of inference deployments. It is agnostic of model servers and can be used to measure performance and compare different systems apples-to-apples.
It was founded as a part of the inference benchmarking and metrics standardization effort in wg-serving to standardize the benchmark tooling and the metrics used to measure inference performance across the Kubernetes and model server communities.

Install inference-perf:
pip install inference-perf
Run a benchmark with a simple random workload:
inference-perf --server.type vllm --server.base_url http://localhost:8000 --data.type random --load.type constant --load.stages '[{"rate": 10, "duration": 60}]' --api.streaming true
Alternatively, you can run using a configuration file:
inference-perf --config_file config.yml
When you run inference-perf, it displays a rich summary table in the CLI:

docker run -it --rm -v $(pwd)/config.yml:/workspace/config.yml quay.io/inference-perf/inference-perf
Refer to the guide in /deploy.
Explore detailed documentation for specific topics:
| Topic | Description | Link |
|---|---|---|
| Configuration | Full YAML configuration schema and options. | config.md |
| CLI Flags | All command line flags: global options and configuration overrides. | cli_flags.md |
| Load Generation | Detailed explanation of load patterns and multi-worker setup. | loadgen.md |
| Collected Metrics | Definitions of TTFT, TPOT, ITL, etc. | metrics.md |
| Emitted Metrics | Prometheus metrics inference-perf exports about its own runtime. | runtime_metrics.md |
| Comparability | Configuring runs that are comparable with other benchmarking tools. | comparability.md |
| Goodput | How to measure requests meeting SLOs. | goodput.md |
| Reports | Understanding generated JSON reports. | reports.md |
| OTel Observability | Instrument benchmark runs with OpenTelemetry tracing to export to Jaeger, Tempo, etc. | otel_instrumentation.md |
| OTel Trace Replay | Data/load type for replaying production traces with complex dependency graphs. | otel_trace_replay.md |
| Synthetic Agentic (implementation in progress) | Data/load type for generating agentic workloads (tool loops, sub-agent fan-out, context growth) procedurally, without a recorded trace. | synthetic_agentic.md |
| Weka Trace Replay | Data/load type for replaying raw Weka agent traces via graph-based session execution. | weka_trace_replay.md |
| Conversation Replay | Data/load type for benchmarking concurrent multi-turn agentic conversations with configurable distributions. | conversation_replay.md |
| BR0.2 Reports | Always-emitted llm-d-benchmark BR0.2 partial per stage; designed for clean yq-merge with other producers. | br_v0_2.md |
| Analysis | Visualizations and plots for performance metrics. | analysis.md |
| E2E Tests | Contributor guide to the end-to-end test tier: running and extending it. | e2e_tests.md |
We welcome contributions! Please join us:
See CONTRIBUTING.md for details on how to get started.
(top 30 of 62)
Python
99.3%
Inference Perf is a production-scale GenAI inference performance benchmarking tool that allows you to benchmark and analyze the performance of inference deployments. It is agnostic of model servers and can be used to measure performance and compare different systems apples-to-apples.
It was founded as a part of the inference benchmarking and metrics standardization effort in wg-serving to standardize the benchmark tooling and the metrics used to measure inference performance across the Kubernetes and model server communities.

Install inference-perf:
pip install inference-perf
Run a benchmark with a simple random workload:
inference-perf --server.type vllm --server.base_url http://localhost:8000 --data.type random --load.type constant --load.stages '[{"rate": 10, "duration": 60}]' --api.streaming true
Alternatively, you can run using a configuration file:
inference-perf --config_file config.yml
When you run inference-perf, it displays a rich summary table in the CLI:

docker run -it --rm -v $(pwd)/config.yml:/workspace/config.yml quay.io/inference-perf/inference-perf
Refer to the guide in /deploy.
Explore detailed documentation for specific topics:
| Topic | Description | Link |
|---|---|---|
| Configuration | Full YAML configuration schema and options. | config.md |
| CLI Flags | All command line flags: global options and configuration overrides. | cli_flags.md |
| Load Generation | Detailed explanation of load patterns and multi-worker setup. | loadgen.md |
| Collected Metrics | Definitions of TTFT, TPOT, ITL, etc. | metrics.md |
| Emitted Metrics | Prometheus metrics inference-perf exports about its own runtime. | runtime_metrics.md |
| Comparability | Configuring runs that are comparable with other benchmarking tools. | comparability.md |
| Goodput | How to measure requests meeting SLOs. | goodput.md |
| Reports | Understanding generated JSON reports. | reports.md |
| OTel Observability | Instrument benchmark runs with OpenTelemetry tracing to export to Jaeger, Tempo, etc. | otel_instrumentation.md |
| OTel Trace Replay | Data/load type for replaying production traces with complex dependency graphs. | otel_trace_replay.md |
| Synthetic Agentic (implementation in progress) | Data/load type for generating agentic workloads (tool loops, sub-agent fan-out, context growth) procedurally, without a recorded trace. | synthetic_agentic.md |
| Weka Trace Replay | Data/load type for replaying raw Weka agent traces via graph-based session execution. | weka_trace_replay.md |
| Conversation Replay | Data/load type for benchmarking concurrent multi-turn agentic conversations with configurable distributions. | conversation_replay.md |
| BR0.2 Reports | Always-emitted llm-d-benchmark BR0.2 partial per stage; designed for clean yq-merge with other producers. | br_v0_2.md |
| Analysis | Visualizations and plots for performance metrics. | analysis.md |
| E2E Tests | Contributor guide to the end-to-end test tier: running and extending it. | e2e_tests.md |
We welcome contributions! Please join us:
See CONTRIBUTING.md for details on how to get started.
(top 30 of 62)
Python
99.3%