From 282c09237afe8e76a9d8a7f344d20050c86ced4f Mon Sep 17 00:00:00 2001
From: Mark Kurtz
Date: Thu, 17 Apr 2025 18:00:40 +0000
Subject: [PATCH 1/2] Update version to 0.2.0 and expand docs to account for
the latest changes along with backfill of missing docs
---
README.md | 131 +++++++++++++++-------------
docs/architecture.md | 98 ++++++++++++++++++++-
docs/assets/sample-benchmarks.gif | Bin 2250558 -> 78420 bytes
docs/assets/sample-output-end.png | Bin 421686 -> 0 bytes
docs/assets/sample-output-start.png | Bin 501894 -> 0 bytes
docs/assets/sample-output.png | Bin 0 -> 169268 bytes
docs/backends.md | 45 ++++++++++
docs/install.md | 88 ++++++++++++++++++-
docs/metrics.md | 112 ++++++++++++++++++++++++
docs/outputs.md | 109 +++++++++++++++++++++++
docs/slos_and_slas.md | 118 +++++++++++++++++++++++++
pyproject.toml | 3 +-
src/guidellm/__main__.py | 15 +++-
src/guidellm/config.py | 4 -
14 files changed, 653 insertions(+), 70 deletions(-)
delete mode 100644 docs/assets/sample-output-end.png
delete mode 100644 docs/assets/sample-output-start.png
create mode 100644 docs/assets/sample-output.png
create mode 100644 docs/backends.md
create mode 100644 docs/metrics.md
create mode 100644 docs/outputs.md
create mode 100644 docs/slos_and_slas.md
diff --git a/README.md b/README.md
index 615923e9..b4e1b152 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
Scale Efficiently: Evaluate and Optimize Your LLM Deployments for Real-World Inference
-[](https://github.com/neuralmagic/guidellm/releases) [](https://github.com/neuralmagic/guidellm/tree/main/docs) [](https://github.com/neuralmagic/guidellm/blob/main/LICENSE) [](https://pypi.python.org/pypi/guidellm) [](https://pypi.python.org/pypi/guidellm-nightly) [](https://pypi.python.org/pypi/guidellm) [](https://github.com/neuralmagic/guidellm/actions/workflows/nightly.yml)
+[](https://github.com/neuralmagic/guidellm/releases) [](https://github.com/neuralmagic/guidellm/tree/main/docs) [](https://github.com/neuralmagic/guidellm/blob/main/LICENSE) [](https://pypi.python.org/pypi/guidellm) [](https://pypi.python.org/pypi/guidellm) [](https://github.com/neuralmagic/guidellm/actions/workflows/nightly.yml)
## Overview
@@ -20,7 +20,7 @@ Scale Efficiently: Evaluate and Optimize Your LLM Deployments for Real-World Inf
-**GuideLLM** is a powerful tool for evaluating and optimizing the deployment of large language models (LLMs). By simulating real-world inference workloads, GuideLLM helps users gauge the performance, resource needs, and cost implications of deploying LLMs on various hardware configurations. This approach ensures efficient, scalable, and cost-effective LLM inference serving while maintaining high service quality.
+**GuideLLM** is a platform for evaluating and optimizing the deployment of large language models (LLMs). By simulating real-world inference workloads, GuideLLM helps users gauge the performance, resource needs, and cost implications of deploying LLMs on various hardware configurations. This approach ensures efficient, scalable, and cost-effective LLM inference serving while maintaining high service quality.
### Key Features
@@ -38,7 +38,13 @@ Before installing, ensure you have the following prerequisites:
- OS: Linux or MacOS
- Python: 3.9 – 3.13
-GuideLLM can be installed using pip:
+The latest GuideLLM release can be installed using pip:
+
+```bash
+pip install guidellm
+```
+
+Or from source code using pip:
```bash
pip install git+https://github.com/neuralmagic/guidellm.git
@@ -48,7 +54,7 @@ For detailed installation instructions and requirements, see the [Installation G
### Quick Start
-#### 1a. Start an OpenAI Compatible Server (vLLM)
+#### 1. Start an OpenAI Compatible Server (vLLM)
GuideLLM requires an OpenAI-compatible server to run evaluations. [vLLM](https://github.com/vllm-project/vllm) is recommended for this purpose. To start a vLLM server with a Llama 3.1 8B quantized model, run the following command:
@@ -58,93 +64,94 @@ vllm serve "neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w4a16"
For more information on starting a vLLM server, see the [vLLM Documentation](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html).
-#### 1b. Start an OpenAI Compatible Server (Hugging Face TGI)
+For information on starting other supported inference servers or platforms, see the [Supported Backends documentation](https://github.com/neuralmagic/guidellm/tree/main/docs/backends.md).
-GuideLLM requires an OpenAI-compatible server to run evaluations. [Text Generation Inference](https://github.com/huggingface/text-generation-inference) can be used here. To start a TGI server with a Llama 3.1 8B using docker, run the following command:
-
-```bash
-docker run --gpus 1 -ti --shm-size 1g --ipc=host --rm -p 8080:80 \
- -e MODEL_ID=meta-llama/Meta-Llama-3.1-8B-Instruct \
- -e NUM_SHARD=1 \
- -e MAX_INPUT_TOKENS=4096 \
- -e MAX_TOTAL_TOKENS=6000 \
- -e HF_TOKEN=$(cat ~/.cache/huggingface/token) \
- ghcr.io/huggingface/text-generation-inference:2.2.0
-```
+#### 2. Run a GuideLLM Benchmark
-For more information on starting a TGI server, see the [TGI Documentation](https://huggingface.co/docs/text-generation-inference/index).
+To run a GuideLLM benchmark, use the `guidellm benchmark` command with the target set to an OpenAI compatible server. For this example, the target is set to 'http://localhost:8000', assuming that vLLM is active and running on the same server. Be sure to update it appropriately. By default, GuideLLM will automatically determine the model avaialble on the server and use that. To target a different model, pass the desired name with the `--model` argument. Additionally, the `--rate-type` is set to `sweep` which will run a range of benchmarks automatically determining the minimum and maximum rates the server and model can support. Each benchmark run under the sweep will run for 30 seconds, as set by the `--max-seconds` argument. Finally, `--data` is set to a synthetic dataset with 256 prompt tokens and 128 output tokens per request. For more arguments, supported scenarios, and configurations, jump to the [Configurations Section](#configurations) or run `guidellm benchmark --help`.
-#### 2. Run a GuideLLM Evaluation
-
-To run a GuideLLM evaluation, use the `guidellm` command with the appropriate model name and options on the server hosting the model or one with network access to the deployment server. For example, to evaluate the full performance range of the previously deployed Llama 3.1 8B model, run the following command:
+Now, to start benchmarking, run the following command:
```bash
guidellm benchmark \
--target "http://localhost:8000" \
- --model "neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w4a16" \
--rate-type sweep \
+ --max-seconds 30 \
--data "prompt_tokens=256,output_tokens=128"
```
-The above command will begin the evaluation and output progress updates similar to the following (if running on a different server, be sure to update the target!):
+The above command will begin the evaluation and provide progress updates similar to the following:
-Notes:
+#### 3. Analyze the Results
-- The `--target` flag specifies the server hosting the model. In this case, it is a local vLLM server.
-- The `--model` flag specifies the model to evaluate. The model name should match the name of the model deployed on the server
-- The `--rate-type` flag specifies what load generation pattern GuideLLM will use when sending requests to the server. If `sweep` is specified GuideLLM will run multiple performance evaluations across different request rates.
-- By default GuideLLM will run over a fixed workload of 1000 requests configurable by `--max-requests`. If `--max-seconds` is set GuideLLM will instead run over a fixed time.
+After the evaluation is completed, GuideLLM will summarize the results into three sections:
-#### 3. Analyze the Results
+1. Benchmarks Metadata: A summary of the benchmark run and the arguments used to create it, including the server, data, profile, and more.
+2. Benchmarks Info: A high level view of each benchmark and the requests that were run, including the type, duration, request statuses, and number of tokens.
+3. Benchmarks Stats: A summary of the statistics for each benchmark run, including the requests rate, concurrency, latency, and token level metrics such as TTFT, ITL, and more.
-After the evaluation is completed, GuideLLM will summarize the results, including various performance metrics.
+The sections will look similar to the following:
-The output results will start with a summary of the evaluation, followed by the requests data for each benchmark run. For example, the start of the output will look like the following:
+For further details about the metrics and definitions, view the [Metrics documentation](https://raw.githubusercontent.com/neuralmagic/guidellm/main/docs/metrics.md).
-
+#### 4. Explore the Results File
-The end of the output will include important performance summary metrics such as request latency, time to first token (TTFT), inter-token latency (ITL), and more:
+By default, the full results, including full statistics and request data, are saved to a file `benchmarks.json` in the current working directory. This file can be used for further analysis or reporting and additionally can be reloaded into Python for further analysis using the `guidellm.benchmark.GenerativeBenchmarksReport` class. You can specify a different file name and extension with the `--output` argument.
-
+For further details about the supported output file types, view the [Outputs documentation](raw.githubusercontent.com/neuralmagic/guidellm/main/docs/outputs.md).
#### 4. Use the Results
The results from GuideLLM are used to optimize your LLM deployment for performance, resource efficiency, and cost. By analyzing the performance metrics, you can identify bottlenecks, determine the optimal request rate, and select the most cost-effective hardware configuration for your deployment.
-For example, if we deploy a latency-sensitive chat application, we likely want to optimize for low time to first token (TTFT) and inter-token latency (ITL). A reasonable threshold will depend on the application requirements. Still, we may want to ensure time to first token (TTFT) is under 200ms and inter-token latency (ITL) is under 50ms (20 updates per second). From the example results above, we can see that the model can meet these requirements on average at a request rate of 2.37 requests per second for each server. If you'd like to target a higher percentage of requests meeting these requirements, you can use the **Performance Stats by Benchmark** section to determine the rate at which 90% or 95% of requests meet these requirements.
+For example, if we are deploying a chat application, we likely want to guarantee our time to first token (TTFT) and inter-token latency (ITL) are under certain thresholds to meet our service level objectives (SLOs) or agreements (SLAs). For example, setting TTFT to 200ms and ITL 25ms for the sample data provided in the example above, we can see that even though the server is capable of handling up to 13 requests per second, we would only be able to meet our SLOs for 99% of users at a request rate of 3.5 requests per second. If we relax our constraints on ITL to 50ms, then we can meet the TTFT SLA for 99% of users at a request rate of roughly 10 requests per second.
-If we deploy a throughput-sensitive summarization application, we likely want to optimize for the maximum requests the server can handle per second. In this case, the throughput benchmark shows that the server maxes out at 4.06 requests per second. If we need to handle more requests, consider adding more servers or upgrading the hardware configuration.
+For further details about deterimining the optimal request rate and SLOs, view the [SLOs documentation](https://raw.githubusercontent.com/neuralmagic/guidellm/main/docs/slos_and_slas.md).
### Configurations
-GuideLLM provides various CLI and environment options to customize evaluations, including setting the duration of each benchmark run, the number of concurrent requests, and the request rate.
+GuideLLM provides a variety of configurations through both the benchmark CLI command alongside environment variables which handle default values and more granular controls. Below, the most common configurations are listed. A complete list is easily accessible, though, by running `guidellm benchmark --help` or `guidellm config` respectively.
-Some typical configurations for the CLI include:
+#### Benchmark CLI
-- `--rate-type`: The rate to use for benchmarking. Options include `sweep`, `synchronous`, `throughput`, `constant`, and `poisson`.
- - `--rate-type sweep`: (default) Sweep runs through the full range of the server's performance, starting with a `synchronous` rate, then `throughput`, and finally, 10 `constant` rates between the min and max request rate found.
- - `--rate-type synchronous`: Synchronous runs requests synchronously, one after the other.
- - `--rate-type throughput`: Throughput runs requests in a throughput manner, sending requests as fast as possible.
- - `--rate-type constant`: Constant runs requests at a constant rate. Specify the request rate per second with the `--rate` argument. For example, `--rate 10` or multiple rates with `--rate 10 --rate 20 --rate 30`.
- - `--rate-type poisson`: Poisson draws from a Poisson distribution with the mean at the specified rate, adding some real-world variance to the runs. Specify the request rate per second with the `--rate` argument. For example, `--rate 10` or multiple rates with `--rate 10 --rate 20 --rate 30`.
- - `--rate-type concurrent`: Concurrent runs requests at a fixed concurrency. When a requests completes it is immediately replaced with a new request to maintain the set concurrency. Specify the request concurrency with `--rate`.
-- `--data`: A hugging face dataset name or arguments to generate a synthetic dataset.
-- `--max-seconds`: The maximum number of seconds to run each benchmark.
-- `--max-requests`: The maximum number of requests to run in each benchmark.
+The `guidellm benchmark` command is used to run benchmarks against a generative AI backend/server. The command accepts a variety of arguments to customize the benchmark run. The most common arguments include:
-For a complete list of supported CLI arguments, run the following command:
+- `--target`: Specifies the target path for the backend to run benchmarks against. For example, `http://localhost:8000`. This is required to define the server endpoint.
-```bash
-guidellm --help
-```
+- `--model`: Allows selecting a specific model from the server. If not provided, it defaults to the first model available on the server. Useful when multiple models are hosted on the same server.
-For a full list of configuration options, run the following command:
+- `--processor`: Used only for synthetic data creation or when the token source configuration is set to local for calculating token metrics locally. It must match the model's processor/tokenizer to ensure compatibility and correctness. This supports either a HuggingFace model ID or a local path to a processor/tokenizer.
-```bash
-guidellm-config
-```
+- `--data`: Specifies the dataset to use. This can be a HuggingFace dataset ID, a local path to a dataset, or standard text files such as CSV, JSONL, and more. Additionally, synthetic data configurations can be provided using JSON or key-value strings. Synthetic data options include:
+
+ - `prompt_tokens`: Average number of tokens for prompts.
+ - `output_tokens`: Average number of tokens for outputs.
+ - `TYPE_stdev`, `TYPE_min`, `TYPE_max`: Standard deviation, minimum, and maximum values for the specified type (e.g., `prompt_tokens`, `output_tokens`). If not provided, will use the provided tokens value only.
+ - `samples`: Number of samples to generate, defaults to 1000.
+ - `source`: Source text data for generation, defaults to a local copy of Pride and Prejudice.
+
+- `--data-args`: A JSON string used to specify the columns to source data from (e.g., `prompt_column`, `output_tokens_count_column`) and additional arguments to pass into the HuggingFace datasets constructor.
+
+- `--data-sampler`: Enables applying `random` shuffling or sampling to the dataset. If not set, no sampling is applied.
+
+- `--rate-type`: Defines the type of benchmark to run. Supported types include:
+
+ - `synchronous`: Runs a single stream of requests one at a time. `--rate` must not be set for this mode.
+ - `throughput`: Runs all requests in parallel to measure the maximum throughput for the server (bounded by GUIDELLM\_\_MAX_CONCURRENCY config argument). `--rate` must not be set for this mode.
+ - `concurrent`: Runs a fixed number of streams of requests in parallel. `--rate` must be set to the desired concurrency level/number of streams.
+ - `constant`: Sends requests asynchronously at a constant rate set by `--rate`.
+ - `poisson`: Sends requests at a rate following a Poisson distribution with the mean set by `--rate`.
+ - `sweep`: Automatically determines the minimum and maximum rates the server can support by running synchronous and throughput benchmarks and then runs a series of benchmarks equally spaced between the two rates. The number of benchmarks is set by `--rate` (default is 10).
+
+- `--max-seconds`: Sets the maximum duration (in seconds) for each benchmark run. If not provided, the benchmark will run until the dataset is exhausted or `--max-requests` is reached.
-See the [GuideLLM Documentation](#Documentation) for further information.
+- `--max-requests`: Sets the maximum number of requests for each benchmark run. If not provided, the benchmark will run until `--max-seconds` is reached or the dataset is exhausted.
+
+- `--warmup-percent`: Specifies the percentage of the benchmark to treat as a warmup phase. Requests during this phase are excluded from the final results.
+
+- `--cooldown-percent`: Specifies the percentage of the benchmark to treat as a cooldown phase. Requests during this phase are excluded from the final results.
+
+- `--output-path`: Defines the path to save the benchmark results. Supports JSON, YAML, or CSV formats. If a directory is provided, the results will be saved as `benchmarks.json` in that directory. If not set, the results will be saved in the current working directory.
## Resources
@@ -155,9 +162,10 @@ Our comprehensive documentation provides detailed guides and resources to help y
### Core Docs
- [**Installation Guide**](https://github.com/neuralmagic/guidellm/tree/main/docs/install.md) - This guide provides step-by-step instructions for installing GuideLLM, including prerequisites and setup tips.
+- [**Backends Guide**](https://github.com/neuralmagic/guidellm/tree/main/docs/backends.md) - A comprehensive overview of supported backends and how to set them up for use with GuideLLM.
+- [**Metrics Guide**](https://github.com/neuralmagic/guidellm/tree/main/docs/metrics.md) - Detailed explanations of the metrics used in GuideLLM, including definitions and how to interpret them.
+- [**Outputs Guide**](https://github.com/neuralmagic/guidellm/tree/main/docs/outputs.md) - Information on the different output formats supported by GuideLLM and how to use them.
- [**Architecture Overview**](https://github.com/neuralmagic/guidellm/tree/main/docs/architecture.md) - A detailed look at GuideLLM's design, components, and how they interact.
-- [**CLI Guide**](https://github.com/neuralmagic/guidellm/tree/main/docs/guides/cli.md) - Comprehensive usage information for running GuideLLM via the command line, including available commands and options.
-- [**Configuration Guide**](https://github.com/neuralmagic/guidellm/tree/main/docs/guides/configuration.md) - Instructions on configuring GuideLLM to suit various deployment needs and performance goals.
### Supporting External Documentation
@@ -185,10 +193,8 @@ We appreciate contributions to the code, examples, integrations, documentation,
We invite you to join our growing community of developers, researchers, and enthusiasts passionate about LLMs and optimization. Whether you're looking for help, want to share your own experiences, or stay up to date with the latest developments, there are plenty of ways to get involved:
-- [**Neural Magic Community Slack**](https://neuralmagic.com/community/) - Join our Slack channel to connect with other GuideLLM users and developers. Ask questions, share your work, and get real-time support.
+- [**vLLM Slack**](https://inviter.co/vllm-slack) - Join the vLLM Slack community to connect with other users, ask questions, and share your experiences.
- [**GitHub Issues**](https://github.com/neuralmagic/guidellm/issues) - Report bugs, request features, or browse existing issues. Your feedback helps us improve GuideLLM.
-- [**Subscribe to Updates**](https://neuralmagic.com/subscribe/) - Sign up for the latest news, announcements, and updates about GuideLLM, webinars, events, and more.
-- [**Contact Us**](http://neuralmagic.com/contact/) - Use our contact form for general questions about Neural Magic or GuideLLM.
### Cite
@@ -202,3 +208,6 @@ If you find GuideLLM helpful in your research or projects, please consider citin
howpublished={\url{https://github.com/neuralmagic/guidellm}},
}
```
+
+```
+```
diff --git a/docs/architecture.md b/docs/architecture.md
index d30962bd..047648ec 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -1 +1,97 @@
-# Coming Soon
+# GuideLLM Architecture
+
+GuideLLM is designed to evaluate and optimize large language model (LLM) deployments by simulating real-world inference workloads. The architecture is modular, enabling flexibility and scalability. Below is an overview of the core components and their interactions.
+
+```
++------------------+ +------------------+ +------------------+
+| DatasetCreator | ---> | RequestLoader | ---> | Scheduler |
++------------------+ +------------------+ +------------------+
+ / | \
+ / | \
+ / | \
+ v v v
+ +------------------+ +------------------+
+ | RequestsWorker | | RequestsWorker |
+ +------------------+ +------------------+
+ | |
+ v v
+ +------------------+ +------------------+
+ | Backend | | Backend |
+ +------------------+ +------------------+
+ | |
+ v v
+ +---------------------------------------+
+ | BenchmarkAggregator |
+ +---------------------------------------+
+ |
+ v
+ +------------------+
+ | Benchmarker |
+ +------------------+
+```
+
+## Core Components
+
+### 1. **Backend**
+
+The `Backend` is an abstract interface for interacting with generative AI backends. It is responsible for processing requests and generating results. GuideLLM supports OpenAI-compatible HTTP servers, such as vLLM, as backends.
+
+- **Responsibilities:**
+ - Accept requests from the `RequestsWorker`.
+ - Generate responses for text or chat completions.
+ - Validate backend readiness and available models.
+
+### 2. **RequestLoader**
+
+The `RequestLoader` handles sourcing data from an iterable and generating requests for the backend. It ensures that data is properly formatted and ready for processing.
+
+- **Responsibilities:**
+ - Load data from datasets or synthetic sources.
+ - Generate requests in a format compatible with the backend.
+
+### 3. **DatasetCreator**
+
+The `DatasetCreator` is responsible for loading data sources and converting them into Hugging Face (HF) dataset items. These items can then be streamed by the `RequestLoader`.
+
+- **Responsibilities:**
+ - Load datasets from local files, Hugging Face datasets, or synthetic data.
+ - Convert data into a format compatible with the `RequestLoader`.
+
+### 4. **Scheduler**
+
+The `Scheduler` manages the scheduling of requests to the backend. It uses multiprocessing and multithreading with asyncio to minimize overheads and maximize throughput.
+
+- **Responsibilities:**
+ - Schedule requests to the backend.
+ - Manage queues for requests and results.
+ - Ensure efficient utilization of resources.
+
+### 5. **RequestsWorker**
+
+The `RequestsWorker` is a worker process that pulls requests from a queue, processes them using the backend, and sends the results back to the scheduler.
+
+- **Responsibilities:**
+ - Process requests from the scheduler.
+ - Interact with the backend to generate results.
+ - Return results to the scheduler.
+
+### 6. **Benchmarker**
+
+The `Benchmarker` wraps around multiple invocations of the `Scheduler`, one for each benchmark. It aggregates results using a `BenchmarkAggregator` and compiles them into a `Benchmark` once complete.
+
+- **Responsibilities:**
+ - Manage multiple benchmarks.
+ - Aggregate results from the scheduler.
+ - Compile results into a final benchmark report.
+
+### 7. **BenchmarkAggregator**
+
+The `BenchmarkAggregator` is responsible for storing and compiling results from the benchmarks.
+
+- **Responsibilities:**
+ - Aggregate results from multiple benchmarks.
+ - Compile results into a `Benchmark` object.
+
+## Component Interactions
+
+The following diagram illustrates the relationships between the core components:
diff --git a/docs/assets/sample-benchmarks.gif b/docs/assets/sample-benchmarks.gif
index 160763b755f3f2dffbea5314c518126281377246..d9cfc6a88d02ac0506c2bb6cc683888ef78a0adc 100644
GIT binary patch
literal 78420
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 |