跳到内容

性能仪表板

性能仪表板用于确认新更改是否在各种工作负载下改善或降低了性能。它通过以下方式更新:在每个带有 perf-benchmarksready 标签的提交时触发基准测试,以及在 PR 合并到 vLLM 时触发。

结果会自动发布到公开的 vLLM 性能仪表板

手动触发基准测试

使用带有 vLLM 基准测试套件的 vllm-ci-test-repo 镜像。对于 x86 CPU 环境,请使用带有“-cpu”后缀的镜像。对于 AArch64 CPU 环境,请使用带有“-arm64-cpu”后缀的镜像。

以下是 CPU 的 docker 运行命令示例。对于 GPU,请跳过设置 ON_CPU 环境变量。

export VLLM_COMMIT=7f42dc20bb2800d09faa72b26f25d54e26f1b694 # use full commit hash from the main branch
export HF_TOKEN=<valid Hugging Face token>
if [[ "$(uname -m)" == aarch64 || "$(uname -m)" == arm64 ]]; then
  IMG_SUFFIX="arm64-cpu"
else
  IMG_SUFFIX="cpu"
fi
docker run -it --entrypoint /bin/bash -v /data/huggingface:/root/.cache/huggingface -e HF_TOKEN=$HF_TOKEN -e ON_CPU=1 --shm-size=16g --name vllm-cpu-ci public.ecr.aws/q9t5s3a7/vllm-ci-test-repo:${VLLM_COMMIT}-${IMG_SUFFIX}

然后,在 docker 实例中运行以下命令。

bash .buildkite/performance-benchmarks/scripts/run-performance-benchmarks.sh

运行时,基准测试脚本会在 benchmark/results 文件夹下生成结果,以及 benchmark_results.md 和 benchmark_results.json 文件。

运行时环境变量

  • ON_CPU:在 Intel® Xeon® 和 Arm® Neoverse™ 处理器上将该值设置为 '1'。默认值为 0。
  • SERVING_JSON:用于服务测试的 JSON 文件。默认值为空字符串(使用默认文件)。
  • LATENCY_JSON:用于延迟测试的 JSON 文件。默认值为空字符串(使用默认文件)。
  • THROUGHPUT_JSON:用于吞吐量测试的 JSON 文件。默认值为空字符串(使用默认文件)。
  • REMOTE_HOST:要进行基准测试的远程 vLLM 服务的 IP。默认值为空字符串。
  • REMOTE_PORT:要进行基准测试的远程 vLLM 服务的端口。默认值为空字符串。
  • PROMPTS_PER_CONCURRENCY:计算服务测试 num_prompts 的乘数(num_prompts = max_concurrency × value)。将覆盖 JSON 中的 num_prompts。默认值为 NULL。
  • ENABLE_ADAPTIVE_CONCURRENCY:设置为 '1' 以在静态服务 max_concurrency 扫描后启用基于 SLA 的自适应并发搜索。默认值为 0。
  • SLA_TTFT_MS:自适应并发搜索的默认 TTFT SLA 阈值(毫秒)。默认值为 3000。
  • SLA_TPOT_MS:自适应并发搜索的默认 TPOT SLA 阈值(毫秒)。默认值为 100。
  • ADAPTIVE_MAX_PROBES:额外的自适应搜索探测最大次数。默认值为 8。
  • ADAPTIVE_MAX_CONCURRENCY:自适应搜索期间允许的最大并发数。默认值为 1024。

可视化

convert-results-json-to-markdown.py 脚本可帮助您将基准测试结果放入带有实际基准测试结果的 Markdown 表格中。您可以在 buildkite/performance-benchmark 作业页面内找到以表格形式呈现的结果。如果您没有看到表格,请等待基准测试运行完成。表格的 JSON 版本(连同基准测试的 JSON 版本)也将附加到 Markdown 文件中。原始基准测试结果(以 JSON 文件格式)位于基准测试的 Artifacts 选项卡中。

性能结果对比

