自定义配置文件运行AISBench
AISBench常规命令调用方式是通过--models指定模型任务,通过--datasets指定数据集任务,通过--summarizer指定结果呈现任务来绝对运行的测评任务,AISBench同样也支持指定自定义的配置文件将这三类任务对应的配置文件信息组合在一起,从而实现自定义的任务组合运行。
为什么使用自定义配置文件
AISBench 提供了两种运行方式:命令行参数方式(CLI) 与 自定义配置文件方式。在实际使用中,推荐优先使用自定义配置文件方式,原因如下:
对比维度 |
CLI 方式 |
配置文件方式 |
|---|---|---|
可复用性 |
每次运行需要重新输入完整命令 |
配置文件可保存、版本管理、反复使用 |
表达能力 |
只能通过参数指定模型/数据集名称 |
可以精确控制模型参数、数据集采样范围、推理配置等所有细节 |
组合灵活性 |
仅支持笛卡尔积组合 |
支持 |
参数覆盖 |
无法修改预设模型/数据集内部参数 |
可直接修改 |
批量运行 |
需要多次执行命令 |
一个配置文件即可同时运行多模型、多数据集组合 |
团队协作 |
命令难以共享和追溯 |
配置文件即代码,可提交到代码仓库进行 review 和复用 |
总结:CLI 方式适合快速验证,配置文件方式适合正式的、可复现的、复杂的测评场景。
配置文件即 Python 脚本
AISBench 的自定义配置文件本质上就是一个 Python 脚本。这意味着你可以在配置文件中使用所有 Python 语法特性来灵活构建测评任务。
使用 for 循环批量构建模型配置
from mmengine.config import read_base
from ais_bench.benchmark.models import VLLMCustomAPIChat
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
datasets = gsm8k_0_shot_cot_str
models = []
for port in [8080, 8081, 8082]:
models.append(
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr=f'vllm-api-chat-port-{port}',
path="",
model="",
request_rate=0,
retry=2,
host_ip="localhost",
host_port=port,
max_out_len=512,
batch_size=1,
generation_kwargs=dict(temperature=0.5, top_k=10, top_p=0.95),
)
)
work_dir = 'outputs/multi_port_benchmark/'
使用列表推导式批量添加数据集
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
from ais_bench.benchmark.configs.datasets.math.math500_gen_0_shot_cot_chat_prompt import math_datasets as math500_gen_0_shot_cot_chat
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_chat import models as vllm_api_general_chat
datasets = gsm8k_0_shot_cot_str + math500_gen_0_shot_cot_chat
datasets = [
dict(d, abbr=f'my_{d["abbr"]}', reader_cfg=dict(d.get('reader_cfg', {}), test_range='[0:100]'))
for d in datasets
]
models = vllm_api_general_chat
work_dir = 'outputs/my_benchmark/'
条件配置:根据环境变量切换
import os
from mmengine.config import read_base
from ais_bench.benchmark.models import VLLMCustomAPIChat, VLLMCustomAPI
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
datasets = gsm8k_0_shot_cot_str
use_stream = os.environ.get('USE_STREAM', 'false').lower() == 'true'
model_type = VLLMCustomAPIChat if use_stream else VLLMCustomAPI
models = [
dict(
attr="service",
type=model_type,
abbr='vllm-api-conditional',
path="",
model="",
stream=use_stream,
request_rate=0,
retry=2,
host_ip=os.environ.get('HOST_IP', 'localhost'),
host_port=int(os.environ.get('HOST_PORT', '8080')),
max_out_len=512,
batch_size=1,
generation_kwargs=dict(temperature=0.5, top_k=10, top_p=0.95),
)
]
work_dir = 'outputs/conditional_benchmark/'
使用 .copy() 复用并修改模型配置
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_chat import models as vllm_api_general_chat
datasets = gsm8k_0_shot_cot_str
model_high_temp = vllm_api_general_chat.copy()
model_high_temp[0]['abbr'] = vllm_api_general_chat[0]['abbr'] + '-high-temp'
model_high_temp[0]['generation_kwargs']['temperature'] = 0.9
model_low_temp = vllm_api_general_chat.copy()
model_low_temp[0]['abbr'] = vllm_api_general_chat[0]['abbr'] + '-low-temp'
model_low_temp[0]['generation_kwargs']['temperature'] = 0.1
models = model_high_temp + model_low_temp
work_dir = 'outputs/temperature_comparison/'
配置文件完整变量参考
自定义配置文件中可以定义以下顶层变量。所有变量均为可选,但至少需要定义 models 和 datasets 才能运行推理任务。
变量名 |
类型 |
是否必需 |
说明 |
|---|---|---|---|
|
|
是(推理时) |
模型配置列表。每个元素是一个字典,至少包含 |
|
|
是(推理时) |
数据集配置列表。每个元素是一个字典,至少包含 |
|
|
否 |
结果汇总器配置。通常从 |
|
|
否 |
自定义模型-数据集配对列表。每个元素为 |
|
|
否 |
工作目录,推理结果和日志将输出到此目录下。默认为 |
|
|
否 |
推理流程配置。包含 |
|
|
否 |
评测流程配置。结构同 |
models 字段详解
每个模型配置字典的常用字段:
字段 |
类型 |
说明 |
|---|---|---|
|
class |
模型类,如 |
|
|
模型唯一标识,用于结果表格中的列名。同一配置文件中相同 |
|
|
模型属性,服务化模型为 |
|
|
模型路径(本地模型必填,服务化模型可为空字符串) |
|
|
服务化推理时指定的模型名称 |
|
|
推理服务 IP 地址(服务化模型) |
|
|
推理服务端口(服务化模型) |
|
|
是否使用流式推理 |
|
|
最大输出 token 数 |
|
|
推理 batch size |
|
|
最大输入序列长度 |
|
|
请求速率限制,0 表示不限制 |
|
|
请求失败重试次数 |
|
|
生成参数,如 |
|
|
Tokenizer 路径(本地模型) |
|
|
模型加载参数(本地模型),如 |
|
|
Tokenizer 参数(本地模型),如 |
|
|
多卡/多机运行配置(本地模型),如 |
|
|
模型输出后处理器,如 |
datasets 字段详解
每个数据集配置字典的常用字段:
字段 |
类型 |
说明 |
|---|---|---|
|
class |
数据集类,如 |
|
|
数据集唯一标识,用于结果表格中的行名 |
|
|
数据集文件路径 |
|
|
读取器配置,包含 |
|
|
推理配置,包含 |
|
|
评测配置,包含 |
|
|
裁判模型推理配置(需要 LLM Judge 的数据集),包含 |
infer 字段详解
infer = dict(
partitioner=dict(type=NaivePartitioner),
runner=dict(
type=LocalRunner,
max_num_workers=2,
task=dict(type=OpenICLApiInferTask),
),
)
使用说明
ais_bench ais_bench/configs/{模型类型}_examples/{任务配置文件名}
# 示例:
ais_bench ais_bench/configs/api_examples/infer_vllm_api_general.py
各场景自定义配置文件示例
1. 服务化精度测评
通过 API 访问推理服务,使用真实数据集进行精度测评。适用于 vLLM、MindIE、TGI、Triton 等服务化部署场景。
from mmengine.config import read_base
from ais_bench.benchmark.models import VLLMCustomAPIChat
from ais_bench.benchmark.partitioners import NaivePartitioner
from ais_bench.benchmark.runners.local import LocalRunner
from ais_bench.benchmark.tasks import OpenICLApiInferTask
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_chat_prompt import gsm8k_datasets as gsm8k_0_shot_cot_chat
datasets = [*gsm8k_0_shot_cot_chat]
models = [
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr='vllm-api-general-chat',
model="",
request_rate=0,
retry=2,
host_ip="localhost",
host_port=8080,
max_out_len=512,
batch_size=1,
generation_kwargs=dict(
temperature=0.5,
top_k=10,
top_p=0.95,
seed=None,
repetition_penalty=1.03,
)
)
]
infer = dict(
partitioner=dict(type=NaivePartitioner),
runner=dict(
type=LocalRunner,
max_num_workers=2,
task=dict(type=OpenICLApiInferTask),
),
)
work_dir = 'outputs/api-vllm-general-chat/'
2. 纯模型精度测评
使用 HuggingFace 本地模型直接进行推理测评,无需部署服务。
from mmengine.config import read_base
from ais_bench.benchmark.models import HuggingFaceBaseModel
from ais_bench.benchmark.partitioners import NaivePartitioner
from ais_bench.benchmark.runners.local import LocalRunner
from ais_bench.benchmark.tasks import OpenICLApiInferTask
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_chat_prompt import gsm8k_datasets as gsm8k_0_shot_cot_chat
datasets = [*gsm8k_0_shot_cot_chat]
models = [
dict(
type=HuggingFaceBaseModel,
abbr='hf-base-model',
path='THUDM/chatglm-6b',
tokenizer_path='THUDM/chatglm-6b',
model_kwargs=dict(device_map='auto'),
tokenizer_kwargs=dict(padding_side='left'),
generation_kwargs=dict(
temperature=0.5,
top_k=10,
top_p=0.95,
do_sample=True,
seed=None,
repetition_penalty=1.03,
),
max_out_len=100,
batch_size=1,
max_seq_len=2048,
batch_padding=True,
)
]
infer = dict(
partitioner=dict(type=NaivePartitioner),
runner=dict(
type=LocalRunner,
max_num_workers=2,
task=dict(type=OpenICLApiInferTask),
),
)
work_dir = 'outputs/hf-base-model/'
3. 服务化性能测评
使用合成数据集对推理服务进行性能压测,输出 TTFT(首 Token 延迟)、TPOT(每 Token 延迟)、E2EL(端到端延迟)等指标。
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.synthetic.synthetic_gen_string import (
synthetic_datasets,
)
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_stream import (
models as vllm_api_general_stream,
)
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_stream_chat import (
models as vllm_api_stream_chat,
)
datasets = synthetic_datasets
vllm_api_general_stream[0]["abbr"] = "demo-" + vllm_api_general_stream[0]["abbr"]
vllm_api_stream_chat[0]["abbr"] = "demo-" + vllm_api_stream_chat[0]["abbr"]
models = vllm_api_general_stream + vllm_api_stream_chat
work_dir = "outputs/demo_api-vllm-stream-perf/"
运行命令:
ais_bench ais_bench/configs/api_examples/demo_infer_vllm_api_perf.py -m perf
4. 合成数据集性能测评
自定义合成数据集的参数,控制请求数量、输入/输出 token 长度分布等。
from mmengine.config import read_base
from ais_bench.benchmark.openicl.icl_prompt_template import PromptTemplate
from ais_bench.benchmark.openicl.icl_retriever import ZeroRetriever
from ais_bench.benchmark.openicl.icl_inferencer import GenInferencer
from ais_bench.benchmark.datasets import SyntheticDataset, MATHEvaluator, math_postprocess_v2
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_stream import (
models as vllm_api_general_stream,
)
synthetic_config = {
"Type": "string",
"RequestCount": 100,
"TrustRemoteCode": False,
"StringConfig": {
"Input": {
"Method": "uniform",
"Params": {"MinValue": 1, "MaxValue": 500}
},
"Output": {
"Method": "gaussian",
"Params": {"Mean": 200, "Var": 100, "MinValue": 1, "MaxValue": 500}
}
},
}
datasets = [
dict(
abbr='synthetic_custom',
type=SyntheticDataset,
config=synthetic_config,
reader_cfg=dict(input_columns=['question', 'max_out_len'], output_column='answer'),
infer_cfg=dict(
prompt_template=dict(type=PromptTemplate, template="{question}"),
retriever=dict(type=ZeroRetriever),
inferencer=dict(type=GenInferencer),
),
eval_cfg=dict(
evaluator=dict(type=MATHEvaluator, version='v2'),
pred_postprocessor=dict(type=math_postprocess_v2),
),
)
]
models = vllm_api_general_stream
work_dir = 'outputs/synthetic_perf_custom/'
5. 多模型多数据集组合
同时测评多个模型在多个数据集上的表现,利用笛卡尔积自动组合。
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
from ais_bench.benchmark.configs.datasets.math.math500_gen_0_shot_cot_chat_prompt import math_datasets as math500_gen_0_shot_cot_chat
from ais_bench.benchmark.configs.datasets.mmlu.mmlu_gen_5_shot_str import mmlu_datasets as mmlu_5_shot_str
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general import models as vllm_api_general
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_chat import models as vllm_api_general_chat
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_stream_chat import models as vllm_api_stream_chat
datasets = gsm8k_0_shot_cot_str + math500_gen_0_shot_cot_chat + mmlu_5_shot_str
models = vllm_api_general + vllm_api_general_chat + vllm_api_stream_chat
work_dir = 'outputs/multi_model_multi_dataset/'
6. 自定义模型-数据集配对
通过 model_dataset_combinations 精确控制哪些模型与哪些数据集组合,避免不必要的笛卡尔积。
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
from ais_bench.benchmark.configs.datasets.math.math500_gen_0_shot_cot_chat_prompt import math_datasets as math500_gen_0_shot_cot_chat
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general import models as vllm_api_general
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_chat import models as vllm_api_general_chat
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_stream_chat import models as vllm_api_stream_chat
models = vllm_api_general + vllm_api_general_chat + vllm_api_stream_chat
datasets = gsm8k_0_shot_cot_str + math500_gen_0_shot_cot_chat
model_dataset_combinations = [
dict(models=[models[0]], datasets=[datasets[0]]),
dict(models=[models[1]], datasets=[datasets[1]]),
dict(models=[models[2]], datasets=[datasets[0], datasets[1]]),
]
work_dir = 'outputs/custom_combinations/'
7. 裁判模型测评
对于需要 LLM Judge 评判的数据集(如 AIME 2025),在数据集的 judge_infer_cfg 中配置裁判模型。
from mmengine.config import read_base
from ais_bench.benchmark.models import VLLMCustomAPIChat
from ais_bench.benchmark.partitioners import NaivePartitioner
from ais_bench.benchmark.runners.local import LocalRunner
from ais_bench.benchmark.tasks import OpenICLApiInferTask
from ais_bench.benchmark.utils.postprocess.model_postprocessors import extract_non_reasoning_content
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.aime2025.aime2025_gen_0_shot_llmjudge import aime2025_datasets
datasets = aime2025_datasets
datasets[0]['judge_infer_cfg']['judge_model']['host_ip'] = 'localhost'
datasets[0]['judge_infer_cfg']['judge_model']['host_port'] = 8081
models = [
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr='vllm-api-judge-eval',
path="",
model="",
stream=True,
request_rate=0,
retry=2,
host_ip="localhost",
host_port=8080,
max_out_len=512,
batch_size=1,
generation_kwargs=dict(temperature=0.01, ignore_eos=False),
pred_postprocessor=dict(type=extract_non_reasoning_content),
)
]
infer = dict(
partitioner=dict(type=NaivePartitioner),
runner=dict(
type=LocalRunner,
max_num_workers=2,
task=dict(type=OpenICLApiInferTask),
),
)
work_dir = 'outputs/judge_eval/'
8. 稳态性能测评
通过控制 request_rate 参数和 stream 参数,模拟稳态负载下的性能表现。
from mmengine.config import read_base
from ais_bench.benchmark.models import VLLMCustomAPI
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.synthetic.synthetic_gen_string import (
synthetic_datasets,
)
datasets = synthetic_datasets
models = []
for rate in [0, 5, 10, 20]:
model_cfg = dict(
attr="service",
type=VLLMCustomAPI,
abbr=f'vllm-api-steady-rate-{rate}',
path="",
model="",
stream=True,
request_rate=rate,
use_timestamp=False,
retry=2,
api_key="",
host_ip="localhost",
host_port=8080,
url="",
max_out_len=512,
batch_size=1,
trust_remote_code=False,
generation_kwargs=dict(temperature=0.01, ignore_eos=False),
)
models.append(model_cfg)
work_dir = 'outputs/steady_state_perf/'
9. 多轮对话性能测评
使用 ShareGPT 或 MTBench 多轮对话数据集进行性能测评。
from mmengine.config import read_base
from ais_bench.benchmark.models import VLLMCustomAPIChat
from ais_bench.benchmark.partitioners import NaivePartitioner
from ais_bench.benchmark.runners.local import LocalRunner
from ais_bench.benchmark.tasks import OpenICLApiInferTask
from ais_bench.benchmark.utils.postprocess.model_postprocessors import extract_non_reasoning_content
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.sharegpt.sharegpt_gen import sharegpt_datasets
datasets = sharegpt_datasets
models = [
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr="vllm-multiturn-api-chat-stream",
path="",
model="",
stream=True,
request_rate=0,
retry=2,
api_key="",
host_ip="localhost",
host_port=8080,
url="",
max_out_len=512,
batch_size=1,
trust_remote_code=False,
generation_kwargs=dict(temperature=0.01, ignore_eos=False),
pred_postprocessor=dict(type=extract_non_reasoning_content),
)
]
infer = dict(
partitioner=dict(type=NaivePartitioner),
runner=dict(
type=LocalRunner,
max_num_workers=2,
task=dict(type=OpenICLApiInferTask),
),
)
work_dir = 'outputs/multi_turn_benchmark/'
10. 自定义数据集测评
当需要使用自己的数据集进行测评时,可以通过自定义数据集配置实现。
from mmengine.config import read_base
from ais_bench.benchmark.models import VLLMCustomAPIChat
from ais_bench.benchmark.partitioners import NaivePartitioner
from ais_bench.benchmark.runners.local import LocalRunner
from ais_bench.benchmark.tasks import OpenICLApiInferTask
from ais_bench.benchmark.openicl.icl_prompt_template import PromptTemplate
from ais_bench.benchmark.openicl.icl_retriever import ZeroRetriever
from ais_bench.benchmark.openicl.icl_inferencer import GenInferencer
from ais_bench.benchmark.datasets import CustomDataset
from ais_bench.benchmark.openicl.icl_evaluator import AccEvaluator
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
datasets = [
dict(
abbr='my_custom_dataset',
type=CustomDataset,
path='/path/to/your/dataset.jsonl',
reader_cfg=dict(
input_columns=['question'],
output_column='answer',
),
infer_cfg=dict(
prompt_template=dict(
type=PromptTemplate,
template='{question}',
),
retriever=dict(type=ZeroRetriever),
inferencer=dict(type=GenInferencer),
),
eval_cfg=dict(
evaluator=dict(type=AccEvaluator),
pred_role='BOT',
),
meta_path='',
)
]
models = [
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr='vllm-api-custom-dataset',
model="",
request_rate=0,
retry=2,
host_ip="localhost",
host_port=8080,
max_out_len=512,
batch_size=1,
generation_kwargs=dict(temperature=0.5, top_k=10, top_p=0.95),
)
]
infer = dict(
partitioner=dict(type=NaivePartitioner),
runner=dict(
type=LocalRunner,
max_num_workers=2,
task=dict(type=OpenICLApiInferTask),
),
)
work_dir = 'outputs/custom_dataset/'
自定义配置文件精度测评使用样例
样例内容编辑
以下示例展示如何同时评测两个服务接口(v1/chat/completions 与 v1/completions)在 GSM8K 与 MATH数据集上的表现。参考示例:demo_infer_vllm_api.py:
from mmengine.config import read_base
from ais_bench.benchmark.partitioners import NaivePartitioner
from ais_bench.benchmark.runners.local import LocalRunner
from ais_bench.benchmark.tasks import OpenICLApiInferTask
from ais_bench.benchmark.models import VLLMCustomAPIChat
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
from ais_bench.benchmark.configs.datasets.math.math500_gen_0_shot_cot_chat_prompt import math_datasets as math500_gen_0_shot_cot_chat
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general import models as vllm_api_general
gsm8k_0_shot_cot_str[0]['abbr'] = 'demo_' + gsm8k_0_shot_cot_str[0]['abbr']
gsm8k_0_shot_cot_str[0]['reader_cfg']['test_range'] = '[0:8]'
math500_gen_0_shot_cot_chat[0]['abbr'] = 'demo_' + math500_gen_0_shot_cot_chat[0]['abbr']
math500_gen_0_shot_cot_chat[0]['reader_cfg']['test_range'] = '[0:8]'
datasets = gsm8k_0_shot_cot_str + math500_gen_0_shot_cot_chat
models = [
dict(
attr="service",
type=VLLMCustomAPIChat,
abbr='demo-vllm-api-general-chat',
path="",
model="",
request_rate = 0,
retry = 2,
host_ip = "localhost",
host_port = 8080,
max_out_len = 512,
batch_size=1,
generation_kwargs = dict(
temperature = 0.5,
top_k = 10,
top_p = 0.95,
seed = None,
repetition_penalty = 1.03,
)
)
]
work_dir = 'outputs/demo_api-vllm-general-chat/'
执行自定义任务组合
修改好配置文件后,执行如下命令启动精度评测:
ais_bench ais_bench/configs/api_examples/demo_infer_vllm_api.py
如果需要执行多任务并行,可以在命令行中添加 --max-num-workers参数指定最大任务并行数,示例如下:
ais_bench ais_bench/configs/api_examples/demo_infer_vllm_api.py --max-num-workers 4
输出结果
dataset version metric mode demo-vllm-api-general-chat demo-vllm-api-general
----------------------- -------- -------- ----- -------------------------- ---------------------
demo_gsm8k 401e4c accuracy gen 62.50 62.50
demo_math_prm800k_500 c4b6f0 accuracy gen 50.00 62.50
自定义配置文件性能测评使用样例
样例内容编辑
以下示例展示如何同时评测两个服务接口(v1/chat/completions 与 v1/completions)使用合成数据集进行性能测评的表现。参考示例:demo_infer_vllm_api_perf.py:
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.synthetic.synthetic_gen_string import (
synthetic_datasets,
)
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_stream import (
models as vllm_api_general_stream,
)
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_stream_chat import (
models as vllm_api_stream_chat,
)
datasets = synthetic_datasets
vllm_api_general_stream[0]["abbr"] = "demo-" + vllm_api_general_stream[0]["abbr"]
vllm_api_stream_chat[0]["abbr"] = "demo-" + vllm_api_stream_chat[0]["abbr"]
models = vllm_api_general_stream + vllm_api_stream_chat
work_dir = "outputs/demo_api-vllm-stream-perf/"
执行自定义任务组合
修改好配置文件后,执行如下命令启动性能评测:
ais_bench ais_bench/configs/api_examples/demo_infer_vllm_api_perf.py -m perf
如果需要执行多任务并行,可以在命令行中添加 --max-num-workers参数指定最大任务并行数,示例如下:
ais_bench ais_bench/configs/api_examples/demo_infer_vllm_api_perf.py -m perf --max-num-workers 2
输出结果
[2025-12-05 12:10:44,147] [ais_bench] [INFO] Performance Results of task [demo-vllm-api-general-stream/syntheticdataset]:
╒══════════════════════════╤═════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤═════╕
│ Performance Parameters │ Stage │ Average │ Min │ Max │ Median │ P75 │ P90 │ P99 │ N │
╞══════════════════════════╪═════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪═════╡
│ E2EL │ total │ 1734.3 ms │ 544.8 ms │ 3692.3 ms │ 1664.0 ms │ 2081.5 ms │ 2748.4 ms │ 3597.9 ms │ 10 │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────┤
│ TTFT │ total │ 103.5 ms │ 102.4 ms │ 107.0 ms │ 103.1 ms │ 103.3 ms │ 104.2 ms │ 106.8 ms │ 10 │
...
[2025-12-05 12:10:44,149] [ais_bench] [INFO] Performance Result files located in outputs/demo_api-vllm-general-stream-chat-perf/20251205_121020/performances/demo-vllm-api-general-stream-chat.
[2025-12-05 12:10:44,149] [ais_bench] [INFO] Performance Results of task [demo-vllm-api-stream-chat/syntheticdataset]:
╒══════════════════════════╤═════════╤═════════════════╤═════════════════╤═════════════════╤═════════════════╤════════════════╤═════════════════╤═════════════════╤═════╕
│ Performance Parameters │ Stage │ Average │ Min │ Max │ Median │ P75 │ P90 │ P99 │ N │
╞══════════════════════════╪═════════╪═════════════════╪═════════════════╪═════════════════╪═════════════════╪════════════════╪═════════════════╪═════════════════╪═════╡
│ E2EL │ total │ 3406.7 ms │ 372.4 ms │ 5772.4 ms │ 3589.8 ms │ 4476.6 ms │ 4921.1 ms │ 5647.1 ms │ 10 │
├──────────────────────────┼─────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼────────────────┼─────────────────┼─────────────────┼─────┤
│ TTFT │ total │ 103.2 ms │ 102.0 ms │ 107.5 ms │ 102.9 ms │ 103.4 ms │ 104.3 ms │ 107.2 ms │ 10 │
自定义模型与数据集组合
默认情况下,自定义配置文件中的模型与数据集组合会自动根据模型配置文件中的models列表和数据集配置文件中的datasets列表进行笛卡尔组合,组合数量为模型配置文件中的models列表长度与数据集配置文件中的datasets列表长度之积。用户可以通过在配置文件中配置model_dataset_combinations自定义模型数据集组合。
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.summarizers.example import summarizer
from ais_bench.benchmark.configs.datasets.gsm8k.gsm8k_gen_0_shot_cot_str import gsm8k_datasets as gsm8k_0_shot_cot_str
from ais_bench.benchmark.configs.datasets.math.math500_gen_0_shot_cot_chat_prompt import math_datasets as math500_gen_0_shot_cot_chat
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general import models as vllm_api_general
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general_chat import models as vllm_api_general_chat
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_stream_chat import models as vllm_api_stream_chat
models = vllm_api_general + vllm_api_general_chat + vllm_api_stream_chat
datasets = gsm8k_0_shot_cot_str + math500_gen_0_shot_cot_chat
model_dataset_combinations = [
dict(models=[models[0]], datasets=[datasets[0]]),
dict(models=[models[1]], datasets=[datasets[1]]),
dict(models=[models[2]], datasets=[datasets[0], datasets[1]]),
...
]
⚠️ 注意:需要用
abbr参数指定模型与数据集的唯一标识。同一配置文件中,相同abbr的模型与数据集只能组合一次。如下实例中,vllm_api_general_copy与vllm_api_general的abbr相同,所以会被认为与组合1是相同任务,会被跳过,即便内部参数存在区别:
from mmengine.config import read_base
with read_base():
from ais_bench.benchmark.configs.models.vllm_api.vllm_api_general import models as vllm_api_general
from ais_bench.benchmark.configs.datasets.math.math500_gen_0_shot_cot_chat_prompt import math_datasets as math500_gen_0_shot_cot_chat
vllm_api_general_copy = vllm_api_general.copy()
vllm_api_general_copy[0]['port'] = 8081
models = vllm_api_general_copy + vllm_api_general
datasets = math500_gen_0_shot_cot_chat
model_dataset_combinations = [
dict(models=[models[1]], datasets=datasets),
dict(models=[models[0]], datasets=datasets),
]
正确做法:在对模型或数据集配置进行复用时,修改abbr参数,使其与原模型或数据集不同,例如:
vllm_api_general_copy = vllm_api_general.copy()
vllm_api_general_copy[0]['abbr'] = vllm_api_general[0]['abbr'] + '-copy'
这样vllm_api_general_copy[0]与vllm_api_general[0]的abbr不同,组合2与组合1是不同任务,会被正常执行。
预设自定义配置文件样例列表
快速上手
文件名 |
简介 |
|---|---|
快速上手样例(中文注释):配置 |
|
快速上手样例(英文注释):与 |
服务化精度测评(api_examples/)
文件名 |
简介 |
|---|---|
基于gsm8k数据集使用vllm api(0.6+版本)访问v1/completions子服务进行评测,prompt格式为字符串格式,自定义了数据集路径 |
|
基于gsm8k数据集使用vllm api(0.6+版本)访问v1/chat/completions子服务进行评测,prompt格式为对话格式,自定义了数据集路径 |
|
基于gsm8k数据集使用vllm api(0.6+版本)访问v1/chat/completions子服务使用流式推理进行评测,prompt格式为对话格式,自定义了数据集路径 |
|
基于gsm8k数据集使用mindie stream api访问infer子服务进行评测,prompt格式为字符串格式,自定义了数据集路径 |
|
Demo示例:同时评测v1/chat/completions与v1/completions两个接口在GSM8K与MATH数据集上的精度表现 |
|
多模型多数据集精度测评:将3个vllm服务化模型(general/general_chat/stream_chat)与GSM8K、MATH、MMLU数据集进行笛卡尔积组合 |
|
自定义模型-数据集配对:通过 |
|
裁判模型测评:评测需要LLM Judge的AIME 2025数据集,在 |
服务化性能测评(api_examples/)
文件名 |
简介 |
|---|---|
Demo示例:同时评测v1/chat/completions与v1/completions两个接口使用合成数据集进行流式性能测评 |
|
合成数据集性能测评:自定义合成数据集的输入输出token长度分布 |
|
稳态性能测评:以多个 |
|
多轮对话性能测评:使用ShareGPT多轮对话数据集 |
|
自定义数据集性能测评:在自定义CSV/JSONL数据集上进行性能测评 |
|
RPS分布控制性能测评:通过 |
纯模型精度测评(hf_example/)
文件名 |
简介 |
|---|---|
基于gsm8k数据集使用huggingface base模型的推理接口进行评测,prompt格式为字符串格式,自定义了数据集路径 |
|
基于gsm8k数据集使用huggingface chat模型的推理接口进行评测,prompt格式为对话格式,自定义了数据集路径 |
|
多模型多数据集纯模型测评:在多个数据集上评测多个HuggingFace本地模型 |
多模态测评(lmm_example/)
文件名 |
简介 |
|---|---|
多模态图像编辑模型测评(Qwen图像编辑,多设备) |
|
多模态多数据集精度测评:在多个多模态数据集上评测多模态模型 |
精度测评场景样例(accuracy_benchmark/)
文件名 |
简介 |
|---|---|
单任务精度测评 |
|
多任务精度测评 |
|
多任务并行精度测评 |
|
中断续跑与失败用例重测(部分任务) |
|
子数据集合并推理 |
|
固定请求数测评 |
|
多次独立重复推理 |
|
推理结果重评估 |
纯模型精度测评场景样例(accuracy_benchmark_local/)
文件名 |
简介 |
|---|---|
纯模型单任务测评 |
|
纯模型多任务/多任务并行测评 |
|
子数据集合并推理 |
|
纯模型推理结果重评估 |
性能测评场景样例(performance_benchmark/)
文件名 |
简介 |
|---|---|
单任务性能测评 |
|
多任务性能测评 |
|
自定义序列长度性能测评 |
|
自定义序列的多任务组合性能测评 |
|
固定请求数性能测评 |
|
性能结果重计算 |
通用工具
文件名 |
简介 |
|---|---|
所有支持的数据集配置导入汇总,可在自定义配置文件中直接 |
注: 上述自定义配置文件如果要评测其他数据集,请从ais_bench/configs/api_examples/all_dataset_configs.py导入其他数据集。