服务化性能测评指南

简介

AISBench Benchmark 提供服务化性能测评能力。针对流式推理场景,通过精确记录每条请求的发送时间、各阶段返回时间及响应内容,系统地评估模型服务在实际部署环境中的响应延迟(如 TTFT、Token间延迟)、吞吐能力(如 QPS、TPUT)、并发处理能力等关键性能指标。

用户可通过配置服务化后端参数,灵活控制请求内容、请求间隔、并发数量等,适配不同评测场景(如低并发延迟敏感型、高并发吞吐优先型等)。测评支持自动化执行并输出结构化结果,便于横向对比不同模型、部署方案、硬件配置下的服务性能差异。

服务化性能测评快速入门

命令含义

AISBench服务化性能测评命令含义与📚 工具快速入门/命令含义中的解释相同。在此基础上需要额外加上--mode perf-m perf来进入性能评测场景,以如下AISBench命令为例:

ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --summarizer default_perf --mode perf

其中:

  • --models指定了模型任务,即vllm_api_stream_chat模型任务。

  • --datasets指定了数据集任务,即demo_gsm8k_gen_4_shot_cot_chat_prompt数据集任务。

  • --summarizer指定了结果呈现任务,即default_perf结果呈现任务(不指定--summarizer精度评测场景默认使用default_perf任务),一般使用默认,不需要在命令行中指定,后续命令不指定。

任务含义查询(可选)

所选模型任务vllm_api_stream_chat、数据集任务demo_gsm8k_gen_4_shot_cot_chat_prompt和结果呈现任务default_perf的具体信息(简介,使用约束等)可以分别从如下链接中查询含义:

运行命令前置准备

  • --models: 使用vllm_api_stream_chat模型任务,需要准备支持v1/chat/completions子服务的推理服务,可以参考🔗 VLLM启动OpenAI 兼容服务器启动推理服务

  • --datasets: 使用demo_gsm8k_gen_4_shot_cot_chat_prompt数据集任务,需要准备gsm8k数据集,可以从🔗 opencompass 提供的gsm8k数据集压缩包下载。将解压后的gsm8k/文件夹部署到AISBench评测工具根路径下的ais_bench/datasets文件夹下。

任务对应配置文件修改

每个模型任务、数据集任务和结果呈现任务都对应一个配置文件,运行命令前需要修改这些配置文件的内容。这些配置文件路径可以通过在原有AISBench命令基础上加上--search来查询,例如:

# 注意search的命令中是否加 "--mode perf" 不影响搜索结果
ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --mode perf --search

⚠️ 注意: 执行带search命令会打印出任务对应的配置文件的绝对路径。

执行查询命令可以得到如下查询结果:

╒══════════════╤═══════════════════════════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╕
│ Task Type     Task Name                              Config File Path                                                                                                               │
╞══════════════╪═══════════════════════════════════════╪════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
│ --models      vllm_api_stream_chat                   /your_workspace/benchmark/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py                                 │
├──────────────┼───────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ --datasets    demo_gsm8k_gen_4_shot_cot_chat_prompt  /your_workspace/benchmark/ais_bench/benchmark/configs/datasets/demo/demo_gsm8k_gen_4_shot_cot_chat_prompt.py                   │
╘══════════════╧═══════════════════════════════════════╧════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╛
  • 快速入门中数据集任务配置文件demo_gsm8k_gen_4_shot_cot_chat_prompt.py不需要做额外修改,数据集任务配置文件内容介绍可参考📚 配置开源数据集

模型配置文件vllm_api_stream_chat.py中包含了模型运行相关的配置内容,是需要依据实际情况修改的。快速入门中需要修改的内容用注释标明。

from ais_bench.benchmark.models import VLLMCustomAPIChatStream

