统信UOS 系统AISBench大模型评测工具使用手册

一、环境说明

配置项 具体信息
服务器 浪潮 NF5468M6
服务器操作系统 UOS V2500
VLLM 版本 0.11.2
训练卡 NVIDIA 3060Ti
Python 版本 3.11.6(主版本)/ 3.11.16
支持 Python 版本范围 3.10、3.11、3.12(不支持 3.9 及以下、3.13 及以上)
大语言模型 DeepSeek-R1-Distill-Qwen-1.5B
评测工具 AISBench

二、工具简介

AISBench Benchmark 基于 OpenCompass 构建,兼容其配置体系、数据集结构与模型后端实现,并扩展了对服务化模型的支持能力。AISBench 是国内信创主流大模型服务评测 & 压测工具 ,电子标准院牵头,Apache‑2.0 开源,广泛对接 vLLM、SGLang、Triton、昇腾 CANN,国产异构算力场景使用非常多。仓库:https://github.com/AISBench/benchmark,命令行入口:ais_bench

支持的评测场景

类型 能力说明
精度测评 验证服务化 / 本地模型在问答、推理等基准数据集上的精度,覆盖文本、多模态场景
性能测评 评估服务化模型的延迟、吞吐率,支持压测场景极限性能、稳态性能、业务流量模拟

官网文档:https://ais-bench-benchmark-rf.readthedocs.io/zh-cn/latest/index.html

三、工具安装与卸载

3.1 安装步骤

基础安装
bash 复制代码
# 克隆项目源码
git clone https://github.com/AISBench/benchmark.git
cd benchmark/
# pip安装核心依赖
pip3 install -e ./ --use-pep517 -i https://pypi.tuna.tsinghua.edu.cn/simple

验证安装:执行 ais_bench -h,打印出帮助信息即安装成功。

可选依赖安装(按需选择)
场景 安装命令
服务化框架支持(vLLM/Triton) pip3 install -r requirements/api.txt && pip3 install -r requirements/extra.txt
多模态模型离线推理 pip3 install -r requirements/hf_vl_dependency.txt
BFCL 测评支持 pip3 install -r requirements/datasets/bfcl_dependencies.txt --no-deps
OCRBench_v2 数据集测评 pip3 install -r requirements/datasets/ocrbench_v2.txt

⚠️ 注意:安装 BFCL 依赖时,--no-deps 参数用于避免 pathlib 版本冲突(Python3.5+ 内置该库)。

3.2 卸载命令

复制代码
pip3 uninstall ais_bench_benchmark

四、环境准备

4.1 数据集下载与部署

下载数据集
  • 数据集下载参考路径:{工具根路径}/ais_bench/benchmark/configs/datasets/[数据集名]/readme
  • 数据集默认存放路径:{工具根路径}/ais_bench/datasets,下载后需解压至该目录。
下载示例(以 gsm8k 为例)
bash 复制代码
cd ais_bench/datasets
wget http://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/gsm8k.zip
unzip gsm8k.zip
rm gsm8k.zip
验证部署

执行 tree gsm8k/,确认目录结构如下:

复制代码
gsm8k/
├── test.jsonl
├── test_socratic.jsonl
├── train.jsonl
└── train_socratic.jsonl
可用数据集任务(gsm8k 示例)
任务名称 简介 评估指标 few-shot prompt 格式 配置文件路径
gsm8k_gen_4_shot_cot_str 生成式任务,带逻辑链 accuracy 4-shot 字符串格式 gsm8k_gen_4_shot_cot_str.py
gsm8k_gen_4_shot_cot_chat_prompt 生成式任务,带逻辑链 accuracy 4-shot 对话格式 gsm8k_gen_4_shot_cot_chat_prompt.py
gsm8k_gen_0_shot_cot_str 生成式任务 accuracy 0-shot 字符串格式 gsm8k_gen_0_shot_cot_str.py
gsm8k_gen_0_shot_cot_chat_prompt 生成式任务 accuracy 0-shot 对话格式 gsm8k_gen_0_shot_cot_chat_prompt.py
gsm8k_gen_0_shot_cot_str_perf 生成式任务(性能测评) 性能测评 0-shot 字符串格式 gsm8k_gen_0_shot_cot_str_perf.py

4.2 部署 vLLM 服务

