使用 EvalScope 工具测试模型性能
本文旨在介绍如何在智算平台上使用模型性能测试工具 EvalScope。
前提条件
已成功部署模型,即已创建推理服务。
创建容器实例
-
登录控制台,默认进入 AI 计算平台。
-
在左侧导航栏,选择容器实例,进入容器实例页面。
-
点击创建容器实例,在创建容器实例页面,配置各项参数,点击确定。
-
镜像:在外部镜像地址下,输入
hub.kubesphere.com.cn/aicp-tests/evealscope-perf:0.17.1。 -
其他参数说明,请参阅创建容器实例。
-
启动 EvalScope 测试模型
-
执行如下命令,启动 EvalScope 以测试模型性能。
注意按照以下参数说明,将命令中 [] 及其中的内容替换为需要测试的模型信息。
evalscope perf --parallel 1 10 --number 10 20 --model [DeepSeek-R1-Distill-Qwen-1.5B] --url [https://xxx.cn/xb3a/inference/xxx/inf-xxx/v1/chat/completions] --dataset random --max-tokens 1024 --min-tokens 1024 --tokenizer-path [/*****/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B] --api-key [sk-****] --min-prompt-length 1024 --max-prompt-length 1024 --swanlab-api-key local说明 如果 dataset 是 random,则 tokenizer-path 必填,上方案例使用 DeepSeek-R1-Distill-Qwen-1.5B(较小)。
参数 说明 --model
待测试模型的名称。
--url
指定 API 地址,支持 /chat/completion 和 /completion 两种端点。
将示例中的
https://xxx.cn/xb3a/inference/xxx/inf-xxx/替换为实际推理服务的外网访问地址,可在推理服务详情页面的服务信息中复制得到。--api-key
API 密钥,可在推理服务详情页面的服务信息中复制得到。
--parallel
并发请求的数量,可以传入多个值,用空格隔开。默认为 1。
--number
发出的请求的总数量,可以传入多个值,用空格隔开(需与 parallel 的数量一一对应)。默认为 1000。
--max-prompt-length
最大输入 prompt 长度,默认为 131072。大于该值时,将丢弃 prompt。
--min-prompt-length
最小输入 prompt 长度,默认为 0。小于该值时,将丢弃 prompt。
--dataset
可以指定如下数据集模式:
-
openqa: 从 modelscope 自动下载 OpenQA,prompt 长度较短,一般在 100 token 以下。指定 dataset_path 将使用 jsonl 文件的 question 字段作为 prompt。 -
longalpaca: 从 modelscope 自动下载 LongAlpaca-12k,prompt 长度较长,一般在 6000 token 以上。指定 dataset_path 将使用 jsonl 文件的 instruction 字段作为 prompt。 -
line_by_line: 必需提供 dataset_path,逐行将 txt 文件的每一行作为一个 prompt。 -
flickr8k: 从 modelscope 自动下载 Flick8k,构建图文输入,数据集较大,适合评测多模态模型,不支持指定 dataset_path。 -
kontext_bench: 从 modelscope 自动下载 Kontext-Bench,构建图文输入,数据集较小,约 1000 条数据,适合快速评测多模态模型,不支持指定 dataset_path。 -
random: 根据 prefix-length,max-prompt-length 和 min-prompt-length 随机生成 prompt,必需指定 tokenizer-path,使用示例。 -
random_vl: 随机生成图像和文本输入,在 random 基础上增加了图像相关参数(image-width,image-height,image-format,image-num),使用示例。 -
custom: 自定义数据集解析器,参考自定义数据集指南。
--tokenizer-path
可选,指定分词器权重路径,用于计算输入和输出的 token 数量,通常为模型所在路径。
--max-tokens
可以生成的最大 token 数量。
--min-tokens
生成的最少 token 数量,不是所有模型服务都支持该参数,请查看对应 API 文档。
对于 vLLM>=0.8.1 版本,需要额外设置
--extra-args '{"ignore_eos": true}'。--swanlab-api-key
swanlab API 密钥,设置为 local 则本地启动 (可以可视化压力测试结果)
--outputs-dir
输出文件路径,默认为
./outputs。更多参数说明,请参阅此文档。
-
-
输出示例:
2025-08-15 07:43:53,055 - evalscope - INFO - Save the summary to: outputs/20250815_074231/DeepSeek-R1-Distill-Qwen-1.5B/parallel_10_number_20 ╭──────────────────────────────────────────────────────────╮ │ Performance Test Summary Report │ ╰──────────────────────────────────────────────────────────╯ Basic Information: ┌───────────────────────┬──────────────────────────────────┐ │ Model │ DeepSeek-R1-Distill-Qwen-1.5B │ │ Total Generated │ 30,720.0 tokens │ │ Total Test Time │ 70.94 seconds │ │ Avg Output Rate │ 433.02 tokens/sec │ └───────────────────────┴──────────────────────────────────┘ Detailed Performance Metrics ┏━━━━━━┳━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┓ ┃ ┃ ┃ Avg ┃ P99 ┃ Gen. ┃ Avg ┃ P99 ┃ Avg ┃ P99 ┃ Success┃ ┃Conc. ┃ RPS ┃ Lat.(s) ┃ Lat.(s) ┃ toks/s ┃ TTFT(s) ┃ TTFT(s) ┃ TPOT(s) ┃ TPOT(s) ┃ Rate┃ ┡━━━━━━╇━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━┩ │ 1 │ 0.17 │ 5.757 │ 5.876 │ 177.28 │ 0.343 │ 0.423 │ 0.005 │ 0.005 │ 100.0%│ │ 10 │ 1.52 │ 6.569 │ 6.611 │ 1553.59 │ 0.405 │ 0.444 │ 0.006 │ 0.006 │ 100.0%│ └──────┴──────┴──────────┴──────────┴─────────┴──────────┴─────────┴──────────┴─────────┴──────────┘ Best Performance Configuration Highest RPS Concurrency 10 (1.52 req/sec) Lowest Latency Concurrency 1 (5.757 seconds) Performance Recommendations: • The system seems not to have reached its performance bottleneck, try higher concurrency swanlab: Experiment DeepSeek-R1-Distill-Qwen-1.5B_20250815_074231 has completed swanlab: 🌟 Run `swanlab watch /root/outputs` to view SwanLab Experiment Dashboard locally -
使用 Swanlab 查看可视化报告。
-
在容器实例后台继续执行以下命令。
swanlab watch /root/outputs -h 0.0.0.0 -p 9001 -
点击容器实例的更多访问,访问 9001 端口的 URL,即可看到图表结果。
-