服务自动压测

EAS提供了针对LLM服务和通用场景服务的压测方法,帮助您轻松创建压测任务并进行一键压测,全面了解EAS服务的性能表现。本文为您介绍如何创建和管理压测任务。

前提条件

您需要先完成模型服务的部署,详情请参见服务部署

使用限制

LLM服务压测只支持OpenAI/v1/completions/v1/chat/completions两个接口。因此,只有使用兼容OpenAI API接口的推理引擎(如vLLM、SGLang、LMDeploy、BladeLLM)部署的EAS服务,才能使用LLM服务压测功能。

步骤一:进入添加压测任务页面

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 切换到压测任务页签,单击添加压测任务

步骤二:创建压测任务

EASLLM服务和通用场景服务分别提供了压测方法,具体参数配置说明如下:

LLM服务压测

如果您的EAS服务是LLM服务,强烈建议勾选LLM服务,这样能够获取LLM场景定制化的压测报告。LLM服务压测目前仅支持控制台方式创建任务,不支持EASCMD客户端。

添加压测任务页面,配置以下参数。参数配置完成后,单击确定

基本信息

image

参数

描述

所属服务

选择需要进行压测的服务名称,并选中LLM服务

服务接口

仅支持如下OpenAI的两个接口:

  • Completions:请求接口为/v1/completions,用于单轮补全任务。

  • Chat:请求接口为/v1/chat/completions,用于多轮对话任务。

压测地址

选择服务接口后,系统会自动为您配置服务调用地址。

模型ID

必填。请填写开源社区官方ModelScopeHugging Face的模型 ID。例如Qwen/Qwen2.5-7B-Instructimage用于:

  • 加载对应的分词器(tokenizer),从而准确计算压测过程的Token数量。

  • 作为请求中的模型参数(当模型名称未填写时生效)。

模型名称

选填。用于构造请求中的model参数,优先级高于模型ID,为空时将使用模型ID作为请求参数。

  • 对于以下场景,无需配置模型名称:

    • 使用BladeLLM推理引擎部署的LLM服务。

    • 使用vLLM/SGLang/LMDeploy推理引擎部署的LLM服务,请求的model参数是模型ID。

  • 对于以下场景,需要配置模型名称:

    使用vLLM/SGLang/LMDeploy推理引擎部署的LLM服务,请求的model参数不是模型ID,例如模型本地路径,或者在启动vLLM服务时额外指定了--served-model-name

压测配置

image

  • 数据类型及相关参数说明

    参数

    描述

    数据类型选择公共数据集:表示使用公开的ShareGPT数据集进行压力测试,该数据集包含多条对话记录,可用于评估LLM服务的性能。需配置以下参数:

    数据集

    目前仅支持ShareGPT

    输出长度

    用于控制生成文本的长度,不填表示不截断输出结果。通过配置输出长度,可以测试LLM服务在不同负载下的稳定性和性能。

    数据类型选择自定义数据集:支持通过以下数据来源上传自定义数据文件进行压力测试。

    数据来源

    支持以下几种数据来源:

    • 单个数据:需在单个数据文本框中输入单条压测请求数据,格式必须为Base64编码的字符串。

    • 数据地址:在数据地址文本框中输入测试数据源的HTTP路径。支持单个文件或zip文件,zip文件下载后会自动解压。

    • OSS文件:通过配置对象存储OSS路径,来获取压测文件。

    • 本地上传:按照控制台操作指引,将本地压测文件上传到对象存储OSS路径,通过对象存储OSS来获取压测文件。

    文件内的数据按行分割

    数据来源选择数据地址OSS文件本地上传时,支持配置该参数。打开开关,上传的压测文件将按行做分隔处理,以每行内容作为压测数据进行压测。否则将以整个文件内容作为压测数据进行压测。

    数据类型选择模拟数据:配置以下参数即可生成模拟数据。

    数据生成模式

    仅支持均匀分布

    输入Token

    输入Token的长度范围。最小值为10,最大值为10000。默认值均为1024。

    输出Token

    输出Token的长度范围。最小值为10,最大值为10000。默认值均为128。

  • 测试模式及相关参数说明:

    参数

    描述

    测试模型选择固定并发测试:设置固定的并发数,适用于测试系统在特定并发下的性能表现。

    并发数

    设置并发数,用来模拟并发用户数量。取值范围为[1, 200]。

    压测时长(秒)

    表示压测持续时间,单位为秒。默认为300,最小值为30。

    测试模式选择固定请求速率测试:设置固定的请求速率,适用于测试系统在特定请求速率下的性能表现。

    请求速率

    设置每秒发送的请求数量。

    最大并发数

    设置最大并发数,用来模拟并发用户数量。

    压测时长(秒)

    表示压测持续时间,单位为秒。默认为300,最小值为30。

    测试模式选择极限吞吐测试:表示一次性发送所有请求,找到推理服务能处理的最大请求速率(QPS)。适用于测试系统的极限能力。

    请求样本数

    表示压测过程发送的请求数量。取值范围为[100, 1000]。

    压测时长(秒)

    表示压测持续时间,单位为秒。默认为300,最小值为30。

  • 请求头配置:

    参数

    描述

    HTTP Header

    格式为键值对,例如:

    • 传递认证信息:Authorization: EAS_TOKEN

    • 设置请求体的数据格式:Content-Type: application/json