models = [
    dict(
        attr="service",
        type=VLLMCustomAPIChat,
        abbr='vllm-api-general-chat',
        path="",                    # 指定模型序列化词表文件绝对路径(精度测试场景一般不需要配置)
        model="",        # 指定服务端已加载模型名称,依据实际VLLM推理服务拉取的模型名称配置(配置成空字符串会自动获取)
        stream=True, # 服务化性能只支持评测流式接口
        request_rate=0,           # 请求发送频率,每1/request_rate秒发送1个请求给服务端,小于0.1则一次性发送所有请求
        use_timestamp=False,      # 是否按数据集中 timestamp 调度请求,适用于含 timestamp 的数据集(如 Mooncake Trace)
        retry=2,                  # 每个请求最大重试次数
        api_key="",               # 自定义API key,默认是空字符串
        host_ip="localhost",      # 指定推理服务的IP
        host_port=8080,           # 指定推理服务的端口
        url="",                     # 自定义访问推理服务的URL路径(当base url不是http://host_ip:host_port的组合时需要配置,配置后host_ip和host_port将被忽略)
        max_out_len=512,          # 推理服务输出的token的最大数量
        batch_size=1,               # 请求发送的最大并发数
        trust_remote_code=False,    # tokenizer是否信任远程代码,默认False;
        generation_kwargs=dict(   # 模型推理参数,参考VLLM文档配置,AISBench评测工具不做处理,在发送的请求中附带
            temperature=0.01,
            ignore_eos=True, # 测性能时如果需要限定输出长度,需要将ignore_eos设置为True
        )
    )
]

执行命令

修改好配置文件后,执行命令启动服务化性能评测:

ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt -m perf

查看任务执行细节

执行AISBench命令后,正在执行的任务状态会在命令行实时刷新的看板上显示(键盘按"P"键可以停止刷新,用于复制看板信息,再按"P"可以继续刷新),例如:

Base path of result&log : outputs/default/20251106_103326
Task Progress Table (Updated at: 2025-11-06 10:34:41)
Page: 1/1  Total 2 rows of data
Press Up/Down arrow to page,  'P' to PAUZE/RESUME screen refresh, 'Ctrl + C' to exit

