多轮对话测评指南

多轮对话简介

多轮对话是指用户与服务后端之间进行多次交互的对话形式。与单轮对话(用户问一个问题,系统回答一个问题)不同,多轮对话可以包含多个回合,每个回合都依赖于之前的对话内容。这种对话形式更接近人类之间的自然交流。

测评能力介绍

当前支持多轮对话数据的服务化性能测评,不同服务化和数据集支持度如下:

服务化支持列表:

  • ✅vLLM

  • ✅MindIE Service

  • ✅SGLang

数据集支持列表:

  • ✅ShareGPT

  • ✅MTBench

快速入门

使用说明

  • ⚠️SGLang服务化需更改API配置文件中client为OpenAIChatStreamSglangClient

  • 📚按照轮次作为实际请求数量(例如2组对话共有7轮,测评结果中则有7条请求对应的性能指标)

命令含义

ShareGPT多轮对话vLLM服务化的v1/chat流式接口性能测评场景为例:

ais_bench --models vllm_api_stream_chat --datasets sharegpt_gen --debug -m perf

其中:

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

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

运行命令前置准备

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

  • --datasets: 使用sharegpt_gen数据集任务,需要参考🔗 ShareGPT数据集准备sharegpt数据集。

任务对应配置文件修改

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

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

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

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

06/28 11:52:25 - AISBench - INFO - Searching configs...
╒══════════════╤═══════════════════════════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╕
│ 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    sharegpt_gen                           /your_workspace/benchmark/ais_bench/benchmark/configs/datasets/sharegpt/sharegpt_gen.py                                        │
╘══════════════╧═══════════════════════════════════════╧════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╛
  • 快速入门中数据集任务配置文件sharegpt_gen.py不需要做额外修改,数据集任务配置文件内容介绍可参考📚 配置开源数据集

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

from ais_bench.benchmark.models import VLLMCustomAPIChat
from ais_bench.benchmark.utils.postprocess.model_postprocessors import extract_non_reasoning_content

models = [
    dict(
        attr="service",
        type=VLLMCustomAPIChat,
        abbr='vllm-api-chat-stream',
        path="",                       # 指定模型序列化词表文件绝对路径,一般来说就是模型权重文件夹路径
        model="",                      # 指定服务端已加载模型名称,依据实际VLLM推理服务拉取的模型名称配置
        stream=True,                   # 指定为流式接口
        request_rate=0,                # 请求发送频率,每1/request_rate秒发送1个请求给服务端,小于0.1则一次性发送所有请求
        retry=2,
        api_key="",                    # 自定义api_key,默认为空
        host_ip="localhost",           # 指定推理服务的IP
        host_port=8080,                # 指定推理服务的端口
        url="",                        # 自定义url,默认为空
        max_out_len=512,               # 推理服务输出的token的最大数量
        batch_size=1,                  # 请求发送的最大并发数
        trust_remote_code=False,
        generation_kwargs=dict(
            temperature=0.01,
            ignore_eos=False
        ),
        pred_postprocessor=dict(type=extract_non_reasoning_content),
    )
]

执行命令

修改好配置文件后,执行命令启动服务化性能评测(⚠️ 第一次执行建议加上--debug,可以将具体日志打屏,如果有请求推理服务过程中的报错更方便处理):

# 命令行加上--debug
ais_bench --models vllm_api_stream_chat --datasets sharegpt_gen -m perf --debug

查看性能结果

性能结果打屏示例如下:

06/05 20:22:24 - AISBench - INFO - Performance Results of task: vllm-api-chat-stream/sharegptdataset:

