通过EvalScope对4090卡上的deepseek进行性能测试

DeepSeek性能测试

EvalScope是魔搭社区官方推出的模型评测与性能基准测试框架,内置多个常用测试基准和评测指标,如MMLU、CMMLU、C-Eval、GSM8K、ARC、HellaSwag、TruthfulQA、MATH和HumanEval等;支持多种类型的模型评测,包括LLM、多模态LLM、embedding模型和reranker模型。EvalScope还适用于多种评测场景,如端到端RAG评测、竞技场模式和模型推理性能压测等。此外,通过ms-swift训练框架的无缝集成,可一键发起评测,实现了模型训练到评测的全链路支持。

整体架构

在这里插入图片描述
EvalScope 架构图.

包括以下模块:

  1. Model Adapter: 模型适配器,用于将特定模型的输出转换为框架所需的格式,支持API调用的模型和本地运行的模型。

  2. Data Adapter: 数据适配器,负责转换和处理输入数据,以便适应不同的评测需求和格式。

  3. Evaluation Backend:

    • Native:EvalScope自身的默认评测框架,支持多种评测模式,包括单模型评测、竞技场模式、Baseline模型对比模式等。
    • OpenCompass:支持OpenCompass作为评测后端,对其进行了高级封装和任务简化,您可以更轻松地提交任务进行评测。
    • VLMEvalKit:支持VLMEvalKit作为评测后端,轻松发起多模态评测任务,支持多种多模态模型和数据集。
    • ThirdParty:其他第三方评测任务,如ToolBench
    • RAGEval:支持RAG评测,支持使用MTEB/CMTEB进行embedding模型和reranker的独立评测,以及使用RAGAS进行端到端评测。
  4. Performance Evaluator: 模型性能评测,负责具体衡量模型推理服务性能,包括性能评测、压力测试、性能评测报告生成、可视化。

  5. Evaluation Report: 最终生成的评测报告,总结模型的性能表现,报告可以用于决策和进一步的模型优化。

  6. Visualization: 可视化结果,帮助用户更直观地理解评测结果,便于分析和比较不同模型的表现。

框架特点

  • 基准数据集:预置了多个常用测试基准,包括:MMLU、CMMLU、C-Eval、GSM8K、ARC、HellaSwag、TruthfulQA、MATH、HumanEval等。
  • 评测指标:实现了多种常用评测指标。
  • 模型接入:统一的模型接入机制,兼容多个系列模型的Generate、Chat接口。
  • 自动评测:包括客观题自动评测和使用专家模型进行的复杂任务评测。
  • 评测报告:自动生成评测报告。
  • 竞技场(Arena)模式:用于模型间的比较以及模型的客观评测,支持多种评测模式,包括:
    • Single mode:对单个模型进行评分。
    • Pairwise-baseline mode:与基线模型进行对比。
    • Pairwise (all) mode:所有模型间的两两对比。
  • 可视化工具:提供直观的评测结果展示。
  • 模型性能评测:提供模型推理服务压测工具和详细统计,详见模型性能评测文档
  • OpenCompass集成:支持OpenCompass作为评测后端,对其进行了高级封装和任务简化,您可以更轻松地提交任务进行评测。
  • VLMEvalKit集成:支持VLMEvalKit作为评测后端,轻松发起多模态评测任务,支持多种多模态模型和数据集。
  • 全链路支持:通过与ms-swift训练框架的无缝集成,实现模型训练、模型部署、模型评测、评测报告查看的一站式开发流程,提升用户的开发效率。

测试指令

32B 1卡1并发:32b-1-1

  evalscope perf \
 --parallel 1 \
 --url http://127.0.0.1:11434/v1/chat/completions \
 --model deepseek-r1:32b \
 --log-every-n-query 5 \
 --connect-timeout 6000 \
 --read-timeout 6000 \
 --max-tokens 2048 \
 --min-tokens 512 \
 --api openai \
 --debug \
 --number 80 \
 --dataset openqa \
 --name 'deepseek-r1:32b-1-1' 

