本文旨在介绍如何在智算平台上使用模型性能测试工具 EvalScope。

前提条件

已成功部署模型,即已创建推理服务。

创建容器实例

  1. 登录控制台,默认进入 AI 计算平台。

  2. 在左侧导航栏,选择容器实例,进入容器实例页面。

  3. 点击创建容器实例,在创建容器实例页面,配置各项参数,点击确定

    • 镜像:在外部镜像地址下,输入 hub.kubesphere.com.cn/aicp-tests/evealscope-perf:0.17.1

    • 其他参数说明,请参阅创建容器实例

启动 EvalScope 测试模型

  1. 访问容器实例后台

  2. 执行如下命令,启动 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

    更多参数说明,请参阅此文档

  3. 输出示例:

    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
  4. 使用 Swanlab 查看可视化报告。

    1. 在容器实例后台继续执行以下命令。

      swanlab watch /root/outputs -h 0.0.0.0 -p 9001
    2. 点击容器实例的更多访问,访问 9001 端口的 URL,即可看到图表结果。

      bp evalscope swanlab