通用场景服务压测

支持以下两种方式创建压测任务:

通过控制台

控制台创建的压测任务为auto(自动加压)模式。在添加压测任务页面,配置以下参数。参数配置完成后,单击确定

image

参数

描述

基本信息

所属服务

选择需要进行压测的服务名称。

压测地址

表示服务调用地址。

压测配置

数据来源

支持按照单个数据数据地址OSS文件本地上传方式配置压测数据。关于压测数据如何构造及支持的文件类型,详情请参见附录1:压测数据说明

说明

其中:

  • 单条压测请求数据格式必须为Base64编码的字符串。

  • 压测文件支持单个文件或zip文件,下载zip文件后会自动解压。

文件内的数据按行分割

数据来源选择数据地址OSS文件本地上传时,支持配置该参数。

打开开关,表示上传的压测文件将按行做分隔处理,以每行内容作为压测数据进行压测。否则以整个文件内容作为压测数据进行压测。

压测时长(秒)

表示压测持续时间,单位为秒。默认为300秒。

压测QPS上限

允许到达的QPS(即每秒发送请求的速率)上限值,默认为10000。

压测RT上限(ms)

允许达到的RT(即请求发出后系统响应时间)上限值,单位为毫秒。超过该阈值会自动调节QPS,直到实时RT符合预期。

HTTP Headers

请求头配置,格式为键值对。例如:

  • 传递认证信息:Authorization: EAS_TOKEN

  • 设置请求体的数据格式:Content-Type: application/json

通过EASCMD客户端

通过bench create命令创建压测任务(如何登录EASCMD客户端,请参见下载并认证客户端。)。成功后,您可以通过返回的URL,查看实时监控数据。以Windows 64版本为例,命令格式如下所示。

eascmdwin64.exe bench create [bench_desc_json]

其中bench_desc_json表示压测任务相关信息的JSON文件,示例如下。

{
    "service": {
        "serviceName": "xgb_test"
    },
    "data": {
        "content": "W1sxLDAsMCwwLDEsMSwwLDEsMCwxLDEsMCwwLDEsMCwxLDAsMSwwLDAsMSwxLDEsMCwxLDEsMCwwLDAsMSwxLDEsMCwxLDEsMSwxLDAsMSwxLDEsMCwxLDAsMCwwLDEsMSwwLDAsMCwxLDAsMSwwLDEsMCwwLDEsMCwwLDEsMCwxLDAsMCwxLDAsMCwwLDAsMSwwLDEsMCwxLDAsMCwxLDEsMSwwLDAsMSwwLDAsMCwwLDEsMSwxLDAsMSwxLDAsMCwxLDAsMSwwLDEsMSwxLDEsMCwxLDAsMCwxLDEsMSwxLDAsMCwwLDEsMSwwXV0K"
    }
}
                

