1 前言
本文介绍三种大模型评测工具,包括EvalScope、LLMPerf和vLLM Benchmark,总结每种测评工具的测试实践,并对三种测评工具在核心功能、性能指标、典型应用场景等方面进行了对比。
2 EvalScope
2.1 前言
EvalScope是魔搭社区官方推出的模型评测与性能基准测试框架,内置多个常用测试基准和评测指标,如MMLU、CMMLU、C-Eval、GSM8K、ARC、HellaSwag、TruthfulQA、MATH和HumanEval等;支持多种类型的模型评测,包括LLM、多模态LLM、Embedding模型和Reranker模型。
下面介绍基于EvalScope评测DeepSeek R1模型,涵盖基本评测和模型推理性能压测两大场景。
2.2 测试环境配置
如下图所示为使用EvalScope测评工具对DeepSeek R1模型进行测试的拓扑图,其中推理引擎选择vLLM。
安装EvalScope测评工具的步骤如下所示:
pip install evalscope
2.3 测试实践
● 基本评测场景
本文采用指定模型API地址(api_url)和API Key(api_key),评测部署的模型API服务,指定eval-type参数为service。
测试命令示例:
evalscope eval \
--model DeepSeek-R1-Distill-Qwen-32B \
--api-url http://127.0.0.1:8000/v1/chat/completions \
--api-key Vb7h4cVRFPgfAr8a \
--eval-type service \
--datasets gsm8k \
--limit 10
测试结果:
+------------------------------+-----------+-----------------+----------+-------+---------+---------+
| Model | Dataset | Metric | Subset | Num | Score | Cat.0 |
+------------------------------+-----------+-----------------+----------+-------+---------+---------+
| DeepSeek-R1-Distill-Qwen-32B | gsm8k | AverageAccuracy | main | 10 | 0.9 | default |
+------------------------------+-----------+-----------------+----------+-------+---------+---------+
● 推理性能压测场景
使用openqa数据集进行推理性能压测。
openqa可以模拟真实的问答情况,更接近现实场景,其中包括了超3000条中文对话数据,可以有效评估模型在实际应用中的推理性能。
测试命令示例:
evalscope perf \
--url "http://127.0.0.1:8000/v1/chat/completions" \
--parallel 1 \
--model qwen2.5 \
--number 15 \
--api openai \
--dataset openqa \
--stream
要准确统计Time to First Token (TTFT)指标,需要在请求中包含--stream参数。
测试结果如下所示:
Percentile results:
+------------+----------+----------+-------------+--------------+---------------+----------------------+
| Percentile | TTFT (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Throughput(tokens/s) |
+------------+----------+----------+-------------+--------------+---------------+----------------------+
| 10% | 0.0202 | 0.0027 | 0.1846 | 41 | 50 | 270.8324 |
| 25% | 0.0209 | 0.0028 | 0.2861 | 44 | 83 | 290.0714 |
| 50% | 0.0233 | 0.0028 | 0.7293 | 49 | 250 | 335.644 |
| 66% | 0.0267 | 0.0029 | 0.9052 | 50 | 308 | 340.2603 |
| 75% | 0.0437 | 0.0029 | 0.9683 | 53 | 325 | 341.947 |
| 80% | 0.0438 | 0.003 | 1.0799 | 58 | 376 | 342.7985 |
| 90% | 0.0439 | 0.0032 | 1.2474 | 62 | 424 | 345.5268 |
| 95% | 0.0463 | 0.0033 | 1.3038 | 66 | 431 | 348.1648 |
| 98% | 0.0463 | 0.0035 | 1.3038 | 66 | 431 | 348.1648 |
| 99% | 0.0463 | 0.0037 | 1.3038 | 66 | 431 | 348.1648 |
+------------+----------+----------+-------------+--------------+---------------+----------------------+
使用openqa可以有效评估模型在处理实际自然语言问题时的具体响应时间,如上展示了模型在不同百分位下的TTFT(首token时间)、TPOT(生成每个token需要的时间)、Latency(延迟时间)、Input tokens(输入token)、Output tokens(输出token)、Throughput(吞吐率)等指标。
此外,使用Speed Benchmark工具可以重点测试模型在不同输入长度下的推理速度。以下为测试生成2048 tokens时的速度,输入长度分别为1、6144、14336、30720。
测试命令示例:
evalscope perf \
--parallel 1 \
--url http://127.0.0.1:8000/v1/completions \
--model DeepSeek-R1-Distill-Qwen-32B \
--log-every-n-query 1 \
--connect-timeout 60000 \
--read-timeout 60000\
--max-tokens 2048 \
--min-tokens 2048 \
--api openai \
--dataset speed_benchmark \
--api-key Vb7h4cVRFPgfAr8a
参数说明如下所示:
● parallel:指定并发数,默认为1个;
● url:指定待测试系统的服务地址;
● model:指定待测试的模型名称;
● log-every-n-query:指定日志打印间隔;
● connect-timeout:指定网络连接超时时间,单位为毫秒;
● read-timeout:指定网络读取超时时间,单位为毫秒;
● max-tokens:指定输出最大token值;
● min-tokens:指定输出最小token值;
● api:指定服务API类型;
● dataset:指定数据集;
● api-key:指定认证的API key值。
测试结果:
+---------------+-----------------+----------------+
| Prompt Tokens | Speed(tokens/s) | GPU Memory(GB) |
+---------------+-----------------+----------------+
| 1 | 44.58 | 0.0 |
| 6144 | 42.47 | 0.0 |
| 14336 | 34.55 | 0.0 |
| 30720 | 31.72 | 0.0 |
+---------------+-----------------+----------------+
从测试结果可以看出,随着输入token数量增加,模型推理速度下降。
● 定制化推理性能压测场景
我们对Speed Benchmark 工具代码进行了修改,增加了输入token和repeat参数,用户可以在压测命令中可以直接指定需要测试的输入token长度和repeat值,不需要去修改代码重新配置环境,改动代码如下所示:
1)修改数据集文件:evalscope/perf/plugin/datasets/speed_benchmark.py。注释掉之前的INPUT_LENGTH和REPEAT,然后替换初始化代码和build_messages方法
def __init__(self, query_parameters: Arguments):
super().__init__(query_parameters)
self.input_length = getattr(query_parameters,'dataset_input_length', [1, 6144, 14336, 30720])
# 从参数获取重复次数,默认值为 2
self.repeat = getattr(query_parameters, 'dataset_repeat', 2)
def build_messages(self) -> Iterator[List[Dict]]:
for input_len in self.input_length:
for _ in range(self.repeat):
yield self.create_query(input_len)
2)修改参数加载文件evalscope/perf/arguments.py,修改如下
#在Arguments中添加对应字段
dataset_input_length=args.dataset_input_length,
dataset_repeat=args.dataset_repeat
#在add_argument函数里添加:
parser.add_argument(
'--dataset-input-length',
nargs='+',
type=int,
default=[1, 6144, 14336, 30720],
help='The length of the input, default [1, 6144, 14336, 30720]')
parser.add_argument('--dataset-repeat', type=int, default=2, help='The repeat times of the dataset')
安装修改后的evalscope工具后,执行测试的示例如下所示:
evalscope perf \
--parallel 1 \
--url http://127.0.0.1:8000/v1/completions \
--model DeepSeek-R1-Distill-Qwen-32B \
--log-every-n-query 1 \
--connect-timeout 60000 \
--read-timeout 60000\
--max-tokens 2048 \
--min-tokens 2048 \
--api openai \
--dataset speed_benchmark \
--api-key Vb7h4cVRFPgfAr8a
--dataset-input-length 256 1024 2048
--dataset-repeat 5
当我们传入多个dataset-input-length值时会同时测试多个不同的输入长度的样本,总的请求数为dataset-input-length输入的样本个数乘以dataset-repeat传入的值。
3 LLMPerf
3.1 前言
LLMPerf(大型语言模型性能测试)是评估大语言模型(LLM)在生产环境中表现的核心评测体系。本文基于真实业务场景提炼最佳实践方法论,为开发、运维与测试团队提供可靠的测试方案,系统性保障服务的高吞吐、低延迟和稳定性。
3.2 测试环境配置
测试脚本下载
LLMPerf由 Ray 项目团队开发,在github上开源,可直接下载。
git clone https://github.com/ray-project/llmper
工具核心功能:
性能评估
● 负载测试:LLMPerf可以对大语言模型(如Llama 2、GPT-3等)的吞吐量和延迟性能进行测量。它通过负载测试来评估模型在不同负载下的响应延迟和生成吞吐量,帮助用户了解模型在实际应用中的性能表现。
● 准确性测试:该工具还可以进行正确性测试,衡量模型输出的准确性,确保模型在生成内容时能够保持较高的质量。
参数化测试
LLMPerf允许用户更改输入和输出大小等参数,以匹配不同的应用场景。这意味着用户可以根据自己的具体需求和工作负载,灵活地调整测试参数,从而获得更具针对性的性能评估结果。
结果分析
LLMPerf能够提供详细的性能指标分析,包括响应时间、吞吐量、准确性等,帮助用户深入了解模型的性能特点。
兼容性
LLMPerf支持主流的大语言模型,如OpenAI、Anthropic、TogetherAI等。这使得用户可以在一个统一的框架下对不同来源的模型进行性能比较和评估。
安装测试工具
git clone https://github.com/ray-project/llmperf
cd llmperf
pip install -e .
#如下载速度较慢可以使用国内源进行加速
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
配置环境变量
根据不同的API服务,需要设置不同的密钥信息和服务地址。例如对于OpenAi(vLLM类推理框架):
export OPENAI_API_KEY="your api-key"
export OPENAI_API_BASE="https://api.endpoints.anyscale.com/v1"
3.3 测试实践
性能测试
使用token_benchmark_ray.py脚本运行测试,主要参数如下:
● --model:被测的模型名称(如DeepSeek-R1-Distill-Qwen-32B)。
● --mean-input-tokens:输入token的均值。
● --mean-output-tokens:输出token均值。
● --stddev-input-tokens:输入token的标准差。
● --stddev-output-tokens:输出token的标准差。
● --num-concurrent-requests:并发请求数。
示例:
python token_benchmark_ray.py \
--model "DeepSeek-R1-Distill-Qwen-32B" \
--mean-input-tokens 256 \
--stddev-input-tokens 0 \
--mean-output-tokens 256 \
--stddev-output-tokens 0 \
--max-num-completed-requests 200 \
--timeout 600 \
--num-concurrent-requests 10 \
--results-dir "result" \
--llm-api openai \
--additional-sampling-params '{}'
用vLLM部署DeepSeek-R1-Distill-Qwen-32B模型进行测试,测试结果主要指标如下所示:
测试结果还包含一些不同分位的指标,这里只展示关键指标,其主要含义如下:
● TTFT(首token时间):请求开始到收到第一个token的时间。
● Prefill-Throughput:表示模型处理输入Prompt的速率。
● TPOT:表示生成相邻token之间的间隔时间。
● Decoder-Throughput:模型的输出速率。
准确性测试
使用llm_correctness.py脚本可进行文本转换任务,测试模型准确性,其主要测试模型能否准确将文本转换为数字。
示例:
python llm_correctness.py \
--model "DeepSeek-R1-Distill-Qwen-32B" \
--max-num-completed-requests 100 \
--num-concurrent-requests 5
用vLLM部署DeepSeek-R1-Distill-Qwen-32B模型进行准确性测试,主要测试模型的文本转化能力,测试结果如下所示:
可以看到模型的文本转换请求全部成功,没有失败的请求。
4 vLLM Benchmark
4.1 前言
vLLM Benchmark 是 vLLM 框架用于评估和优化其推理性能的标准化测试工具集,核心作用是为大语言模型(LLM)的推理服务提供量化指标,帮助开发者优化模型部署策略。
4.2 测试环境配置
如下图所示为测试环境拓扑,其中GPU云主机配置有4块GPU卡。部署DeepSeek的模型,安装vLLM推理引擎服务并启动;启动Open WebUI服务来接入到vLLM,实现从浏览器客户端登录系统进行问答;vLLM Benchmark用于进行性能压力测试,sharegpt dataset数据集用于性能压测过程的输入数据。
可以通过如下命令来安装vLLM Benchmark工具脚本:
git clone https://github.com/vllm-project/vllm.git
cd vllm/benchmarks/
4.3 测试实践
使用vLLM Benchmark进行性能测试时可以指定sharegpt数据集。
Sharegpt数据集的所有问题论来自于真实的用户提问,更贴近实际应用场景,可以全面、真实地评估模型在实际应用场景中的表现。具体的指标和测试方法见下文。
如下所示为性能压测命令:
python benchmark_serving.py --model /root/model-path/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B --backend vllm --dataset-name sharegpt --dataset-path /root/ShareGPT_V3_unfiltered_cleaned_split.json --max-concurrency 1 --num-prompts 50
命令参数解释如下:
● model:指定模型路径;
● backend:指定后端推理引擎类型;
● dataset-name:指定数据集类型;
● dataset-path:指定数据集路径;
● max-concurrency:指定并发数,默认为1;
● num-prompts:指定总的请求数;
对应的测试结果如下所示:
指标说明:
测试结果中的具体指标含义如下所示:
● Output token throughput(tok/s):输出 Token 吞吐量,单位为 tok/s,是衡量大模型服务生成效率的核心指标,指系统每秒能够生成的输出 token 数量。它直接反映模型的文本生成速度和系统的整体处理能力,是评估推理成本和服务商业价值的关键依据。
● TTFT:Time to First Token,首 Token 延迟,是衡量大模型服务响应速度的核心指标,具体指从用户发送请求到系统生成第一个输出 。
● TPOT:指排除首 Token 延迟后,生成每个后续输出 token 的平均耗时。计算公式为:总解码时间 / 输出 token 数量。例如,若 TPOT 为 50ms,则每秒可生成 20 个 token。
● ITL:连续两个输出token之间的间隔时间,单位毫秒,反映生成稳定性。
指定输入输出token长度
当使用的数据集为random类型的时候,执行vLLM Benchmark压测命令的时候可以指定输入长度和输出长度,测试命令如下:
python vllm/benchmarks/benchmark_serving.py \
--model /root/model-path/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--backend vllm \
--dataset-name random \
--random-input-len 256 \
--random-output-len 256 \
--max-concurrency 1 \
--num-prompts 50
进行上述测试时如果使用vllm启动的时候添加了--served-model-name参数以及--api-key参数,测试的时候需要在上述命令中加入--served-model-name内容,并且在环境变量中添加OPENAI_API_KEY=yourkey。
5 三种测评工具对比
5.1 核心功能对比
vLLM Benchmark
专注于LLM推理引擎性能评测,支持OpenAI接口兼容的框架(如Qwen系列模型)
内置TTFT(首Token延迟)、TPOT(后续Token时延)、吞吐量等核心指标
支持长上下文压力测试(如LongAlpaca-12k数据集)
EvalScope
大模型多维度评估框架,覆盖性能测试(Perf)、效果评测(Accuracy)和合规性检测
提供标准化测试集(如MMLU、CMMLU)和自定义数据集扩展能力,支持多种测评场景
集成生产级压力测试功能,支持并发请求模拟与实时监控(通过Wandb可视化)
LLMPerf
开源基准测试工具,专攻API级性能评估(延迟、吞吐量、请求成功率)
支持正确性验证(如数字格式转换准确性测试)
5.2 性能指标侧重
工具 | 核心指标 | 测试场景差异 |
---|---|---|
vLLM Benchmark | 首Token延迟(TTFT)、Token吞吐量、显存占用率 | 重推理引擎的硬件资源利用率,常用于GPU云主机环境下的引擎选型 |
EvalScope | 综合吞吐量、QPS、端到端延迟、多模态任务准确率 | 适配生产环境压力测试,支持API服务与本地模型的混合评测 |
LLMPerf | Token间延迟、首Token延迟(TTFT)、请求吞吐量、错误率 | 强调高并发模拟能力(如10+并发请求),适合API服务的SLA验证 |
5.3 技术特性差异
部署复杂度
vLLM Benchmark:从vLLM的github代码仓库源克隆
EvalScope:提供Docker镜像和Python CLI工具链,支持快速接入ModelScope社区模型和数据集
LLMPerf:依赖Ray分布式框架,需修改Tokenizer配置适配私有化模型
测试数据灵活性
vLLM Benchmark:使用ShareGPT_V3、LongAlpaca等结构化数据集,也可使用随机数据自定义输入长度
EvalScope:允许自定义输入长度(--dataset-input-length)和样本重复次数
LLMPerf:支持动态调整输入Token分布参数(--mean-input-tokens)
结果可视化
vLLM Benchmark/EvalScope:支持Wandb面板实时监控测试进度
LLMPerf:生成CSV格式原始数据,需二次处理
5.4 典型应用场景
vLLM Benchmark
推理引擎选型(如对比vLLM、LMDeploy、TensorRT-LLM的吞吐量)
长上下文支持能力验证(如测试16k+Token输入的显存溢出风险)
EvalScope
生产环境服务容量规划(如通过--parallel 模拟多路并发)
多模态模型效果-性能平衡分析(如Embedding模型响应延迟与召回率关联性)
LLMPerf
云API服务商性能对比(如Anthropic Claude vs OpenAI GPT-4 Turbo)
模型部署前的SLA合规性检查(如验证P99延迟是否达标)
5.5 工具选型建议
● LLMPerf:功能比较单一,适合API基准测试以及快速对比多个LLM API性能场景,聚焦于LLM API性能(如延迟、吞吐量、请求成功率)和正确性测试(输出格式与内容验证);
● EvalScope:功能全面且灵活,适合复杂评测的需求场景,支持多维度评估,包括模型能力、性能压测、端到端RAG评测、多模态模型评测等。适合综合评估模型在学术研究、工业部署中的表现,支持自定义评测指标和复杂场景(如竞技场模式、长文本生成测试);
● vLLM Benchmark:主要针对vLLM推理引擎的性能优化(如PagedAttention技术效果、多卡扩展性)。专为优化vLLM框架的部署参数设计,适合需要调整批次大小、显存利用率等参数以实现高吞吐量推理的场景。