大语言模型推理性能测试
性能测试需要使用acs-bench工具。acs-bench prof命令主要用于LLM性能benchmark测试任务,支持给定数据长度和数量,在不同请求并发度的场景下对于Ascend vLLM服务进行性能测试,目前支持爬坡测试和性能压测两种模式。
检查acs-bench工具是否安装
可以通过如下命令查看是否已经安装acs-bench工具。
pip show acs-bench
如果未安装acs-bench工具,请参考以下步骤执行。
- 获取acs-bench工具的whl包。
whl包存放在软件包AscendCloud-6.5.908-xxx.zip/AscendCloud-LLM-xxx的llm_tools目录中。软件包获取路径:Support-E,在此路径中查找下载ModelArts 6.5.908版本。
acs-bench工具需要安装在python>=3.10的运行环境中,该环境可以访问待测试的推理服务即可。推荐安装在推理服务启动的容器中。
- 配置pip源,按实际需要配置pip源。(可选)
mkdir -p ~/.pip vim ~/.pip/pip.conf
配置文件填入如下内容,下述命令以华为源为例:
[global] index-url = https://mirrors.huaweicloud.com/repository/pypi/simple trusted-host = mirrors.huaweicloud.com timeout = 120
- 在whl包所在文件夹下,执行如下命令安装acs-bench工具。
pip install acs_bench-*-py3-none-any.whl