通过path指定多个OSS文件作为压测数据,示例如下。如需批量配置多条压测数据,可以直接将多个请求数据打包成zip包,通过oss://XX.zippath进行配置。

{
    "service": {
        "serviceName": "xgb_test"
    },
    "data": {
        "path": "oss://examplebucket/test1.bin,oss://examplebucket/test2.bin"
    }
}
                

JSON文件内的参数解释,如下表所示。

表项

参数

是否必选

描述

service

serviceName

待压测服务的服务名称。

data

content

单条压测请求数据,Base64编码的字符串。

如果您需要配置多条请求数据,可通过path参数进行指定。关于压测数据如何构造及支持的文件类型,详情请参见附录1:压测数据说明

path

测试数据源的路径,支持配置HTTP路径或OSS路径。可同时指定多条路径,通过半角逗号(,)分隔。同时支持通过.zip的形式,对多个压测文件进行批量打包配置。

说明

保存压测数据的文件按原始格式,不需要进行Base64编码。

multiLine

测试数据是否按行分割,Bool类型,默认为false。如果设置为true,会将下载的数据逐行解析。

http

headers

http请求header设置,list类型。例如:["Authorization:aaa", "Content-Type:text"]

timeout

http请求延时(单位为毫秒),默认为20000。

optional

mode

压测模式,支持以下三种模式:

  • auto(默认值):自动加压模式。

  • scan:周期加压模式。

  • manual:手动加压模式。

关于压测模式的更多详细内容,请参见附录2:压测模式介绍

duration

压测时长(单位秒),默认为600,最大不超过1200。

agentCount

manual模式下的客户端实例数量,实例数越多压力越大,默认为1。

concurrency

manual模式下的每个客户端实例的并发数,并发越高压力越大,默认为2。当压力不够时先增加并发,如果增加并发无法提升压力时再尝试增加客户端实例数。

adjustInterval

scan模式下自动加压的动态调整间隔(单位为秒),默认为60。

minQPS

scan模式下自动加压的起始QPS值,默认为100。

maxQPS

scanauto模式下允许到达的QPS上限值。

maxRT

scanauto模式下的RT(TP99)上限值,超过该阈值会自动调节QPS,直到实时RT符合预期。

qpsGrowthDelta

scan模式下的QPS每次增长的数值,默认为50。

faultTolerate

scanauto模式下对请求错误(非200状态码)的容忍程度。比如0.01,表示有1%的请求出现错误则触发错误处理流程。默认值为0.001,即对错误请求的容忍程度为千分之一。

faultAction

scanauto模式下在请求错误率超过faultTolerate设定的阈值时,压测控制器的行为,支持以下取值:

  • stop:维持当前QPS, 不再继续加压。

  • revise(默认值):动态调整QPS, 直到请求错误率符合预期。

使用示例如下(假设描述压测任务相关信息的JSON文件为bench_xgb.json):

eascmdwin64.exe bench create bench_xgb.json

系统输出示例如下。

[RequestId]: DE240637-4976-59AF-A28C-BAA55C0A****
[OK] Task [benchmark-xgb-test-b514] is creating
[OK] [Agnet: 0/1]: Succeed to start benchmark master
[OK] [Agnet: 0/1]: Succeed to start benchmark master
[OK] [Agnet: 1/1]: Benchmark task is Running
[OK] Benchmark task is Running
[OK] Click the link http://127.0.0.1:18222/eas-benchmark/statsview to observe realtime visualization details, you can turn it off with CTRL+C.
Turning off will not interrupt the benchmark test task, and you can reopen it by the visualize command:
eascmd -c [config_file] bench visualize benchmark-xgb-test-b514

