跳到内容

vllm bench serve

JSON 命令行参数

当传递 JSON 命令行参数时,以下几组参数是等效的

  • --json-arg '{"key1": "value1", "key2": {"key3": "value2"}}'
  • --json-arg.key1 value1 --json-arg.key2.key3 value2

此外,列表元素可以使用 + 单独传递

  • --json-arg '{"key4": ["value3", "value4", "value5"]}'
  • --json-arg.key4+ value3 --json-arg.key4+='value4,value5'

参数

--trust-remote-code

信任来自 huggingface 的远程代码
默认值: False

--seed

默认值: 0

--num-prompts

要处理的提示数量。
默认值: 1000

--dataset-name

可选值: sharegpt, burstgpt, sonnet, random, random-mm, random-rerank, hf, custom, custom_audio, custom_image, custom_mm, prefix_repetition, spec_bench, speed_bench, timed_trace
用于基准测试的数据集名称。
默认值:random

--no-stream

不以流式传输模式加载数据集。
默认值: False

--dataset-path

sharegpt/sonnet 数据集的路径,或使用 HF 数据集时的 HF 数据集 ID。

--no-oversample

如果数据集的样本数量少于 num-prompts,则不进行过采样。
默认值: False

--skip-chat-template

对于支持聊天模板的数据集,跳过对提示词应用聊天模板。
默认值: False

--enable-multimodal-chat

为支持多模态的数据集启用多模态聊天转换。
默认值: False

--disable-shuffle

禁止打乱数据集样本,以实现确定性的处理顺序。
默认值: False

--label

基准测试结果的标签(前缀)。如果未指定,将使用 '--backend' 的值作为标签。

--backend

可选值: vllm, openai, openai-chat, openai-audio, openai-embeddings, openai-embeddings-chat, openai-embeddings-clip, openai-embeddings-vlm2vec, infinity-embeddings, infinity-embeddings-clip, vllm-pooling, vllm-rerank
用于基准测试的后端或端点类型。
默认值: openai

--base-url

如果不使用 http 主机和端口,则指定服务器或 API 的基准 URL。

--host

默认值: 127.0.0.1

--port

默认值: 8000

--endpoint

API 端点。
默认值: /v1/completions

--header

键值对(例如 --header x-additional-info=0.3.3),用于指定每次请求携带的标头。这些标头会覆盖后端常量和通过环境变量设置的值,并将被其他参数(如请求 ID)覆盖。

--max-concurrency

最大并发请求数。这可用于模拟高级组件强制执行最大并发请求数的环境。虽然 --request-rate 参数控制启动请求的速率,但此参数控制同时允许执行的请求数量。这意味着当两者结合使用时,如果服务器处理请求的速度不足以跟上,实际请求速率可能会低于 --request-rate 指定的值。

--model

模型名称。如果未指定,将从服务器的 /v1/models 端点获取第一个模型。

--input-len

数据集的通用输入长度。映射到数据集特定的输入长度参数(例如 --random-input-len, --sonnet-input-len)。如果未指定,使用数据集默认值。

--output-len

数据集的通用输出长度。映射到数据集特定的输出长度参数(例如 --random-output-len, --sonnet-output-len)。如果未指定,使用数据集默认值。

--tokenizer

分词器(tokenizer)的名称或路径(如果不使用默认分词器)。

--tokenizer-mode

分词器模式
    - "auto" will use the tokenizer from `mistral_common` for Mistral models
    if available, otherwise it will use the "hf" tokenizer.

    - "hf" will use the fast tokenizer if available.

    - "slow" will always use the slow tokenizer.

    - "mistral" will always use the tokenizer from `mistral_common`.

    - "deepseek_v32" will always use the tokenizer from `deepseek_v32`.

    - "qwen_vl" will always use the tokenizer from `qwen_vl`.

    - Other custom values can be supported via plugins.

默认值: auto

默认值: False

--logprobs

每个 token 计算并返回的 logprobs 数量。如果未指定,则:(1) 如果禁用了束搜索 (beam search),则不计算 logprobs,每个 token 返回一个虚拟的 logprob;或 (2) 如果启用了束搜索,则每个 token 计算 1 个 logprob。

--request-rate

每秒请求数。如果是 inf,则所有请求在时间 0 同时发送。否则,我们使用泊松过程或伽马分布来合成请求到达时间。
默认值: inf

--burstiness