32B 1卡5并发:32b-1-5

  evalscope perf \
--parallel 5 \
--url http://127.0.0.1:11434/v1/chat/completions \
--model deepseek-r1:32b \
--log-every-n-query 5 \
--connect-timeout 6000 \
--read-timeout 6000 \
--max-tokens 2048 \
--min-tokens 512 \
--api openai \
--debug \
--number 80 \
--dataset openqa \
--name 'deepseek-r1:32b-1-5' 

32B 1卡10并发:32b-1-10

  evalscope perf \
--parallel 10 \
--url http://127.0.0.1:11434/v1/chat/completions \
--model deepseek-r1:32b \
--log-every-n-query 5 \
--connect-timeout 6000 \
--read-timeout 6000 \
--max-tokens 2048 \
--min-tokens 512 \
--api openai \
--debug \
--number 80 \
--dataset openqa \
--name 'deepseek-r1:32b-1-10' 

32B 2卡1并发:32b-2-1

  evalscope perf \
 --parallel 1 \
 --url http://127.0.0.1:11434/v1/chat/completions \
 --model deepseek-r1:32b \
 --log-every-n-query 1 \
 --connect-timeout 6000 \
 --read-timeout 6000 \
 --max-tokens 2048 \
 --min-tokens 512 \
 --api openai \
 --debug \
 --number 80 \
 --dataset openqa \
 --name 'deepseek-r1:32b-2-1' 

32B 2卡5并发:32b-2-5

 evalscope perf \
--parallel 5 \
--url http://127.0.0.1:11434/v1/chat/completions \
--model deepseek-r1:32b \
--log-every-n-query 5 \
--connect-timeout 6000 \
--read-timeout 6000 \
--max-tokens 2048 \
--min-tokens 512 \
--api openai \
--debug \
--number 80 \
--dataset openqa \
--name 'deepseek-r1:32b-2-5' 

测试结果

+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Key                               | 32b-1-1  | 32b-1-5     | 32b-1-10  | 32b-2-1   |32b-2-5    |
+===================================+==========+=============+===========+===========+===========+
| Time taken for tests (s)          | 1921.774 | 578.334     | 612.153   | 1539.471  |533.021    |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Number of concurrency             | 1        | 5           | 10        | 1         |5          |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Total requests                    | 80       | 80          | 80        | 80        |80         |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Succeed requests                  | 80       | 80          | 80        | 80        |80         |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Failed requests                   | 0        | 0           | 0         | 0         |0          |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Throughput(average tokens/s)      | 30.479   | 95.02       | 93.049    | 37.487    |104.608    |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average QPS                       | 0.042    | 0.138       | 0.131     | 0.052     |0.15       |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average latency (s)               | 24.019   | 34.707      | 71.745    | 19.24     |31.977     |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average time to first token (s)   | 24.019   | 34.707      | 71.745    | 19.24     |31.977     |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average time per output token (s) | 0.033    | 0.066       | 0.201     | 0.027     |0.061      |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average input tokens per request  | 24.2     | 24.2        | 24.2      | 24.2      |24.2       |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average output tokens per request | 732.163  | 686.913     | 712.0     | 721.375   |696.975    |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average package latency (s)       | 24.019   | 34.707      | 71.745    | 19.24     |31.977     |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Average package per request       | 1.0      | 1.0         | 1.0       | 1.0       |1.0        |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+
| Expected number of requests       | 80       | 80          | 80        | 80        |80         |
+-----------------------------------+----------+-------------+-----------+-----------+-----------+

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

性能测试工具evalscope

安装

  1. 创建 conda 环境(可选)
# It is recommended to use Python 3.10
conda create -n evalscope python=3.10
# Activate the conda environment
conda activate evalscope
  1. 使用 pip 安装依赖项