步骤三:查看压测详情

查看实时监控数据

当压测任务状态运行中时,单击任务名称,查看实时监控数据。image

查看压测报告

当压测任务状态已停止时,单击任务名称查看压测报告。image

压测报告包含压测任务基本信息压测配置压测结果压测任务监控等内容。其中压测任务监控指标说明如下:

  • LLM服务支持展示的监控指标

    TTFT(Time To First Token)

    请求首包延时。表示从发送请求到接收到服务生成的第一个Token的时间

    image

    TPOT(Time per Output Token)

    请求的每包延时。表示服务生成的相邻两个Token的时间间隔。

    image

    TPS(Token Per Second)

    表示每秒传输的Token数量。

    image

  • 所有服务都支持展示的监控指标

    每秒请求数分布

    表示服务每秒接收到的请求数量的分布情况。

    image

    响应时间分布

    表示服务在选定时间范围内返回的响应数量的分布情况。

    image

    传输流量分布

    表示在选定时间范围内,客户端发送到服务的请求数据量和服务返回给客户端的响应数据量分布情况。

    image

    响应时间区间分布

    表示服务返回的响应时间的区间占比,单位为毫秒。

    image

    响应时间整体分布

    表示不同分位数下,请求的端到端延时,单位为毫秒。

    image

    返回状态码分布

    表示服务返回状态码的分布情况。

    image

步骤四:管理压测任务

通过控制台管理压测任务

您可以在压测任务页签中查看已创建的压测任务列表,并支持启动克隆删除任务。

image