╒══════════════════════════╤═════════╤══════════════════╤══════════════════╤══════════════════╤══════════════════╤══════════════════╤══════════════════╤══════════════════╤══════╕
│ Performance Parameters    Stage    Average           Min               Max               Median            P75               P90               P99                N   │
╞══════════════════════════╪═════════╪══════════════════╪══════════════════╪══════════════════╪══════════════════╪══════════════════╪══════════════════╪══════════════════╪══════╡
│ E2EL                      total    2048.2945  ms     1729.7498 ms      3450.96 ms        2491.8789 ms      2750.85 ms        3184.9186 ms      3424.4354 ms      8    │
├──────────────────────────┼─────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────┤
│ TTFT                      total    50.332 ms         50.6244 ms        52.0585 ms        50.3237 ms        50.5872 ms        50.7566 ms        50 .0551 ms       8    │
├──────────────────────────┼─────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────┤
│ TPOT                      total    10.6965 ms        10.061 ms         10.8805 ms        10.7495 ms        10.7818 ms        10.808 ms         10.8582 ms        8    │
├──────────────────────────┼─────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────┤
│ ITL                       total    10.6965 ms        7.3583 ms         13.7707 ms        10.7513 ms        10.8009 ms        10.8358 ms        10.9322 ms        8    │
├──────────────────────────┼─────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────┤
│ InputTokens               total    1512.5            1481.0            1566.0            1511.5            1520.25           1536.6            1563.06           8    │
├──────────────────────────┼─────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────┤
│ OutputTokens              total    287.375           200.0             407.0             280.0             322.75            374.8             403.78            8    │
├──────────────────────────┼─────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────┤
│ OutputTokenThroughput     total    115.9216 token/s  107.6555 token/s  116.5352 token/s  117.6448 token/s  118.2426 token/s  118.3765 token/s  118.6388 token/s  8    │
╘══════════════════════════╧═════════╧══════════════════╧══════════════════╧══════════════════╧══════════════════╧══════════════════╧══════════════════╧══════════════════╧══════╛
╒══════════════════════════╤═════════╤════════════════════╕
│ Common Metric             Stage    Value              │
╞══════════════════════════╪═════════╪════════════════════╡
│ Benchmark Duration        total    19897.8505 ms      │
├──────────────────────────┼─────────┼────────────────────┤
│ Total Requests            total    8                  │
├──────────────────────────┼─────────┼────────────────────┤
│ Failed Requests           total    0                  │
├──────────────────────────┼─────────┼────────────────────┤
│ Success Requests          total    8                  │
├──────────────────────────┼─────────┼────────────────────┤
│ Concurrency               total    0.9972             │
├──────────────────────────┼─────────┼────────────────────┤
│ Max Concurrency           total    1                  │
├──────────────────────────┼─────────┼────────────────────┤
│ Request Throughput        total    0.4021 req/s       │
├──────────────────────────┼─────────┼────────────────────┤
│ Total Input Tokens        total    12100              │
├──────────────────────────┼─────────┼────────────────────┤
│ Prefill Token Throughput  total    17014.3123 token/s │
├──────────────────────────┼─────────┼────────────────────┤
│ Total generated tokens    total    2299               │
├──────────────────────────┼─────────┼────────────────────┤
│ Input Token Throughput    total    608.7438 token/s   │
├──────────────────────────┼─────────┼────────────────────┤
│ Output Token Throughput   total    115.7835 token/s   │
├──────────────────────────┼─────────┼────────────────────┤
│ Total Token Throughput    total    723.5273 token/s   │
╘══════════════════════════╧═════════╧════════════════════╛

06/05 20:22:24 - AISBench - INFO - Performance Result files locate in outputs/default/20250605_202220/performances/vllm-api-chat-stream.

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

性能细节查看

执行AISBench命令后,任务执行更多细节最终会落盘在默认的输出路径,这个输出路径在运行中的打屏日志中有提示,例如:

06/28 15:13:26 - AISBench - INFO - Current exp folder: outputs/default/20250628_151326

这段日志说明任务执行的细节落盘在执行命令的路径下的outputs/default/20250628_151326中。 命令执行结束后outputs/default/20250628_151326中的任务执行的细节如下所示:

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

💡其中 sharegptdataset_plot.html这个请求并发可视化报告建议使用Chrome或者Edge等浏览器打开,可以看到每个请求的时延以及每个时刻client端感知的服务时间并发数:

⚠️ 注意: 多轮对话场景下,上半图中会将每组对话中的多轮请求拼成一条线,因此纵坐标的实际含义为多轮对话数据组的索引。 full_plot_example.img 具体html中的图标如何查看请参考📚 性能测试可视化并发图使用说明