多轮对话测评指南
多轮对话简介
多轮对话是指用户与服务后端之间进行多次交互的对话形式。与单轮对话(用户问一个问题,系统回答一个问题)不同,多轮对话可以包含多个回合,每个回合都依赖于之前的对话内容。这种对话形式更接近人类之间的自然交流。
测评能力介绍
当前支持多轮对话数据的服务化性能测评,不同服务化和数据集支持度如下:
服务化支持列表:
✅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端感知的服务时间并发数:
⚠️ 注意: 多轮对话场景下,上半图中会将每组对话中的多轮请求拼成一条线,因此纵坐标的实际含义为多轮对话数据组的索引。
具体html中的图标如何查看请参考📚 性能测试可视化并发图使用说明
具体html中的图标如何查看请参考📚