通过EASCMD客户端管理压测任务

  • 查看压测任务列表

    使用bench list命令查看当前用户创建的压测任务列表。以Windows64 版本为例,命令格式如下所示。

    eascmdwin64.exe bench ls

    系统输出示例如下。

    [RequestId]: 7F953F8E-8897-5785-808A-CA648302****
    +-------------------------+--------------------------+-------------+----------------+---------+---------------------+
    |        TASKNAME         |          TASKID          |   REGION    | AVAILABLEAGENT | STATUS  |     CREATETIME      |
    +-------------------------+--------------------------+-------------+----------------+---------+---------------------+
    | benchmark-***-test-**** | eas-b-ql470xog6qeh25**** | cn-shanghai |              0 | Stopped | 2022-06-17 17:58:01 |
    | benchmark-***-test-**** | eas-b-bdnzvwq0z0h3xq**** | cn-shanghai |              2 | Running | 2022-06-20 12:18:54 |
    +-------------------------+--------------------------+-------------+----------------+---------+---------------------+
  • 查看压测任务详情

    使用bench desc命令查看指定压测任务的详细信息。以Windows64 版本为例,命令格式如下所示。

    eascmdwin64.exe bench desc [benchmark_task_name]

    其中[benchmark_task_name]需替换为压测任务名称。

    系统输出示例如下。

    +----------------+------------------------------------------------------------------------------+
    |     TaskName   | benchmark-***-test-b514                                                      |
    |     TaskId     | eas-b-bdnzvwq0z0h3xq****                                                     |
    |    ServiceName | xgb_test                                                                     |
    |         Region | cn-shanghai                                                                  |
    |   DesiredAgent | 2                                                                            |
    | AvailableAgent | 2                                                                            |
    |         Status | Running                                                                      |
    |        Message | Benchmark task is running                                                    |
    |     CreateTime | 2021-10-20 12:38:35                                                          |
    |     UpdateTime | 2021-10-20 12:38:45                                                          |
    |         Config | {                                                                            |
    |                |   "base": {                                                                  |
    |                |     "agentCount": 2,                                                         |
    |                |     "concurrency": 40,                                                       |
    |                |     "duration": 1200,                                                        |
    |                |     "requestCount":                                                          |
    |                | 922337203685477****,                                                         |
    |                |   },                                                                         |
    |                |  ...                                                                         |
    |                | }                                                                            |
    +----------------+------------------------------------------------------------------------------+
  • 启动压测任务实时可视化

    使用bench visualize命令启动压测任务的实时可视化功能。该命令执行完成后会在本地127.0.0.1启动一个由webserver提供的实时监控页面的展示。以Windows64 版本为例,命令格式如下所示。

    eascmdwin64.exe bench visualize [benchmark_task_name]

    其中[benchmark_task_name]需替换为压测任务名称。

    系统输出示例如下。

    [OK] Click the link http://127.0.0.1:18734/eas-benchmark/statsview to observe realtime visualization details, you can turn it off with CTRL+C.
    Turning off will not interrupt the benchmark test task, and you can reopen it by the visualize command:
    eascmd -c [config_file] bench visualize benchmark-xgb-test-b514

    使用浏览器打开链接http://127.0.0.1:18734/eas-benchmark/statsview,即可查看实时数据结果。

  • 获取压测报告

    当压测任务状态为Stopped状态时,表示压测任务结束。压测报告会保存到OSS中,您可以使用bench report命令获取压测任务报告。以Windows64 版本为例,命令格式如下所示。

    eascmdwin64.exe  bench report [benchmark_task_name]

    其中[benchmark_task_name]需替换为压测任务名称。

    系统输出示例如下。

    [OK] Benchmark task benchmark-demo-test-c7eb report url: http://eas-benchmark.oss-cn-chengdu.aliyuncs.com/summary/benchmark-demo-test-c7eb-10004.html

    使用浏览器打开url后的链接,即可查看压测报告结果,具体如下图所示。image.png

  • 动态修改客户端实例数量和并发数

    当压测模式为manual时,需要使用bench update命令动态修改客户端实例数量和并发数。以Windows64 版本为例,命令格式如下所示。

    eascmdwin64.exe bench update [benchmark_task_name] -Doptional.concurrency=<attr_value> -Doptional.agentCount=<attr_value>

    其中<attr_value>为具体取值。使用示例如下:

    eascmdwin64.exe bench update benchmark-demo-b99c -Doptional.concurrency=2 -Doptional.agentCount=1

    系统输出示例如下。

    [RequestId]: 9920C672-4D41-5CC4-8EC0-C690F76EB2BA
    [OK] Running [TaskName: benchmark-demo-b99c, DesiredAgent:1, AvailableAgent: 1, Message: Benchmark task is Updating]
    [OK] Benchmark task benchmark-demo-b99c was updated successfully
  • 停止压测任务

    使用bench stop命令停止当前正在运行的压测任务。以Windows64 版本为例,命令格式如下所示。

    eascmdwin64.exe bench stop [benchmark_task_name]

    其中[benchmark_task_name]需替换为压测任务名称。

    系统输出示例如下。

    Are you sure to stop the benchmark task [benchmark-***-test-b514] in [cn-shanghai]? [Y/n]
    [OK] Task [benchmark-***-test-b514] is stopping
    [OK] [Agnet: 0/1]: Benchmark task is Running
    [OK] [Agnet: 0/1]: Benchmark task is Stopped
    [OK] Benchmark task is stopped

    如果停止任务时,正在运行实时可视化功能。系统会在执行可视化命令的终端输出压测报告,您也可以通过bench report命令,获取更详细的html图文报告。

  • 启动压测任务

    使用bench start命令启动处于停止状态的压测任务。以Windows64 版本为例,命令格式如下所示。

    eascmdwin64.exe bench start [benchmark_task_name]
    说明

    该命令与bench create命令的区别为,通过该命令重新启动压测任务后,会按照该任务最后一次更新的配置,重新启动新一轮的压测任务。

    其中[benchmark_task_name]需替换为压测任务名称。

    系统输出示例如下。

    Are you sure to start the benchmark task [benchmark-***-test-b514] in [cn-shanghai]? [Y/n]
    [OK] Task [benchmark-***-test-b514] is starting
    [OK] [Agnet: 0/1]: Succeed to start benchmark master
    [OK] [Agnet: 1/1]: Benchmark task is Running
    [OK] Benchmark task is Running
    [OK] Click the link http://127.0.0.1:18947/eas-benchmark/statsview to observe realtime visualization details, you can turn it off with CTRL+C.
    Turning off will not interrupt the benchmark test task, and you can reopen it by the visualize command:
    eascmd -c [config_file] bench visualize benchmark-xgb-test-b514
  • 删除压测任务

    压测任务运行结束后,控制器会根据压测任务结束的状态保留压测任务的记录,具体保留规则如下表所示。

    结束状态

    保留时间

    Stopped

    48小时。

    CreateFailedUpdateFailedTerminatedError

    10分钟。

    超过保留时间,系统会自动删除压测任务。

    您也可以使用bench delete命令,手动删除压测任务。命令格式如下所示。

    eascmdwin64.exe bench delete [benchmark_task_name]

    其中[benchmark_task_name]需替换为压测任务名称。

    系统输出示例如下。

    Are you sure to delete the benchmark task [benchmark-***-test-b514] in [cn-shanghai]? [Y/n]
    [OK] Benchmark task benchmark-***-test-b514 is Deleting
    [OK] Benchmark task was deleted successfully