pip install evalscope                # Install Native backend (default)
# Additional options
pip install evalscope[opencompass]   # Install OpenCompass backend
pip install evalscope[vlmeval]       # Install VLMEvalKit backend
pip install evalscope[rag]           # Install RAGEval backend
pip install evalscope[perf]          # Install Perf dependencies
pip install evalscope[all]           # Install all backends (Native, OpenCompass, VLMEvalKit, RAGEval)

基准测试可视化

安装

pip install 'evalscope[app]'
evalscope app --server-port 28888

访问地址
http://127.0.0.1:28888/

基准测试指令

evalscope eval \
 --model deepseek-r1:32b \
 --api-url  http://127.0.0.1:11434/v1 \
 --api-key EMPTY \
 --eval-type service \
 --datasets gsm8k \
 --limit 10

基准测试结果

+-----------------+-----------+-----------------+----------+-------+---------+---------+
| Model           | Dataset   | Metric          | Subset   |   Num |   Score | Cat.0   |
+=================+===========+=================+==========+=======+=========+=========+
| deepseek-r1:32b | gsm8k     | AverageAccuracy | main     |    10 |     0.9 | default |
+-----------------+-----------+-----------------+----------+-------+---------+---------+ 

性能测试可视化wandb

安装

pip install wandb

本地启动参数

wandb server start -e HOST=http://127.0.0.1:8080    --wandb-api-key 'wandb_api_key' --name 'name_of_wandb_log'

远端看板地址
https://wandb.ai/

参数说明

--number 发出的请求的总数量;默认为None,表示基于数据集数量发送请求。
--parallel 并发请求的数量,默认为1。
--log-every-n-query 每n个查询记录日志,默认为10。
--stream 使用SSE流输出,默认为False。
--connect-timeout 网络连接超时,默认为120s。
--read-timeout 网络读取超时,默认为120s。
--max-tokens 可以生成的最大token数量。
--min-tokens 生成的最少token数量。
--seed 随机种子,默认为42。
--temperature 采样温度。
--url 指定API地址。
--name wandb数据库结果名称和结果数据库名称,默认为: {model_name}_{current_time},可选。
--api 指定服务API,目前支持[openai|dashscope|local|local_vllm]。
指定为openai,则使用支持OpenAI的API,需要提供--url参数。
指定为local,则使用本地文件作为模型,并使用transformers进行推理。--model为模型文件路径,也可为model_id,将自动从modelscope下载模型,例如Qwen/Qwen2.5-0.5B-Instruct。
指定为local_vllm,则使用本地文件作为模型,并启动vllm推理服务。--model为模型文件路径,也可为model_id,将自动从modelscope下载模型,例如Qwen/Qwen2.5-0.5B-Instruct。

指标说明

指标说明
Time taken for tests (s)测试所用的时间(秒)
Number of concurrency并发数量
Total requests总请求数
Succeed requests成功的请求数
Failed requests失败的请求数
Throughput(average tokens/s)吞吐量(平均每秒处理的token数)
Average QPS平均每秒请求数(Queries Per Second)
Average latency (s)平均延迟时间(秒)
Average time to first token (s)平均首次token时间(秒)
Average time per output token (s)平均每个输出token的时间(秒)
Average input tokens per request每个请求的平均输入token数
Average output tokens per request每个请求的平均输出token数
Average package latency (s)平均包延迟时间(秒)
Average package per request每个请求的平均包数
Expected number of requests预期的请求数
Result DB path结果数据库路径
Percentile数据被分为100个相等部分,第n百分位表示n%的数据点在此值之下
TTFT (s)Time to First Token,首次生成token的时间
TPOT (s)Time Per Output Token,生成每个输出token的时间
Latency (s)延迟时间,指请求到响应之间的时间
Input tokens输入的token数量
Output tokens输出的token数量
Throughput (tokens/s)吞吐量,指每秒处理token的数量

参考

EvalScope文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件架构师笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值