使用上述命令安装时,acs_bench-*-py3-none-any.whl中的 `*` 需替换为实际版本号,如:pip install acs_bench-1.1.0-py3-none-any.whl
使用前准备工作:配置providers.yaml
acs-bench工具通过配置providers.yaml文件访问服务端,它包含了服务端的id、name、api_key、base_url、model_name和model_category等信息。
使用acs-bench工具前,请在本地创建一个providers.yaml文件,将参数的值按实际情况填写后保存,示例如下:
providers:
- id: 'ascend-vllm'
name: 'ascend-vllm'
api_key: 'EMPTY'
base_url: 'http://127.0.0.1:9002/v1'
model_name: 'Qwen3-32b'
model_category: 'Qwen3-32b' 具体参数说明如下表1所示:
字段 | 是否必填 | 含义 |
|---|---|---|
id | 否 | 服务提供商标识。 |
name | 否 | 服务提供商名称。 |
api_key | 否 | 原为openai的api_key,现可作为MaaS的认证码。 |
base_url | 是 | 服务端基础URL(添加类似 http://{$IP}:{$PORT}/v1 的url) |
model_name | 是 | 启动推理服务时的模型名称。 如果启动推理服务时有设置served-model-name参数,则填写为served-model-name的值。 如果启动推理服务时没有设置served-model-name参数,则填写启动服务时默认的model路径。 |
model_category | 否 | 模型所属的类别,可不指定。 |
获取数据集
本章节介绍获取数据集。
acs-bench工具需要使用数据集进行测试,目前支持的开源数据集包括LongBench、ShareGPT格式,如果本地不存在开源数据集,可以使用acs-bench generate dataset 用于生成自定义数据集,使用示例如下,参数说明参见生成数据集参数说明。
- 生成随机数据集。
acs-bench generate dataset \ --tokenizer ./tokenizer/Qwen3-32b \ --dataset-type random \ --output-path ./built_in_dataset \ --input-length 128 \ --num-requests 100
- 生成embedding数据集。
acs-bench generate dataset \ --tokenizer ./tokenizer/Qwen3-32b \ --task embedding \ --output-path ./built_in_dataset \ --input-length 128 \ --num-requests 100
- 生成rerank数据集。
acs-bench generate dataset \ --tokenizer ./tokenizer/Qwen3-32b \ --task rerank \ --document-size 4 \ --output-path ./built_in_dataset \ --input-length 128 \ --num-requests 100
- 从LongBench数据集中筛选符合条件的数据集。
acs-bench generate dataset \ --tokenizer ./tokenizer/Qwen3-32b \ --dataset-type LongBench \ --input-path ./dataset/long_bench --output-path ./built_in_dataset \ --input-length 128 \ --num-requests 100
- 从ShareGPT数据集中筛选符合条件的数据集。
acs-bench generate dataset \ --tokenizer ./tokenizer/Qwen3-32b \ --dataset-type ShareGPT \ --input-path ./dataset/ShareGPT --output-path ./built_in_dataset \ --input-length 128 \ --num-requests 100

生成数据集命令中的${input-length}和${num-requests}仅支持单个值。
如果需要生成其他规格的数据集,将${input-length}或${num-requests}修改成对应规格的值后,执行命令。
参数名 | 参数类型 | 是否必选 | 参数说明 |
|---|---|---|---|
-dt/--dataset-type | String | 否 | 指定生成的数据集来源,即用于数据筛选的开源数据集类型,默认是random,即随机token组合模式。也可指定开源数据集进行截取,当前支持LongBench、ShareGpt。 |
-i/--input-path | String | 否 | 指定用于数据筛选的开源数据集路径,当--dataset-type为random模式时无需指定该参数。 |
-mt/--modal-type | String | 否 | 多模态数据集的模式类型,默认值为text,当前可选项为text、image-text、video-text。 |
-tk/--task | String | 否 | 数据集任务后端,默认值为generate,当前可选项为generate、rerank、embedding。 |
-cfg/--config-option | String | 否 | 多模态配置选项,以“KEY:VALUE”对的形式指定多模态使用的选项,可以提供多个“KEY:VALUE”对。允许的键选项包括“image_height”、“image_width”、“duration”和“fps”。 |
-o/--output-path | String | 是 | 生成prompt的json文件输出路径。 |
-il/ --input-length | Int | 是 | 自定义数据集中每个prompt的长度。 |
-pl/--prefix-length | Int | 否 | 自定义数据集中公共前缀prompt长度,只在random模式下生效,默认是0。 |
-n/--num-requests | Int | 是 | 生成的prompt个数。 |
-ds/--document-size | Int | 否 | 每个查询的文档大小,默认是4,与${input-length}个数一致。 |
-t/ --tokenizer | String | 是 | tokenizer模型文件夹路径,支持本地路径以及huggingface的模型路径,也支持 ModelScope 模型 ID(需设置 USE_MODELSCOPE=true)。 |
-rv/--revision | String | 否 | 指定huggingface社区的模型分支,只适用于tokenizer为huggingface的模型路径,默认是master。 |
-ra/--range-ratio-above | Float | 否 | 表示prompt长度能够动态上浮的比例,即最大长度为input_length * (1 + range_ratio_above),取值范围是[0, 1],默认是0.0。 |
-rb/--range-ratio-below | Float | 否 | 表示prompt长度能够动态下潜的比例,即最小长度为input_length * (1 - range_ratio_above),取值范围是[0, 1],默认是0.0。 |
-seed/--random-seed | Int | 否 | 随机种子,用于固定随机性。 |
-trc/--trust-remote-code | Bool | 否 | 是否信任远端代码,只适用于tokenizer为huggingface的模型路径,默认是False |
性能压测模式验证
使用acs-bench prof命令进行性能压测的示例如下,详细参数解释请参见使用示例的参数说明,输出产物说明参见产物说明。
acs-bench prof \ --provider ./providers.yaml \ --dataset-type custom --input-path ./built_in_dataset/ \ --concurrency-backend threading-pool \ --backend openai-chat --warmup 1 \ --epochs 2 \ --num-requests 1,2,4,8 --concurrency 1,2,4,8 \ --input-length 128,128,2048,2048 --output-length 128,2048,128,2048 \ --benchmark-save-path ./output_path/
爬坡模式验证
使用acs-bench prof命令进行爬坡测试的示例如下,详细参数解释请参见使用示例的参数说明,输出产物说明参见产物说明。
acs-bench prof \ --provider ./providers.yaml \ --dataset-type custom --input-path ./built_in_dataset/ \ --concurrency-backend threading-pool \ --backend openai-chat --warmup 1 \ --epochs 2 \ --use-climb --climb-mode linear --growth-rate 2 --init-concurrency 1 --growth-interval 5000 \ --num-requests 1,2,4,8 --concurrency 1,2,4,8 \ --input-length 128,128,2048,2048 --output-length 128,2048,128,2048 \ --benchmark-save-path ./output_path/
基于embedding数据集对embedding模型进行并发测试
使用acs-bench prof命令进行embedding模型并发测试的示例如下,详细参数解释请参见使用示例的参数说明,输出产物说明参见产物说明。
以多线程并发模式为例,后端backend为embedding,示例如下:
acs-bench prof \ --provider ./providers.yaml \ --dataset-type custom --input-path ./built_in_dataset/ \ --concurrency-backend threading-pool \ --backend embedding --warmup 1 \ --epochs 2 \ --num-requests 1,2,4,8 --concurrency 1,2,4,8 \ --input-length 128,128,2048,2048 --output-length 128,2048,128,2048 \ --benchmark-save-path ./output_path/
基于rerank数据集对rerank模型进行并发测试
使用acs-bench prof命令进行rerank模型并发测试的示例如下,详细参数解释请参见使用示例的参数说明,输出产物说明参见产物说明。
以多线程并发模式为例,后端backend为rerank,示例如下:
acs-bench prof \
--provider ./providers.yaml \
--dataset-type custom --input-path ./built_in_dataset/ \
--concurrency-backend threading-pool \
--backend rerank --warmup 1 \
--document-size 4,4,4,4 \
--epochs 2 \
--num-requests 1,2,4,8 --concurrency 1,2,4,8 \
--input-length 128,128,2048,2048 --output-length 128,2048,128,2048 \
--benchmark-save-path ./output_path/ 使用示例的参数说明

1.下列参数说明中的${concurrency}、${init-concurrency}、${num-requests}、${input-length}、${output-length}、${config-option}除了支持使用英文逗号(,)隔开的方式指定,逗号中间不能添加空格,也可以分开指定多组参数的使用方式。其中,${num-requests}参数如果不指定,默认和${concurrency}参数的值保持一致。
参考示例如下:
acs-bench prof \ --provider ./providers.yaml \ --dataset-type custom --input-path ./built_in_dataset/ \ --concurrency-backend threading-pool \ --backend openai-chat --warmup 1 \ --epochs 2 \ --num-requests 1 --num-requests 2 --num-requests 4 --num-requests 8 \ --concurrency 1 --concurrency 2 --concurrency 4 --concurrency 8 \ --input-length 128 --input-length 128 --input-length 2048 --input-length 2048 \ --output-length 128 --output-length 2048 --output-length 128 --output-length 2048 \ --benchmark-save-path ./output_path/
2.性能压测模式验证和爬坡模式验证示例中的${input-length}参数值,必须在提前生成的数据集中存在,如果不存在,参考获取数据集,生成对应输入长度的数据集。
性能benchmark测试参数主要由数据集配置参数Dataset Options、并发控制配置参数Concurrency Options、指标统计配置参数Metrics Options和服务请求配置参数Serving Options四部分组成,以下将按照配置类型进行介绍。
acs-bench prof -h
参数名 | 参数类型 | 是否必选 | 参数说明 |
|---|---|---|---|
-dt/--dataset-type | String | 否 | 指定数据集类型,默认是custom,即自定义制作的数据集。也可指定开源数据集进行直接评测,当前支持“LongBench”、“ShareGpt”。 |
-cfg/--config-option | String | 否 | 多模态配置选项,以“KEY:VALUE”对的形式指定多模态使用的选项,可以提供多个“KEY1:VALUE1,KEY2:VALUE2,”对。允许的键选项包括“image_height”、“image_width”、“duration”和“fps”。 |
-mt/--modal-type | String | 否 | 多模态数据集的模式类型,默认值为text,当前可选项为text、image-text、video-text。 |
-i/--input-path | String | 是 | 指定用于数据集路径。 |
-il/--input-length | Int | 是 | 指定自定义数据集的长度,只在dataset-type为custom时生效,支持指定多组输入长度,使用`,`分隔。 |
-ds/--document-size | Int | 否 | 每个查询的文档大小,支持多个整数输入 |
-n/--num-requests | Int | 是 | 用于并发测试的请求个数,支持指定多组请求数,使用`,`分隔,默认和并发数相等。 |
-t/--tokenizer | String | 否 | tokenizer模型文件夹路径,支持本地路径以及huggingface的模型路径。 |
-rv/--revision | String | 否 | 指定huggingface社区的模型分支,只适用于tokenizer为huggingface的模型路径,默认是master。 |
-seed/--random-seed | Int | 否 | 随机种子,用于固定随机性。 |
-trc/--trust-remote-code | Bool | 否 | 是否信任远端代码,只适用于tokenizer为huggingface的模型路径,默认是False。 |
参数名 | 参数类型 | 是否必选 | 参数说明 |
|---|---|---|---|
-c/--concurrency | Int | 否 | 最大并发数,默认是1,支持指定多组并发数,使用`,`分隔。 |
-nc/--num-process | Int | 否 | 并行处理的进程数,应该小于等于cpu数量,支持指定多组进程数,使用`,`分隔,默认为[1]。 |
-r/--request-rate | Float | 否 | 请求到达的请求速率,仅在并发数为1时有效,默认值为无穷大(INF)。 |
-rm/--request-mode | String | 否 | 请求到达模式,支持 `normal` 和 `pd-adaptive`,默认值为:normal。 |
-pc/--prefill-concurrency | INT | 否 | PD分离部署场景中,所有prefill的最大并发量,prefill并发数用于PD独立部署,仅在--request-mode为pd-adaptive时有效。 |
-dc/--decoder-concurrency | INT | 否 | PD分离部署场景中,所有Decoder的最大并发量,decode并发数用于PD独立部署,仅在--request-mode为pd-adaptive时有效。 |
-burst/--burstiness | Float | 否 | 请求的突发因子,仅当request_rate不是inf时生效,默认是1.0。 |
-cb/--concurrency-backend | Str | 否 | 并发后端,默认是threading-pool。支持以下参数选项:
|
-ub/--use-climb | Bool | 否 | 是否开启爬坡模式,默认是False,表示不开启爬坡模式 |
-gr/--growth-rate | Int | 否 | 每次爬坡增长的并发个数,只在爬坡模式生效,默认是0。 |
-gi/--growth-interval | Float | 否 | 每次爬坡的时间间隔,只在爬坡模式生效,默认是1000,单位是毫秒(ms)。 |
-ic/--init-concurrency | Int | 否 | 初始并发数,每隔{growth-interval}设置的时间间隔增加{growth-rate}个并发数,只在爬坡模式生效,默认等于concurrency,支持指定多组初始并发数,使用`,`分隔。 |
-cm/--climb-mode | String | 否 | 爬坡模式,只在爬坡模式生效,默认为linear。 支持以下参数选项:
|
参数名 | 参数类型 | 是否必选 | 参数说明 |
|---|---|---|---|
-g, --goodput | String | 否 | 服务SLO,表示满足业务诉求的性能指标,单位是毫秒(ms),支持配置ttft、tpot、e2el三种指标类型。 可以通过-g ttft:50 -g e2e 1000指定ttft和e2e两个指标。 |
-bi, --bucket-interval | Float | 否 | 表示实时性能指标采样间隔,单位是毫秒(ms),若指定该参数,则可以动态统计bucket_interval毫秒内的性能指标变化。 |
参数名 | 参数类型 | 是否必选 | 参数说明 |
|---|---|---|---|
-b, --backend | String | 否 | 请求服务接口类型,支持openai、openai-chat、embedding、rerank。默认是openai-chat。 |
-p, --provider | String | 是 | provider文件路径,需要用户自己创建并指定。 |
-pid, --provider-id | String | 否 | 指定需要测试的provider id,适用于provider文件中有多个配置且只需要运行指定ID的provider场景。 |
-ol/--output-length | Int | 是 | 输出token长度,支持指定多组输出长度,使用`,`分隔。 |
-ra/--range-ratio-above | Float | 否 | 表示输出token长度能够动态上浮的比例,即最大长度为output_length * (1 + range_ratio_above),取值范围是[0, 1],默认是0.0。 |
-rb/--range-ratio-below | Bool | 否 | 表示输出token长度能够动态下潜的比例,即最小长度为output_length * (1 - range_ratio_above),取值范围是[0, 1],默认是0.0。 |
-w/--warmup | Int | 否 | warmup的请求数量,默认是0,表示不开启warmup。 |
-e/--epochs | Int | 否 | 同一个并发配置的计算次数,默认是1,表示每一组并发只执行一次。 |
-tk/--top-k | Int | 否 | Top-k采样参数,仅对与OpenAI兼容的后端有效,默认是-1。 |
-tp/--top-p | Float | 否 | Top-p采样参数,仅对与OpenAI兼容的后端有效,默认是1.0。 |
-mp/--min-p | Float | 否 | Min-p采样参数,表示一个token被考虑的最小概率。必须位于[0, 1]之间。仅对与OpenAI兼容的后端有效。 |
-temper/--temperature | Float | 否 | Temperature采样参数,默认是0。 |
-cs/--chunk-size | Int | 否 | 流式请求中,返回的chunk大小,默认是1024。 |
-ef/--encoding-format | String | 否 | 嵌入后端的返回编码格式支持“float”或“base64”,默认值为float。 |
-usd/--use-spec-decode | Bool | 否 | 表示服务端是否开启了投机推理。若开启投机推理,则可以结合--num-spec-tokens参数用于计算MTP的接受率。默认是False,表示不开启投机推理。 |
-nst/--num-spec-tokens | Int | 否 | 表示服务端投机推理配置的投机推理个数,该值设为1表示服务端每次会多推理一个token,则可以结合--use-spec-decode参数用于计算MTP的接受率。默认是-1。 |
-umar/--use-mtp-accept-rate | Bool | 否 | 表示计算MTP接受率时是否忽略模型本身生成的token数。默认是True,表示忽略。 |
-nss/--num-scheduler-steps | Int | 否 | 表示服务端multi step的大小,用于计算MTP的接受率,默认是1。 |
-timeout/--timeout | Float | 否 | 请求超时时间,默认是1000,单位是秒(s)。 |
-ie/--ignore-eos | Bool | 否 | 是否忽略EOS,默认是True,表示忽略EOS标识。 |
-cus/--continuous-usage-stats | Bool | 否 | 流式请求中,是否开启每个返回chunk数据中包含usage信息,默认True,表示每个返回chunk数据中包含usage信息。 |
-sst/--skip-special-tokens | Bool | 否 | 是否跳过特殊标记,默认值:False。 |
-er/--enable-max-tokens-exclude-reasoning | Bool | 否 | 是否启用max-tokens排除推理功能,该功能将在达到max-tokens时主动断开与服务器的连接,默认值为:True。 |
-pf/ --profile | Bool | 否 | 是否采集服务端Service Profiler信息。默认是False,表示不采集。 warmup阶段不会采集服务端服务化信息。 |
-pl/--profile-level | String | 否 | 服务端Service Profiler的采集级别,支持Level_none、Level0、Level1、Level2,只在开启profile场景生效,默认是none。 |
-trace/--trace | Bool | 否 | 是否打开工具trace开关,开启后会对并发过程进行跟踪和呈现。默认是False,表示不开启。 |
-s/--benchmark-save-path | String | 否 | 性能指标落盘的文件夹路径,默认为./benchmark_output。 |
产物说明
脚本运行完成后,会在--benchmark-save-path参数指定的输出路径下,会创建一个requests目录和summary开头的csv文件,其中在requests目录下,输出以requests开头的csv文件
1.requests_{provider}_{dataset_type}_{control_method}_concurrency{concurrency}_{concurrency_backend}_input{input_length}_output{output_length}_{current_time}.csv
2.summary_{provider}_{control_method}_{concurrency_backend}_{current_time}.csv
示例如下图所示。