附录1:压测数据说明

压测数据格式说明

服务的请求数据格式与模型的定义及Processor的实现有关,分为以下两种情况:

  • 如果是非结构化数据(如语音、图片、文字等),直接通过文件上传作为压测请求数据。

  • 如果是结构化数据(如TFRequest),需要通过EAS SDK构造请求数据(参考模型服务预热),并将生成的二进制数据通过文件上传。

压测数据文件类型

支持的文件类型包括.txt.jpg.bin.zip等,具体取决于服务的业务需求。

附录2:压测模式介绍

eas-benchmark支持auto、scan、manual三种压测模式,您可以在配置文件optional部分,添加mode参数,指定压测模式。

  • auto模式

    自动加压模式。eas-benchmark控制器会自动创建用于压测的Agent Worker,并设置合适的并发,通过自动寻优的算法来寻找服务的承压上限。该模式中,您只需在配置文件中指定服务名字和压测数据即可,其它参数均可使用默认值。具体配置示例,如下所示。

    {
        "service": {
            "serviceName": "demo"
        },
        "data": {
            "path": "https://examplebucket.oss-cn-chengdu.aliyuncs.com/data/warmup.tf.bin"
        },
        "optional": {
            "maxQPS": 1000,
            "duration": 300
         }
    }
  • scan模式

    周期加压模式。根据您指定的起始QPS(minQPS),QPS上限(maxQPS),QPS增长时间间隔(adjustInterval),QPS增长步长(qpsGrowthDelta)等参数,动态加压,当服务承载到达指定的maxRT、maxQPS或服务压测出现错误数量超出容忍程度(faultTolerate)时为止。具体配置示例,如下所示。

    {
        "service": {
            "serviceName": "demo"
        },
        "data": {
            "content": "aGVsbG8K"
        },
        "optional": {
            "mode": "scan",
            "maxQPS": 1000,
            "minQPS": 500,
            "qpsGrowthDelta": 100,
            "adjustInterval": 30
        }
    }
  • manual模式

    手动加压模式。固定压测Agent数量及每个Agent的并发数,您可以在压测过程中动态调整Agent数量及Agent并发数。具体配置示例,如下所示。

    {
        "service": {
            "serviceName": "demo"
        },
        "data": {
            "content": "aGVsbG8K"
        },
        "optional": {
            "mode": "manual",
            "agentCount": 1,
            "concurrency": 5
        }
    }

相关文档

  • 您可以通过调用API的方式,来创建和管理压测任务。具体调用方法和详情介绍,请参见压测任务

  • 在确认服务性能满足要求后,您即可使用该服务进行模型推理。具体操作,请参见调用方式概览