+---------------------------------+-----------+-------------------------------------------------+-------------+-------------+------------------------------------------------+------------------------------------------------+
| Task Name                       |   Process | Progress                                        | Time Cost   | Status      | Log Path                                       | Extend Parameters                              |
+=================================+===========+=================================================+=============+=============+================================================+================================================+
| vllm-api-stream-chat/demo_gsm8k |    744887 | [###########                   ] 3/8 [0.1 it/s] | 0:00:54     | inferencing | logs/infer/vllm-api-stream-chat/demo_gsm8k.out | {'POST': 4, 'RECV': 3, 'FINISH': 3, 'FAIL': 0} |
+---------------------------------+-----------+-------------------------------------------------+-------------+-------------+------------------------------------------------+------------------------------------------------+
`

任务执行的细节日志会不断落盘在默认的输出路径,这个输出路径在实时刷新的看板上显示,即Log PathLog Pathlogs/infer/vllm-api-stream-chat/demo_gsm8k.out)是在Base pathoutputs/default/20251106_103326)下的路径,以上述的看板信息为例,任务执行的详细日志路径为:

# {Base path}/{Log Path}
outputs/default/20251106_103326/logs/infer/vllm-api-stream-chat/demo_gsm8k.out

💡 如果希望执行过程中将详细日志直接打印,执行命令时可以加上 --debug: ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt -m perf --debug

查看性能结果

性能结果打屏示例如下:

[2025-11-06 10:35:43,667] [ais_bench] [INFO] Performance Results of task: vllm-api-stream-chat/demo_gsm8k:
╒══════════════════════════╤═════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════╕
│ Performance Parameters    Stage    Average          Min              Max              Median           P75              P90              P99               N  │
╞══════════════════════════╪═════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════╡
│ E2EL                      total    12300.2 ms       12295.9 ms       12305.2 ms       12300.0 ms       12302.1 ms       12304.3 ms       12305.1 ms        8  │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────┤
│ TTFT                      total    2006.0 ms        2005.1 ms        2007.4 ms        2006.1 ms        2006.2 ms        2006.6 ms        2007.3 ms         8  │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────┤
│ TPOT                      total    20.1 ms          20.1 ms          20.2 ms          20.1 ms          20.1 ms          20.2 ms          20.2 ms           8  │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────┤
│ ITL                       total    20.1 ms          19.8 ms          21.3 ms          20.1 ms          20.2 ms          20.2 ms          20.4 ms           8  │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────┤
│ InputTokens               total    1512.5           1481.0           1566.0           1511.5           1520.25          1536.6           1563.06           8  │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────┤
│ OutputTokens              total    512.0            512.0            512.0            512.0            512.0            512.0            512.0             8  │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────┤
│ OutputTokenThroughput     total    41.6254 token/s  41.6085 token/s  41.6398 token/s  41.6261 token/s  41.6338 token/s  41.6375 token/s  41.6395 token/s   8  │
╘══════════════════════════╧═════════╧═════════════════╧═════════════════╧═════════════════╧═════════════════╧═════════════════╧═════════════════╧═════════════════╧═════╛
╒══════════════════════════╤═════════╤══════════════════╕
│ Common Metric             Stage    Value            │
╞══════════════════════════╪═════════╪══════════════════╡
│ Benchmark Duration        total    98409.4916 ms    │
├──────────────────────────┼─────────┼──────────────────┤
│ Total Requests            total    8                │
├──────────────────────────┼─────────┼──────────────────┤
│ Failed Requests           total    0                │
├──────────────────────────┼─────────┼──────────────────┤
│ Success Requests          total    8                │
├──────────────────────────┼─────────┼──────────────────┤
│ Concurrency               total    0.9999           │
├──────────────────────────┼─────────┼──────────────────┤
│ Max Concurrency           total    1                │
├──────────────────────────┼─────────┼──────────────────┤
│ Request Throughput        total    0.0813 req/s     │
├──────────────────────────┼─────────┼──────────────────┤
│ Total Input Tokens        total    12100            │
├──────────────────────────┼─────────┼──────────────────┤
│ Prefill Token Throughput  total    753.9843 token/s │
├──────────────────────────┼─────────┼──────────────────┤
│ Total Generated Tokens    total    4096             │
├──────────────────────────┼─────────┼──────────────────┤
│ Input Token Throughput    total    122.9556 token/s │
├──────────────────────────┼─────────┼──────────────────┤
│ Output Token Throughput   total    41.622 token/s   │
├──────────────────────────┼─────────┼──────────────────┤
│ Total Token Throughput    total    164.5776 token/s │
╘══════════════════════════╧═════════╧══════════════════╛
[2025-11-06 10:35:43,672] [ais_bench] [INFO] Performance Result files located in outputs/default/20251106_103326/performances/vllm-api-stream-chat.

💡 具体性能参数的含义请参考📚 性能测评结果说明

性能细节查看

执行AISBench命令后,任务执行更多细节最终会落盘在Base pathoutputs/default/20251106_103326

命令执行结束后outputs/default/20250628_151326中的任务执行的细节如下所示:

20251106_103326          # 每次实验基于时间戳生成的唯一目录
├── configs               # 自动存储的所有已转储配置文件
├── logs                  # 执行过程中日志,命令中如果加--debug,不会有过程日志落盘(都直接打印出来了)   └── performance/      # 推理阶段的日志文件
└── performance           # 性能测评结果    └── vllm-api-stream-chat/          # “服务化模型配置”名称,对应模型任务配置文件中models的 abbr参数         ├── demo_gsm8k.csv          # 单次请求性能输出(CSV),与性能结果打屏中的Performance Parameters表格一致         ├── demo_gsm8k.json         # 端到端性能输出(JSON),与性能结果打屏中的Common Metric表格一致         ├── demo_gsm8k_plot.html    # 请求并发可视化报告(HTML)         └── ......

💡其中 demo_gsm8k_plot.html这个请求并发可视化报告建议使用Chrome或者Edge等浏览器打开,可以看到每个请求的时延以及每个时刻client端感知的服务时间并发数: full_plot_example.img 该html可视化图文件的使用方式请参考📚 性能测试可视化并发图使用说明

服务化性能测评前置约束

在执行服务化推理前,需要满足以下条件:

  • 可访问的服务化模型服务:确保服务进程可在当前环境下直接访问。

  • 数据集准备:

    • 开源数据集:从📚 开源数据集中选择数据集,并且在数据集对应的"详细介绍"文档中选择要执行的数据集任务。参考选取的数据集任务对应的"详细介绍"文档准备好数据集文件,建议将开源数据集手动放置在默认目录 ais_bench/datasets/下,程序将在任务执行时自动加载数据集文件。

    • 随机合成数据集:数据集任务选synthetic_gen,其他配置参考📚 随机合成数据集

    • 自定义数据集:无需指定数据集任务,其他配置参考📚 自定义数据集

  • 服务化模型后端配置:从服务化推理后端中选择接口类型为流式接口的子服务(⚠️ 其他不支持)。

主要功能场景

单任务评测

参考服务化性能测评快速入门

多任务测评

支持同时配置多个模型或多个数据集任务,通过单次命令进行批量测评,适用于多个测试命令串行执行。

命令说明

用户可通过--models--datasets参数指定多个配置任务,子任务数为--models配置任务数和--datasets配置任务数的乘积,即一个模型配置和一个数据集配置组成一个子任务,示例:

ais_bench --models vllm_api_general_stream vllm_api_stream_chat --datasets gsm8k_gen_4_shot_cot_str aime2024_gen_0_shot_str --mode perf

上述命令指定了2个模型任务(vllm_api_general_stream vllm_api_stream_chat)和2个数据集任务(gsm8k_gen_4_shot_cot_str aime2024_gen_0_shot_str),将执行以下4个组合性能测试任务:

修改任务对应的配置文件

模型任务和数据集任务对应的配置文件实际路径通过执行加--search命令查询:

ais_bench --models vllm_api_general_stream vllm_api_stream_chat --datasets gsm8k_gen_4_shot_cot_str aime2024_gen_0_shot_str --mode perf --search

查询到如下配置文件需要修改:

╒═════════════╤══════════════════════════╤═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╕
│ Task Type    Task Name                 Config File Path                                                                                                          │
╞═════════════╪══════════════════════════╪═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
│ --models     vllm_api_general_stream   /your_workspace/benchmark_test/ais_bench/benchmark/configs/models/vllm_api/vllm_api_general_stream.py                     │
├─────────────┼──────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ --models     vllm_api_stream_chat      /your_workspace/benchmark_test/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py                        │
├─────────────┼──────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ --datasets   gsm8k_gen_4_shot_cot_str  /your_workspace/benchmark_test/ais_bench/benchmark/configs/datasets/gsm8k/gsm8k_gen_4_shot_cot_str.py                     │
├─────────────┼──────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ --datasets   aime2024_gen_0_shot_str   /your_workspace/benchmark_test/ais_bench/benchmark/configs/datasets/aime2024/aime2024_gen_0_shot_str.py                   │
╘═════════════╧══════════════════════════╧═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╛
  • 参考📚 服务化推理后端配置参数说明按照实际情况配置模型任务vllm_api_general_streamvllm_api_stream_chat对应的配置文件。

  • 参考📚 配置开源数据集按照实际情况配置数据集任务gsm8k_gen_4_shot_cot_straime2024_gen_0_shot_str对应的配置文件。:如果数据集放在默认目录 ais_bench/datasets/下,则一般不需要配置

执行评测命令

执行命令:

ais_bench --models vllm_api_general_stream vllm_api_stream_chat --datasets gsm8k_gen_4_shot_cot_str aime2024_gen_0_shot_str --mode perf

执行过程中会在📚 --work-dir路径(默认是outputs/default/)下创建时间戳目录用于保存执行细节。 4个性能评测任务结束后会一次性打印4个任务的性能结果:

[2025-11-06 10:35:43,667] [ais_bench] [INFO] Performance Results of task: vllm-api-stream-chat/demo_gsm8k:
╒══════════════════════════╤═════════╤═════════════════╤═══════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤══════╕
│ Performance Parameters    Stage    Average          Min            Max              Median           P75              P90              P99               N   │
╞══════════════════════════╪═════════╪═════════════════╪═══════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪══════╡
│ E2EL                      total    2754.0929 ms     2189.0804 ms   3366.1463 ms     2753.1668 ms     3048.2929 ms     3222.573 ms      3303.3894 ms     1319 │
......
╒══════════════════════════╤═════════╤════════════════════╕
│ Common Metric             Stage    Value              │
╞══════════════════════════╪═════════╪════════════════════╡
│ Benchmark Duration        total    38039.9928 ms      │
......
[2025-11-06 11:11:33,468] [ais_bench] [INFO] Performance Result files located in outputs/default/20251106_110904/performances/vllm-api-general-stream.
[2025-11-06 11:11:33,468] [ais_bench] [INFO] Performance Results of task: vllm-api-general-stream/aime2024:
╒══════════════════════════╤═════════╤═════════════════╤════════════════╤════════════════╤═══════════════╤═════════════════╤═════════════════╤═════════════════╤═════╕
│ Performance Parameters    Stage    Average          Min             Max             Median         P75              P90              P99               N  │
╞══════════════════════════╪═════════╪═════════════════╪════════════════╪════════════════╪═══════════════╪═════════════════╪═════════════════╪═════════════════╪═════╡
│ E2EL                      total    2868.1822 ms     2277.1049 ms    3307.2084 ms    2941.6767 ms   3158.5361 ms     3220.2141 ms     3307.0174 ms     30  │
......
╒══════════════════════════╤═════════╤═══════════════════╕
│ Common Metric             Stage    Value             │
╞══════════════════════════╪═════════╪═══════════════════╡
│ Benchmark Duration        total    3346.9782 ms      │
......
[2025-11-06 11:11:33,471] [ais_bench] [INFO] Performance Result files located in outputs/default/20251106_110904/performances/vllm-api-general-stream.
[2025-11-06 11:11:33,471] [ais_bench] [INFO] Performance Results of task: vllm-api-stream-chat/gsm8k:
╒══════════════════════════╤═════════╤═════════════════╤════════════════╤═════════════════╤═════════════════╤═════════════════╤════════════════╤═════════════════╤══════╕
│ Performance Parameters    Stage    Average          Min             Max              Median           P75              P90             P99               N   │
╞══════════════════════════╪═════════╪═════════════════╪════════════════╪═════════════════╪═════════════════╪═════════════════╪════════════════╪═════════════════╪══════╡
│ E2EL                      total    2753.3518 ms     2189.5185 ms    3339.4463 ms     2755.8153 ms     3039.7431 ms     3219.6642 ms    3313.0408 ms     1319 │
......
╒══════════════════════════╤═════════╤════════════════════╕
│ Common Metric             Stage    Value              │
╞══════════════════════════╪═════════╪════════════════════╡
│ Benchmark Duration        total    38101.2396 ms      │
......
[2025-11-06 11:11:33,474] [ais_bench] [INFO] Performance Result files located in outputs/default/20251106_110904/performances/vllm-api-stream-chat.
[2025-11-06 11:11:33,474] [ais_bench] [INFO] Performance Results of task: vllm-api-stream-chat/aime2024:
╒══════════════════════════╤═════════╤═════════════════╤═══════════════╤════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════╕
│ Performance Parameters    Stage    Average          Min            Max             Median           P75              P90              P99               N  │
╞══════════════════════════╪═════════╪═════════════════╪═══════════════╪════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════╡
│ E2EL                      total    2745.4115 ms     2187.5882 ms   3288.4635 ms    2820.7541 ms     2988.8338 ms     3188.436 ms      3273.7475 ms     30  │
......
╒══════════════════════════╤═════════╤═══════════════════╕
│ Common Metric             Stage    Value             │
╞══════════════════════════╪═════════╪═══════════════════╡
│ Benchmark Duration        total    3335.7672 ms      │
......
[2025-11-06 11:11:33,477] [ais_bench] [INFO] Performance Result files located in outputs/default/20251106_110904/performances/vllm-api-stream-chat.

同时最终生成的目录结构如下:

# output/default下
20251106_110904/     # 任务创建时间对应的输出目录
├── configs          # 模型任务、数据集任务和结构呈现任务对应的配置文件合成的一个配置件
├── logs             # 包含推理与精度评估阶段的日志,命令加--debug时会直接打屏不会生成落盘文件   └── performance  # 推理阶段的日志文件
└── performances     # 性能测评结果
    ├── vllm-api-general-stream            # “服务化模型配置”名称,对应模型任务配置文件中models的 abbr参数
       ├── aime2024.csv            # 单次请求性能输出(CSV),与性能结果打屏中的Performance Parameters表格一致
       ├── aime2024.json           # 端到端性能输出(JSON),与性能结果打屏中的Common Metric表格一致
       ├── aime2024_plot.html      # 请求并发可视化报告(HTML)
       ├── gsm8k.csv
       ├── gsm8k.json
       ├── gsm8k_plot.html
       └── ......
    └── vllm-api-stream-chat
        ├── aime2024.csv
        ├── aime2024.json
        ├── aime2024_plot.html
        ├── gsm8k.csv
        ├── gsm8k.json
        ├── gsm8k_plot.html
        └── ......

⚠️ 注意:

  • 在多任务性能测评场景下,--datasets指定的数据集任务必须属于不同的数据集类型,性能数据会因为覆盖而缺失。例如不可通过--datasets同时指定aime2024_gen_0_shot_straime2024_gen_0_shot_chat_prompt这两个数据集任务。

自定义序列长度测评

1 配置自定义序列数据集输入输出分布

自定义序列长度测评需要指定特殊的数据集任务synthetic_gen_string,执行如下命令来检索synthetic_gen_string对应的配置文件所在路径”:

ais_bench --models vllm_api_stream_chat --datasets synthetic_gen_string --search

得到:

╒══════════════╤═══════════════════════════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╕
│ Task Type    │ Task Name                             │ Config File Path                                                                                                               │
╞══════════════╪═══════════════════════════════════════╪════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
│ --models     │ vllm_api_stream_chat                  │ /your_workspace/benchmark/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py                                 │
├──────────────┼───────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ --datasets   │ synthetic_gen_string                  │ /your_workspace/benchmark/ais_bench/benchmark/configs/datasets/synthetic/synthetic_gen_string.py                               │
╘══════════════╧═══════════════════════════════════════╧════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╛

修改/your_workspace/benchmark/ais_bench/benchmark/configs/datasets/synthetic/synthetic_gen_string.py中的synthetic_config。配置内容如下所示:

synthetic_config = {
    "Type": "string",
    "RequestCount": 1000, # 请求个数(数据集条数)
    "StringConfig": {
        "Input": {
            "Method": "uniform",
            "Params": {"MinValue": 50, "MaxValue": 500}  # 输入长度50-500
        },
        "Output": {
            "Method": "uniform",
            "Params": {"MinValue": 20, "MaxValue": 200}  # 输出长度20-200
        }
    }
}

💡更多的自定义输入输出分布可参考📚 随机合成数据集

2 确保推理服务达到设置的最大输出

为了确保推理服务达到设置的最大输出,需要在📚 服务化模型配置generation_kwargs 中配置特殊的后处理参数ignore_eos = True,以控制请求的最大输出长度(不提前结束)。

例如修改vllm_api_stream_chat模型任务对应的配置文件vllm_api_stream_chat.py内容:

from ais_bench.benchmark.models import VLLMCustomAPIChatStream
models = [
    dict(
        attr="service",
        type=VLLMCustomAPIChatStream,
        abbr='vllm-api-stream-chat',
        # 端口 IP等其他模型任务参数请自行配置好
        generation_kwargs = dict(
            # .....
            ignore_eos = True,      # 推理服务输出忽略eos(输出长度一定会达到max_out_len)
        )
    )
]

3 启动性能测评

执行以下命令:

ais_bench --models  vllm_api_stream_chat --datasets synthetic_gen_string -m perf

完成后,输出目录结构同多任务测评章节所示,会在 performance/vllm-api-stream-chat/synthetic* 下生成相应的 CSV/JSON/HTML 文件。

⚠️ 注意:

  • 部分服务化后端不支持 ignore_eos 后处理参数,此时实际输出的 Token 数可能无法达到所配置的最大输出长度,需要通过其他后处理参数的配置达到最大输出长度(例如限定最小输出的后处理参数等)。

固定请求数测评

当集规模过大,只想针数据对部分样本执行性能测试时,可使用 📚 --num-prompts 参数指定读取的数据条数。示例如下:

ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt -m perf --num-prompts 1

上述命令仅对示例数据集中的第一条记录进行推理并测量性能。

⚠️ 注意:当前数据集会按照默认队列顺序依次读取,不支持随机抽样或打乱顺序。

其他功能场景

性能结果重计算

性能测试的主要功能场景评测工具会执行完整的性能采样 → 计算 → 汇总流程

graph LR;
  A[基于给定数据集执行推理] --> B((性能打点数据))
  B --> C[基于打点数据进行指标计算]
  C --> D((性能数据))
  D --> E[基于性能数据生成汇总报告]
  E --> F((呈现结果))

执行流程的每个环节是独立解耦的,计算和汇总可以基于性能采样的结果反复执行。如果直接打印出的性能数据不包含相关维度的数据(例如缺少percentage 95%的数据),就需要做一些配置修改来重计算,具体操作如下。

假设上次执行性能测评的命令是:

ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --mode perf

打印出的Performance Parameters表格如下所示:

[2025-11-06 11:11:33,463] [ais_bench] [INFO] Performance Results of task: vllm-api-general-stream/gsm8k:
╒══════════════════════════╤═════════╤═════════════════╤════════════════╤═════════════════╤═════════════════╤═════════════════╤════════════════╤═════════════════╤══════╕
│ Performance Parameters    Stage    Average          Min             Max              Median           P75              P90             P99               N   │
╞══════════════════════════╪═════════╪═════════════════╪════════════════╪═════════════════╪═════════════════╪═════════════════╪════════════════╪═════════════════╪══════╡
│ E2EL                      total    2753.3518 ms     2189.5185 ms    3339.4463 ms     2755.8153 ms     3039.7431 ms     3219.6642 ms    3313.0408 ms     1319 │
......

如果想知道“P95”维度的性能数据,需要修改--summarizer对应的默认结果呈现任务default_perf对应的配置文件内容,default_perf的路径通过--search命令查询:

╒══════════════╤══════════════╤═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╕
│ Task Type     Task Name     Config File Path                                                                                              │
╞══════════════╪══════════════╪═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
│ --summarizer  default_perf  /your_workspace/ais_bench/benchmark/configs/summarizers/perf/default_perf.py                                  │
╘══════════════╧══════════════╧═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╛

修改default_perf.py的内容:

from mmengine.config import read_base
from ais_bench.benchmark.summarizers import DefaultPerfSummarizer
from ais_bench.benchmark.calculators import DefaultPerfMetricCalculator

summarizer = dict(
    type=DefaultPerfSummarizer,
    calculator=dict(
        type=DefaultPerfMetricCalculator,
        stats_list=["Average", "Min", "Max", "Median", "P95"],
    )
)

其中stats_list中最多同时承载8个性能维度的数据。

修改完毕后可以执行如下命令重计算性能指标:

## 注意必须指定--summarizer default_perf
ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --summarizer default_perf --mode perf_viz --pressure --debug --reuse 20250628_151326

性能结果打屏如下:

[2025-11-06 11:11:33,463] [ais_bench] [INFO] Performance Results of task: vllm-api-general-stream/gsm8k:
╒══════════════════════════╤═════════╤════════════════╤═════════════════╤═════════════════╤════════════════╤═════════════════╤═════╕
│ Performance Parameters    Stage    Average         Min              Max              Median          P95               N  │
╞══════════════════════════╪═════════╪════════════════╪═════════════════╪═════════════════╪════════════════╪═════════════════╪═════╡
│ E2EL                      total    2761.6153 ms    2493.8016 ms     3086.0523 ms     2848.9603 ms    3021.0043 ms      8  │
......
╒══════════════════════════╤═════════╤═══════════════════╕
│ Common Metric             Stage    Value             │
╞══════════════════════════╪═════════╪═══════════════════╡
│ Benchmark Duration        total    3090.7835 ms      │
......
[2025-11-06 11:11:33,468] [ais_bench] [INFO] Performance Result files located in outputs/default/20251106_110904/performances/vllm-api-general-stream.

⚠️ 20251106_110904/performance/gsm8kdataset.csvgsm8kdataset_details.jsongsm8kdataset_plot.html会重新生成(覆盖原有的)。

服务化性能测试规格说明

服务化性能测试的规模决定了AISBench评测工具的资源占用。以自定义序列长度测评为例,测试规模主要由总请求条数(RequestCount)、数据集输入tokens长度(Input),输出tokens长度(Output)决定。在Intel(R) Xeon(R) Platinum 8480P型号cpu上测试,典型测试规模下资源的占用大致如下:

总请求条数(RequestCount

数据集输入tokens长度(Input

tokens长度(Output

最大内存占用(GB)

最大磁盘占用(GB)

性能数据计算时间(s)

备注

10000

1024

1024

< 16

0.12

3

10000

1024

4096

< 16

0.16

4

10000

4096

4096

< 16

0.17

6

50000

4096

4096

< 32

0.80

30

250000

4096

4096

< 64

4.00

150

最大规格

⚠️ 性能数据的最大内存占用、最大磁盘占用和计算时长大致与(RequestCount × (Input + Output))大小成正比,AISBench单机能支持的最大规格为RequestCount × (Input + Output) = 250000 * (4096 + 4096) = 2,024,000,000