请求生成的突发因子(burstiness)。仅在 request_rate 不为 inf 时有效。默认值为 1,遵循泊松过程。否则,请求间隔遵循伽马分布。较低的突发值 (0 < burstiness < 1) 会导致请求更集中突发。较高的突发值 (burstiness > 1) 会导致请求到达更均匀。
默认值: 1.0

--disable-tqdm

指定以禁用 tqdm 进度条。
默认值: False

--num-warmups

预热请求的数量。
默认值: 0

--profile

使用 vLLM 分析(Profiling)。服务器必须提供 --profiler-config 配置。
默认值: False

--save-result

指定将基准测试结果保存到 json 文件。
默认值: False

--save-detailed

保存结果时,是否包含每个请求的信息,如响应、错误、ttfts、tpots 等。
默认值: False

--append-result

将基准测试结果追加到现有的 json 文件中。
默认值: False

--metadata

用于记录本次运行元数据的键值对(例如 --metadata version=0.3.3 tp=1),将保存到结果 JSON 文件中以供存档。

--result-dir

指定保存基准测试 json 结果的目录。如果未指定,结果将保存在当前目录中。

--result-filename

指定保存基准测试 json 结果的文件名。如果未指定,结果将以 {label}-{args.request_rate}qps-{base_model_id}-{current_dt}.json 格式保存。

--ignore-eos

发送基准测试请求时设置 ignore_eos 标志。警告:deepspeed_mii 和 tgi 不支持 ignore_eos。
默认值: False

--self-timed, --no-self-timed

使用跟踪信息(trace)中的时间信息而不是配置。这在根据时间戳忠实回放跟踪时非常有用。未设置时,默认为 False,但 --dataset-name=timed_trace 除外(默认为 True)。使用 --no-self-timed 强制关闭。关闭时,将使用用户定义的生成速率,并忽略跟踪中的定时信息。

--percentile-metrics

用于报告百分位数的选定指标列表(以逗号分隔)。此参数指定哪些指标需要报告百分位数。允许的指标名称有 "ttft", "tpot", "itl", "e2el"。如果未指定,生成模型默认值为 "ttft,tpot,itl",池化模型默认值为 "e2el"。

--metric-percentiles

所选指标的百分位数列表(以逗号分隔)。要报告第 25、50 和 75 百分位数,请使用 "25,50,75"。默认值为 "99"。使用 "--percentile-metrics" 选择指标。
默认值: 99

--goodput

以 "KEY:VALUE" 对形式指定 Goodput 的服务水平目标 (SLO),其中 key 是指标名称,value 是毫秒值。可以提供多个 "KEY:VALUE" 对,并用空格分隔。允许的请求级指标名称为 "ttft", "tpot", "e2el"。有关 Goodput 定义的更多上下文,请参考 DistServe 论文:https://arxiv.org/pdf/2401.09670 和博客:https://hao-ai-lab.github.io/blogs/distserve

--request-id-prefix

指定请求 ID 的前缀。
默认值: bench-a8752075-

--served-model-name

API 中使用的模型名称。如果未指定,模型名称将与 --model 参数相同。

--lora-modules

启动服务器时传入的 LoRA 模块名称子集。默认情况下,脚本会为每个请求随机选择一个 LoRA 模块。使用 --lora-assignment 控制选择策略。

--lora-assignment

可选值: random, round-robin
为请求分配 LoRA 模块的策略。'random'(默认)为每个请求随机选择一个 LoRA。'round-robin' 以确定性的方式循环选择 LoRA 模块。
默认值:random

--ramp-up-strategy

可选值: linear, exponential
爬坡(ramp-up)策略。用于在基准测试期间将请求速率从初始 RPS 提升到最终 RPS(由 --ramp-up-start-rps 和 --ramp-up-end-rps 指定)。

--ramp-up-start-rps

爬坡的起始请求速率 (RPS)。使用 --ramp-up-strategy 时必须指定。

--ramp-up-end-rps

爬坡的结束请求速率 (RPS)。使用 --ramp-up-strategy 时必须指定。

--ready-check-timeout-sec

等待端点就绪的最大秒数。默认跳过就绪检查。
默认值: 0

--chat-template-kwargs

一个 JSON 字符串,包含转发给 tokenizer 的 apply_chat_template 的 kwargs,用于数据集在客户端渲染提示词时使用(例如 custom / speed_bench)。示例:'{"thinking": true}' 以启用推理模型。

--extra-body

一个 JSON 字符串,表示要在每个请求中包含的额外请求体参数。示例:'{"chat_template_kwargs":{"enable_thinking":false}}'