compare-json-results.py 脚本有助于对比使用 convert-results-json-to-markdown.py 转换后的基准测试结果 JSON 文件。运行时,基准测试脚本会在 benchmark/results 文件夹下生成结果,以及 benchmark_results.mdbenchmark_results.jsoncompare-json-results.py 对比两个 benchmark_results.json 文件,并提供性能比率,例如输出吞吐量(Output Tput)、中位数 TTFT 和中位数 TPOT。
如果仅传入一个 benchmark_results.json,compare-json-results.py 将转而对比该文件中不同的 TP 和 PP 配置。

以下是使用该脚本对比 result_a 和 result_b 的示例,针对相同的模型、数据集名称、输入/输出长度,使用最大并发和 QPS 进行对比。 python3 compare-json-results.py -f results_a/benchmark_results.json -f results_b/benchmark_results.json

输出吞吐量 (tok/s) — 模型 : [ meta-llama/Llama-3.1-8B-Instruct ] , 数据集名称 : [ random ] , 输入长度 : [ 2048.0 ] , 输出长度 : [ 2048.0 ]

最大并发数 qps results_a/benchmark_results.json results_b/benchmark_results.json 性能比率
0 12 inf 24.98 186.03 7.45
1 16 inf 25.49 246.92 9.69
2 24 inf 27.74 293.34 10.57
3 32 inf 28.61 306.69 10.72

compare-json-results.py – 命令行参数

compare-json-results.py 提供了可配置的参数,用于对比一个或多个 benchmark_results.json 文件并生成汇总表和绘图。
在大多数情况下,用户只需指定 --file 来解析所需的基准测试结果。

参数 类型 默认值 描述
--file str (可追加) None 输入的 JSON 结果文件。可以多次指定以对比多个基准测试输出。
--debug bool False 启用调试模式。设置后,将打印所有可用信息以辅助故障排除和验证。
--plot / --no-plot bool True 控制是否生成性能图。使用 --no-plot 禁用图表生成。
--xaxis str 最大并发数。 用作对比图中 X 轴的列名(例如,并发数或批处理大小)。
--latency str p99 用于 TTFT/TPOT 的延迟聚合方法。支持的值:medianp99
--ttft-max-ms float 3000.0 TTFT 图的参考上限(毫秒),通常用于可视化 SLA 阈值。
--tpot-max-ms float 100.0 TPOT 图的参考上限(毫秒),通常用于可视化 SLA 阈值。

有效最大并发汇总

基于配置的 TTFT 和 TPOT SLA 阈值,compare-json-results.py 计算每个基准测试结果的最大有效并发数。
“最大并发数 (两者)”列代表同时满足 TTFT 和 TPOT 约束的最高并发级别。
该值通常用于容量规划和规模指南。

# 配置 最大并发数 (TTFT ≤ 10000 ms) 最大并发数 (TPOT ≤ 100 ms) 最大并发数 (两者) 输出吞吐量 @ 两者 (tok/s) TTFT @ 两者 (ms) TPOT @ 两者 (ms)
0 results-a 128.00 12.00 12.00 127.76 3000.82 93.24
1 results-b 128.00 32.00 32.00 371.42 2261.53 81.74

有关性能基准测试及其参数的更多信息,请参阅 基准测试 README 性能基准测试说明

持续基准测试

持续基准测试为 vLLM 提供了跨不同模型和 GPU 设备的自动化性能监控。这有助于跟踪 vLLM 随时间变化的性能特征,并识别任何性能回归或改进。

工作原理

持续基准测试通过 PyTorch 基础设施仓库中的 GitHub 工作流 CI 触发,该工作流每 4 小时自动运行一次。工作流执行三种类型的性能测试:

  • 服务测试:测量请求处理和 API 性能
  • 吞吐量测试:评估令牌生成速率
  • 延迟测试:评估响应时间特征

基准测试配置

目前,基准测试是在 vllm-benchmarks 目录 中配置的一组预定义模型上运行的。要添加新的基准测试模型,请:

  1. 导航到基准测试配置中相应的 GPU 目录
  2. 将您的模型规格添加到相应的配置文件中
  3. 新模型将被包含在下一次计划的基准测试运行中