vLLM 基准测试:ShareGPT 回放与指标采集

讲解 vLLM 的 ShareGPT 在线回放与自定义真实请求采样,说明负载参数,并依据请求吞吐、TTFT、ITL 和 TPOT 观察首个流式输出、生成间隔和整体吞吐表现。

按 官方基准测试文档 的命令、负载与指标定义,vllm bench serve 可以把 ShareGPT 请求回放到已运行的服务,并输出请求吞吐、TTFT、ITL 与 TPOT。开始前固定模型、端点、数据集和负载参数,结束后按同一口径核对。重复回放同一服务时记录前缀缓存状态,因为文档说明缓存复用可能抬高吞吐。

回放前先固定 vLLM 服务与端点

本文假设 HTTP 服务已经启动;benchmark CLI 负责发送基准请求,不替代模型加载。vLLM 的 OpenAI-Compatible Server 文档 说明,/v1/completions 适用于文本生成模型,且不支持 suffix;Chat Completions 使用 /v1/chat/completions。下面命令固定使用前者。

如果业务流量走 Chat Completions,应先统一请求格式和端点,不要只替换路径字符串。如果服务尚未启动,所需 GPU、并行参数和启动命令取决于模型及当前部署文档,不应把基准命令当成通用服务配置。

ShareGPT 回放:下载数据并执行命令

ShareGPT 支持在线和离线基准,在线回放通过 --dataset-name sharegpt 选择。数据可从 Hugging Face 下载:

wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json

服务启动后执行:

vllm bench serve \
  --backend vllm \
  --model NousResearch/Hermes-3-Llama-3.1-8B \
  --endpoint /v1/completions \
  --dataset-name sharegpt

其中,--backend vllm 选择后端,--model 应与已加载模型一致,--endpoint 指定请求路径,--dataset-name sharegpt 选择数据。示例模型 ID 不是部署清单;改用自有模型时,需要同步调整服务配置。

如果要改用业务真实请求样本,自定义数据必须采用 .jsonl 格式,每条记录包含 prompt 字段,并使用 --dataset-name custom 选择:

{"prompt": "YOUR_VALUE"}

不要仅把下载的 .json 文件修改后缀来充当 JSONL。若当前版本还需要数据路径参数,应以项目当前文档为准,不要猜测参数名。

指标采集:先固定负载,再读报告

回放前先决定负载模型:

  • --request-rate 控制每秒目标请求数;默认值为 inf,会立即发送全部请求,有限值用于受控负载。
  • --max-concurrency 限制未完成请求数;不提供该参数时,并发数量不受限制。
  • --burstiness 使用 Gamma 分布,取值范围为 > 0;较小值更突发,较大值更均匀,1.0 对应 Poisson 流量。
  • --ramp-up-strategy 接受 linear 或 exponential,用于在运行过程中逐步改变请求速率。

报告中的请求吞吐量单位为 req/s,同时列出 output-token throughput 和 total-token throughput。延迟字段按以下口径理解:

  • TTFT 在客户端测量,从发送请求到收到首个 streamed output。
  • ITL 是连续 streamed output 之间的间隔,并跨成功请求汇总。
  • TPOT 每个请求计算一次,排除首 token,再跨请求汇总。
  • 开启 speculative decoding 后,一个 streamed output 可能包含多个 token,因此 ITL 与 TPOT 可能分离;ITL 不会为同一输出中的 token 补充零时长间隔。

不同基准工具的指标名称并未统一。跨工具比较前,应确认同名指标采用相同计时边界,不能只按字段名称直接比较。

检查结果与常见出错点

先确认报告已经生成,并找到请求、输出 token、总 token 吞吐量以及 TTFT、ITL、TPOT 字段。随后归档模型、端点、数据集、请求速率、并发、突发性、爬升策略和前缀缓存状态。是否达标应按业务目标判断,不应从这条 CLI 命令推导固定合格线。

结果异常时,先检查是否直接接受了默认 inf 和无限并发,再确认重复回放是否受到前缀缓存影响。使用自定义样本时,还要检查每行是否为包含 prompt 的 JSONL。负载、指标口径和缓存状态都可复查,结果才适合进入后续对比。

这些步骤按正文链接的官方文档整理,使用前请对照当前版本复核。

资料来源