--skip-tokenizer-init

跳过分词器和反分词器的初始化。
默认值: False

--insecure

禁用 SSL 证书验证。连接具有自签名证书的服务器时使用此选项。
默认值: False

--plot-timeline

生成显示请求执行情况的 HTML 时间轴图。该图将与结果 JSON 文件一起保存。
默认值: False

--timeline-itl-thresholds

用于时间轴图着色的 ITL(token 间延迟)阈值,单位为毫秒。指定两个逗号分隔的值,将 token 间延迟分为三组:低于第一个阈值(绿色)、在阈值之间(橙色)、高于第二个阈值(红色)。
默认值: 25,50

--plot-dataset-stats

生成包含数据集统计信息的 matplotlib 图,显示提示词 token 数、输出 token 数和组合 token 的分布。
默认值: False

custom 数据集选项

--custom-output-len

每个请求的输出 token 数量。除非设置为 -1,否则该值会覆盖从数据集加载的潜在输出长度。仅用于自定义数据集。
默认值:256

--custom-ensure-client-side-data

确保自定义数据集的媒体作为客户端数据发送,而不是引用。对于 custom_image 数据集,这会在基准测试客户端加载本地和 HTTP(S) 图像,并将它们编码为 base64 数据 URL。现有的 data:image URL 保持不变。
默认值: False

spec bench 数据集选项

--spec-bench-output-len

每个请求的输出 token 数,仅用于 spec bench 数据集。
默认值:256

--spec-bench-category

spec bench 数据集的类别。如果为 None,则使用所有类别。

sonnet 数据集选项

--sonnet-input-len

每个请求的输入 token 数量,仅用于 sonnet 数据集。
默认值: 550

--sonnet-output-len

每个请求的输出 token 数量,仅用于 sonnet 数据集。
默认值: 150

--sonnet-prefix-len

每个请求的前缀 token 数量,仅用于 sonnet 数据集。
默认值: 200

sharegpt 数据集选项

--sharegpt-output-len

每个请求的输出长度。覆盖 ShareGPT 数据集中的输出长度。

timed-trace 数据集选项

--timed-trace-chunk-hash-size

如果存在哈希 token,每个哈希代表多少个 token 哈希。例如,Moonshot 跟踪中是 512,而 Qwen/Alibaba 是 16。
默认值: 16

--timed-trace-sec-multiplier

将时间戳转换为秒时使用的乘数。我们将把时间戳乘以该值。例如,如果时间戳是毫秒,则传入 0.001。如果是秒,则默认的 1 足矣。
默认值: 1

--timed-trace-label-timestamp

使用什么 json 标签来索引跟踪中的时间戳。
默认值: timestamp

--timed-trace-label-input-length

使用什么 json 标签来索引跟踪中的输入长度字段。
默认值: input_length

--timed-trace-label-output-length

使用什么 json 标签来索引跟踪中的输出长度字段。
默认值: output_length

--timed-trace-label-hash-ids

使用什么 json 标签来索引输入提示词的哈希 ID。
默认值: hash_ids

blazedit 数据集选项

--blazedit-min-distance

blazedit 数据集的最小距离。最小:0,最大:1.0
默认值:0.0

--blazedit-max-distance

blazedit 数据集的最大距离。最小:0,最大:1.0
默认值: 1.0

asr 数据集选项

--asr-max-audio-len-sec

ASR 数据集的最大音频长度(秒)。
默认值: inf

--asr-min-audio-len-sec

ASR 数据集的最小音频长度(秒)。
默认值:0.0

随机数据集选项

--random-input-len

每个请求的输入 token 数,仅用于随机采样。
默认: 1024

--random-output-len

每个请求的输出 token 数,仅用于随机采样。
默认值: 128

--random-range-ratio

对输入/输出长度进行采样的范围比例,仅用于随机采样。单个浮点数同时适用于 ISL(输入序列长度)和 OSL(输出序列长度)。类似 '{"input": 0.3, "output": 0.5}' 的 JSON 字典可以分别进行设置。取值必须在 [0, 1) 区间内。
默认值:0.0

--random-prefix-len

请求中随机上下文之前的固定前缀 token 数。总输入长度是 random-prefix-len 和从 [input_len * (1 - range_ratio), input_len * (1 + range_ratio)] 采样的随机上下文长度的总和。
默认值: 0

--random-batch-size

随机采样的批次大小。仅用于嵌入基准测试。
默认值: 1

--no-reranker