参考《UOS V2500 CUDA 异构平台下 vLLM 部署手册》完成 vLLM 服务安装部署。

五、快速使用

AISBench 评测任务由「模型任务」「数据集任务」「结果呈现任务」组合定义,其他命令行参数指定评测场景(精度 / 性能)。

在使用前需要先修改测试脚本配置文件{工具根路径}/ais_bench/benchmark/configs/models/vllm_api下的.py脚本。例如修改vllm_api_general_chat.py,文件内容如下所示:

5.1 配置文件查询

运行命令前,可通过 --search 参数查询任务对应的配置文件绝对路径:

bash 复制代码
ais_bench --models vllm_api_general_chat --datasets gsm8k_gen_4_shot_cot_str --search

5.2 精度测试

5.2.1 单任务测试

用户通过--models--datasets参数指定多个配置任务

bash 复制代码
ais_bench --models vllm_api_general_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --summarizer

参数说明:

  • --models:指定模型任务(如vllm_api_general_chat
  • --datasets:指定数据集任务
  • --summarizer:结果呈现任务(默认example,可省略)

执行结果存储路径:outputs/default/[时间戳],目录结构如下:

plaintext 复制代码
[时间戳]/
├── configs          # 合成的配置文件
│   └── [时间戳].py
├── logs             # 执行日志
│   ├── eval         # 精度评测日志
│   └── infer        # 推理过程日志
├── predictions      # 推理结果(JSON格式)
├── results          # 精度原始分数(JSON格式)
└── summary          # 最终结果(CSV/MD/TXT格式)

结果示例:

dataset version metric mode vllm-api-general-chat
demo_gsm8k 0ba9da accuracy gen 37.50
5.2.2 多任务测试

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

bash 复制代码
ais_bench --models vllm_api_general_chat vllm_api_stream_chat --datasets gsm8k_gen_4_shot_cot_str

子任务数 = 模型任务数 × 数据集任务数,示例中执行 2 个子任务:

  1. vllm_api_general_chat + gsm8k_gen_4_shot_cot_str
  2. vllm_api_stream_chat + gsm8k_gen_4_shot_cot_str

执行结果:

5.2.3 多任务并行测试

默认情况下,多个子任务采用串行执行,单个任务内默认开启Continuous Batch,会根据用户配置的最大并发拉起多个进程发送和处理请求,允许配置较大的并发。在单个任务并发较小时,可以通过设置--max-num-workers参数实现多任务并行,示例如下:

bash 复制代码
ais_bench --models vllm_api_general_chat vllm_api_stream_chat --datasets gsm8k_gen_4_shot_cot_str --max-num-workers 2
  • --max-num-workers:指定最大并发数,示例中 2 个子任务并行执行。
5.2.4 固定请求数测评

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

bash 复制代码
ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --num-prompts 1
  • --num-prompts:指定读取的数据条数(仅测试第一条样本);数据集按默认顺序读取,不支持随机抽样。

5.3 性能测试

5.3.1 核心参数说明
  1. 端到端性能输出结果:
性能指标 缩写 含义
E2EL - 单请求从发送到接收全部响应的总时延
TTFT - 首个 Token 返回时延
TPOT - 输出阶段每个 Token 平均生成时延(不含首个 Token)
ITL - 相邻 Token 间平均间隔时延(不含首个 Token)
InputTokens - 请求输入 Token 数量
OutputTokens - 请求生成输出 Token 数量
OutputTokenThroughput - 输出 Token 吞吐率(Token/s)
Tokenizer - Tokenizer 编码耗时
Detokenizer - Detokenizer 解码耗时
  1. 单次请求性能输结果:
  • P75 / P90 / P99:以 TPOT 为例,表示所有请求的 TPOT 值分别处于第 75、90、99 百分位的性能表现。
  • E2EL(End-to-End Latency):单个请求从发送到接收全部响应的总时延。
  • TTFT(Time To First Token):首个 Token 返回的时延。
  • TPOT(Time Per Output Token):输出阶段每个 Token 的平均生成时延(不含首个 Token)。
  • ITL(Inter-token Latency):相邻 Token 间的平均间隔时延(不含首个 Token)。
  • InputTokens:请求的输入 Token 数量。
  • OutputTokens:请求生成的输出 Token 数量。
  • OutputTokenThroughput:输出 Token 的吞吐率(Token/s)。
  • Tokenizer:Tokenizer 编码耗时。
  • Detokenizer:Detokenizer 解码耗时。
Performance Parameters Stage Average Max Min Median P75 P90 P99 N
E2EL 统计此参数的阶段 平均请求时延 最大请求时延 最小请求时延 请求时延中位数 请求时延75分位值 请求时延90分位值 请求时延99分位值 测试数据量,来源于输入参数
TTFT 统计此参数的阶段 首个token平均时延 首个token最大时延 首个token最小时延 首个token中位数时延 首个token75分位时延 首个token90分位时延 首个token99分位时延 测试数据量,来源于输入参数
TPOT 统计此参数的阶段 Decode阶段平均时延 最大Decode阶段时延 最小Decode阶段时延 Decode阶段中位数时延 75分位Decode阶段时延 90分位每条请求Decode阶段平均时延 99分位Decode阶段时延 测试数据量,来源于输入参数
ITL 统计此参数的阶段 token间平均时延 token间最大时延 token间最小时延 token间中位数时延 token间75分位时延 token间90分位时延 token间99分位时延 测试数据量,来源于输入参数
InputTokens 统计此参数的阶段 输入token平均长度 最大输入token长度 最小输入token长度 输入token中位数长度 75分位输入token长度 90分位输入token长度 99分位输入token长度 测试数据量,来源于输入参数
OutputTokens 统计此参数的阶段 输出token平均长度 最大输出token长度 最小输出token长度 输出token中位数长度 75分位输出token长度 90分位输出token长度 99分位输出token长度 测试数据量,来源于输入参数
OutputTokenThroughput 统计此参数的阶段 平均输出吞吐 最大输出吞吐 最小输出吞吐 中位数输出吞吐 输出吞吐75分位 输出吞吐90分位 输出吞吐99分位 测试数据量,来源于输入参数
5.3.2 单任务测试

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

bash 复制代码
ais_bench --models vllm_api_stream_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --summarizer default_perf --mode perf
  • --mode perf/-m perf:指定性能评测场景

  • 结果存储:除基础日志外,新增performance目录,包含:单次请求性能(CSV)、端到端性能(JSON)、并发可视化报告(HTML)。

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

5.3.3 多任务测试

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

bash 复制代码
ais_bench --models vllm_api_general_chat vllm_api_stream_chat --datasets gsm8k_gen_4_shot_cot_str --mode perf

执行逻辑同精度多任务测试,最终批量输出所有子任务性能结果。执行结果如下图所示:

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

    ais_bench --models vllm_api_general_chat --datasets synthetic_gen_string --search

  2. 修改配置文件(synthetic_gen_string.py):
    修改{工具根路径}/ais_bench/benchmark/configs/datasets/synthetic/synthetic_gen_string.py中的synthetic_config。配置内容如下所示:

python 复制代码
synthetic_config = {
    "Type":"string",
    "RequestCount": 10,  # 请求总数(1~1048576)
    "TrustRemoteCode": False,
    "StringConfig" : {
        "Input" : {
            "Method": "uniform",  # 均匀分布
            "Params": {"MinValue": 1, "MaxValue": 200} # 输入长度范围
        },
        "Output" : {
            "Method": "gaussian", # 高斯分布
            "Params": {"Mean": 100, "Var": 200, "MinValue": 1, "MaxValue": 100}
        }
    },
}
  1. 配置模型忽略 EOS(确保输出达最大长度)
    为了确保推理服务达到设置的最大输出,需要在服务化模型配置的 generation_kwargs 中配置特殊的后处理参数ignore_eos = True,以控制请求的最大输出长度(不提前结束)。
python 复制代码
models = [
    dict(
        attr="service",
        type=VLLMCustomAPIChat,
        abbr="vllm-api-general-chat",
        path="/root/xyh/models/DeepSeek-R1-Distill-Qwen-1.5B",
        model="DeepSeek-R1-Distill-Qwen-1.5B",
        stream=False,
        request_rate=0,
        retry=2,
        api_key="",
        host_ip="localhost",
        host_port=8000,
        url="",
        max_out_len=512,
        batch_size=10,
        trust_remote_code=False,
        generation_kwargs=dict(
            temperature=0.01,
            ignore_eos=True, # 忽略EOS,输出达max_out_len
        ),
        pred_postprocessor=dict(type=extract_non_reasoning_content),
    )
]
  1. 执行评测:
bash 复制代码
ais_bench --models vllm_api_general_chat --datasets synthetic_gen_string -m perf
  1. 评测结果:
5.3.5 固定请求数测评

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

bash 复制代码
ais_bench --models vllm_api_general_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt -m perf --num-prompts 1

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

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

5.3.6 自定义性能维度(如新增 P95)
  1. 查询结果呈现任务配置路径:
bash 复制代码
ais_bench --models vllm_api_general_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --summarizer default_perf -m perf --search
  1. 修改配置文件(default_perf.py):
    配置文件路径:{工具根路径}/ais_bench/benchmark/configs/summarizers/perf/default_perf.py
python 复制代码
from ais_bench.benchmark.summarizers import DefaultPerfSummarizer
from ais_bench.benchmark.calculators import DefaultPerfMetricCalculator

summarizer = dict(
    attr = "performance",
    type=DefaultPerfSummarizer,
    calculator=dict(
        type=DefaultPerfMetricCalculator,
        stats_list=["Average", "Min", "Max", "Median", "P75", "P90","P95", "P99"],
    )
)

⚠️ 注意:其中stats_list中最多同时承载8个性能维度的数据。

  1. 执行评测:
bash 复制代码
ais_bench --models vllm_api_general_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --summarizer default_perf -m perf
  1. 输出结果:

5.4 稳定状态性能测试

5.4.1 稳态测试

稳态测试命令在此性能测试基础上需要指定--summarizer stable_stage按照稳态方式统计性能数据,以如下AISBench命令为例:

bash 复制代码
ais_bench --models vllm_api_general_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt --summarizer stable_stage --mode perf --pressure --debug
5.4.2 压力测试

压力测试的流程与稳态测试基本一致,差异主要有如下两点:

通过命令参数--pressure-time指定压力测试的持续时间,压测持续时间不能超过86400秒(24小时)。 通过配置模型配置文件中的request_rate参数来指定每个进程新增线程(客户端)的频率。此参数取值越大,实际新增线程(客户端)的频率偏差越大(偏差和cpu单核处理能力有关)。 通过修改配置常量文件参数中的WORKERS_NUM参数来指定压力测试中使用的进程数,提高压力测试的并发能力。

  1. 修改全局常量配置(ais_bench/benchmark/global_consts.py):
python 复制代码
WORKERS_NUM = 16 # 进程数(0~CPU核数,0为自动分配) 
MAX_CHUNK_SIZE = 2 ** 16 # 单chunk最大缓存(字节) 
REQUEST_TIME_OUT = None # 请求超时时间(None=无限等待)
  1. 执行压测命令:
bash 复制代码
ais_bench --models vllm_api_general_chat --datasets demo_gsm8k_gen_4_shot_cot_chat_prompt  --summarizer stable_stage --mode perf --debug --pressure --pressure-time 120
  • 参数说明:
    • --pressure:启用压力测试模式
    • --pressure-time:压测持续时间(秒,≤86400)
    • request_rate(模型配置):进程新增客户端频率
    • WORKERS_NUM:压测进程数(提升并发能力)
相关推荐
奔跑中的小象4 天前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
奔跑中的小象8 天前
UOS V2500 沐曦mx-exporter监控加速卡(非K8S)
grafana·prometheus·uos·vllm·沐曦
fleaxin3 个月前
大华海光GPU服务器安装PVE和统信系统虚拟机
服务器·nvidia·pve·uos·统信
NotStrandedYet6 个月前
《国产系统运维笔记》第7期:打工人换统信UOS国产电脑后,第一件事:装RabbitMQ!
运维·mqtt·rabbitmq·国产化·uos·统信·信创运维
muyan96 个月前
统信uos-server-20-1070e-arm64-20250704-1310 安装mysql-5.7.44
linux·mysql·yum·rpm·uos·统信
muyan96 个月前
浅吐槽一下统信uos linux
linux·运维·国产化·uos·统信·去ioe
奔跑中的小象6 个月前
统信 UOS V2500 服务器 | OpenClaw AI Agent 全流程安装部署手册
ai·uos·统信·openclow
babytiger7 个月前
scrcpy 编译在ubuntu2404 和UOS上
ubuntu·uos·scrcpy
无泪无花月隐星沉7 个月前
uos server 1070e lvm格式磁盘扩容分区
linux·运维·uos