Note: This tool was created with an AI code generation tool (Cursor), and has not yet been thoroughly vetted by a human. Use at your own risk.
A tool for analyzing and visualizing benchmark results from GuideLLM tests. This tool combines summary metrics analysis and per-request deep dives into a single HTML report with multiple tabs and interactive visualizations.
- Summary Metrics Analysis: Throughput, TTFT, ITL, and request latency statistics (mean, median, p95, p99)
- Deep Dive Analysis: Distribution histograms for TTFT and ITL across all individual requests
- Request Scheduling Analysis: Timeline visualization and request rate analysis
- Flexible Configuration: Support for both concurrency and RPS-based analysis
- Interactive HTML Reports: Tabbed interface with minimal monospace styling
- Modular Architecture: Clean separation between data parsing, visualization, and report generation
cd guidellm-reports
python generate-report.py config.yaml --output reports/report.htmlNote: Create a reports folder to store the output results. It has been added to the .gitignore file so that the results are not accidentally committed to git
python generate-report.py config.yaml \
--title "H100 Performance Analysis" \
--subtitle "Comparing vllm vs llm-d platforms" \
--output performance_report.htmlAn example config.yaml file is as follows:
data:
- extra_metadata:
platform: vllm-x2
GPU: H100
GPU_count: 2
files:
- input/benchmarks-vllm-x2-merged.json
- extra_metadata:
platform: llmd-x2
GPU: H100
GPU_count: 2
files:
- input/benchmarks-llmd-x2-merged.json
options:
color: platform
axis_mode: concurrencyNote: Create a input folder to store the benchmark json files. It has been added to the .gitignore file so that they are not accidentally committed to git
The configuration file consists of two main sections:
Each data group defines a set of result files and metadata:
files: List of file paths to benchmark result JSON files. Supports wildcards (e.g.,"../results/platform-a/*.json") for matching multiple files automatically.extra_metadata: Custom metadata fields to attach to all results from these files. This metadata can be used for grouping and comparison in charts (e.g., platform, GPU type, configuration details).
color: Metadata field to use for grouping/coloring data points in charts. This allows easy visual comparison between different configurations (e.g., 'platform', 'GPU', 'dataset_id').axis_mode: Either 'concurrency' or 'rps' to determine x-axis scaling in charts.concurrency_levels: Optional list to filter analysis to specific concurrency levels only.rps_levels: Optional list to filter analysis to specific RPS levels only (used when axis_mode is 'rps').
The extra_metadata feature is particularly useful for comparing results across different test environments, hardware configurations, or software versions - simply add descriptive metadata to each data group and set the color option to that field.
The generated HTML report contains the following tabs:
- Throughput: Output tokens per second vs concurrency/RPS
- TTFT: Time to First Token with subtabs for mean, median, p95, p99
- ITL: Inter-Token Latency with subtabs for mean, median, p95, p99
- Request Latency: Total request latency with subtabs for mean, median, p95, p99
- Input Length: Average input sequence length
- Output Length: Average output sequence length
- TTFT Deep Dive: Histograms showing TTFT distribution for each configuration
- ITL Deep Dive: Histograms showing ITL distribution for each configuration
- Request Scheduling: Request start/end rates and TTFT timeline analysis
- Combined TTFT: Gives the ability to view the Mean, Median, P95 and P99 in a single graph
- Python 3.7+
- pandas
- plotly
- jinja2
- pyyaml
- numpy
Install dependencies:
pip install -r requirements.txtThe tool is organized into modular components:
config.py: Configuration file handling and validationdata_parsers.py: Parsing summary metrics and individual request data from JSON filesvisualizations.py: Creating interactive Plotly charts and graphshtml_generator.py: Assembling charts into final HTML reportmain.py: CLI interface and orchestrationtemplate.html: Minimal monospace HTML template
This modular design makes it easy to extend with new chart types, modify styling, or integrate into other workflows.
If there are multiple test files, the compile_benchmark_files.py file can be used to combine them into a single benchmarks file that can be used in the config.yaml file
python tools/compile_benchmark_files.py -i multiple_files/vllm-x2 -o input/benchmarks-vllm-x2-merged.jsonNote: Create a folder named multiple_files and add the folder with the multiple result files in that folder (vllm-x2 in this case). the multiple_files folder has been added to the .gitignore file so that they are not accidentally committed to git