模型是否支持重排序功能。仅用于重排序基准测试。
默认值: False

基于随机数据集扩展的随机多模态数据集选项

--random-mm-base-items-per-request

random-mm 的每个请求的基础多模态项数。实际的每个请求计数将围绕此基础值进行采样,使用 --random-mm-num-mm-items-range-ratio。
默认值: 1

--random-mm-num-mm-items-range-ratio

每个请求的项数采样范围比 r,r 在 [0, 1] 之间。我们从闭合整数范围 [floor(n(1-r)), ceil(n(1+r))] 中均匀采样,其中 n 是每个请求的基础项数。r=0 保持固定;r=1 允许 0 个项。最大值被限制到 --random-mm-limit-mm-per-prompt 中的每模态限制之和。如果计算出的最小值超过最大值,则会引发错误。
默认值:0.0

--random-mm-limit-mm-per-prompt

每个请求附带的项数的每模态硬限制,例如 '{"image": 3, "video": 0}'。采样的每个请求项数将被限制到这些限制之和。当一个模态达到其上限时,它的桶将被排除,并且概率会被重新归一化。注意:目前仅支持图像采样。
默认: {'image': 255, 'video': 1}

--random-mm-bucket-config

桶配置是一个字典,将多模态项采样配置映射到概率。目前支持 2 种模态:图像和视频。桶键是 (height, width, num_frames) 的元组。值是采样特定项的概率。示例:--random-mm-bucket-config {(256, 256, 1): 0.5, (720, 1280, 1): 0.4, (720, 1280, 16): 0.10} 第一个项:分辨率为 256x256 的图像,概率为 0.5。第二个项:分辨率为 720x1280 的图像,概率为 0.4。第三个项:分辨率为 720x1280 且有 16 帧的视频,概率为 0.1。注意:如果概率不加到 1,它们将被归一化。注意 bis:目前仅支持图像采样。
默认: {(256, 256, 1): 0.5, (720, 1280, 1): 0.5, (720, 1280, 16): 0.0}

hf 数据集选项

--hf-subset

HF 数据集的子集。

--hf-split

HF 数据集的拆分。

--hf-name

HuggingFace 上的数据集名称(例如 'lmarena-ai/VisionArena-Chat')。如果您的数据集路径是本地路径,请指定此项。

--hf-output-len

每个请求的输出长度。覆盖从采样的 HF 数据集中获取的输出长度。

前缀重复数据集选项

--prefix-repetition-prefix-len

每个请求的前缀 token 数量,仅用于前缀重复数据集。
默认值:256

--prefix-repetition-suffix-len

每个请求的后缀 token 数量,仅用于前缀重复数据集。总输入长度 = prefix_len + suffix_len。
默认值:256

--prefix-repetition-num-prefixes

要生成的前缀数量,仅用于前缀重复数据集。每个前缀的提示词数量 = num_requests // num_prefixes。
默认值:10

--prefix-repetition-output-len

每个请求的输出 token 数量,仅用于前缀重复数据集。
默认值: 128

speed bench 数据集选项

SPEED-Bench 数据集:https://hugging-face.cn/datasets/nvidia/SPEED-Bench

Download the dataset using:

`curl -LsSf https://raw.githubusercontent.com/NVIDIA-NeMo/Skills/refs/heads/main/nemo_skills/dataset/speed-bench/prepare.py | python3 -`

--speed-bench-dataset-subset

可选值: qualitative, throughput_8k, throughput_16k, throughput_32k, throughput_1k, throughput_2k
SPEED-Bench 数据集的子集。
默认值: qualitative

--speed-bench-output-len

每个请求的输出 token 数,仅用于 speed bench 数据集。
默认值: 4096

--speed-bench-category

speed bench 数据集的类别。如果为 None,则使用所有类别。

采样参数

--top-p

Top-p 采样参数。仅对兼容 OpenAI 的后端有效。

--top-k

Top-k 采样参数。仅对兼容 OpenAI 的后端有效。

--min-p

Min-p 采样参数。仅对兼容 OpenAI 的后端有效。

--temperature

Temperature 采样参数。仅对兼容 OpenAI 的后端有效。

--frequency-penalty

频率惩罚(Frequency penalty)采样参数。仅对兼容 OpenAI 的后端有效。

--presence-penalty

存在惩罚(Presence penalty)采样参数。仅对兼容 OpenAI 的后端有效。

--repetition-penalty

重复惩罚(Repetition penalty)采样参数。仅对兼容 OpenAI 的后端有效。