服务自动压测

eas-benchmarkEAS平台内置的分布式通用压测工具,支持动态加压、实时查看压测秒级监控数据等,并在压测结束后生成汇总的图文报告。您可以通过该工具对使用EAS部署的服务创建压测任务并进行一键压测,从而了解EAS服务的使用性能。本文为您介绍如何创建和管理压测任务。

前提条件

已部署模型服务,详情请参见服务部署:控制台

快速入门

您可以登录eascmd客户端后使用bench子命令来创建和管理压测任务(创建压测任务管理压测任务),如何登录eascmd客户端,请参见下载并认证客户端您可以参考如下视频,快速了解服务自动压测功能的使用方法。快速开始

创建压测任务

通过EASCMD客户端创建压测任务

通过bench create命令创建压测任务。压测任务创建成功后,您可以根据返回的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参数进行指定。关于压测数据如何构造及支持的文件类型,详情请参见压测数据说明

path

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

说明

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

multiLine

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

http

headers

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

timeout

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

optional

mode

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

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

  • scan:周期加压模式。

  • manual:手动加压模式。

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

duration

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

agentCount

当压测模式选择manual模式时,配置该参数。

压测的客户端实例数量,实例数越多压力越大,默认为1。

concurrency

当压测模式选择manual模式时,配置该参数。

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

adjustInterval

当压测模式选择scan模式时,配置该参数。

自动加压的动态调整间隔(单位为s),默认为60。

minQPS

当压测模式选择scan模式时,配置该参数。

自动加压的起始QPS值,默认为100。

maxQPS

当压测模式选择scan模式或auto模式时,配置该参数。

允许到达的QPS上限值。

maxRT

当压测模式选择scan模式或auto模式时,配置该参数。

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

qpsGrowthDelta

当压测模式选择scan模式时,配置该参数。

QPS每次增长的数值,默认为50。

faultTolerate

当压测模式选择scan模式或auto模式时,配置该参数。

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

faultAction

当压测模式选择scan模式或auto模式时,配置该参数。

在请求错误率超过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

通过控制台创建压测任务

控制台创建的压测任务为auto(自动加压)模式,具体操作步骤如下。

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

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

  3. 添加压测任务页面,配置以下参数后,单击创建

    参数

    描述

    所属服务

    选择需要创建压测任务的服务名称。

    压测数据

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

    说明

    其中数据地址OSS文件支持同时配置多个文件地址,以半角逗号(,)分隔。

    文件内的数据是否需要按行分隔

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

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

    压测时长(秒)

    默认为300秒。

    压测QPS上限

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

    压测RT上限 (ms)

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

管理压测任务

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

  • 查看压测任务列表

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

    eascmdwin64.exe bench ls

    使用示例如下:

    eascmdwin64.exe bench ls

    系统输出如下类似结果。

    [RequestId]: 7F953F8E-8897-5785-808A-CA64830215F6
    +-------------------------+--------------------------+-------------+----------------+---------+---------------------+
    |        TASKNAME         |          TASKID          |   REGION    | AVAILABLEAGENT | STATUS  |     CREATETIME      |
    +-------------------------+--------------------------+-------------+----------------+---------+---------------------+
    | benchmark-xgb-test-7846 | eas-b-ql470xog6qeh25**** | cn-shanghai |              0 | Stopped | 2022-06-17 17:58:01 |
    | benchmark-xgb-test-b514 | 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表示压测任务名称。使用示例如下:

    eascmdwin64.exe bench desc benchmark-demo-test-c7eb

    系统输出如下类似结果。

    +----------------+------------------------------------------------------------------------------+
    |     TaskName   | benchmark-xgb-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]

    使用示例如下。

    eascmdwin64.exe bench visualize benchmark-xgb-test-b514

    系统输出如下类似结果。

    [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]

    使用示例如下。

    eascmdwin64.exe bench report benchmark-demo-test-c7eb

    系统输出如下类似结果。

    [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]

    使用示例如下:

    eascmdwin64.exe bench stop benchmark-xgb-test-b514

    系统输出如下类似结果。

    Are you sure to stop the benchmark task [benchmark-xgb-test-b514] in [cn-shanghai]? [Y/n]
    [OK] Task [benchmark-xgb-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命令的区别为,通过该命令重新启动压测任务后,会按照该任务最后一次更新的配置,重新启动新一轮的压测任务。

    使用示例如下:

    eascmdwin64.exe bench start benchmark-xgb-test-b514

    系统输出如下类似结果。

    Are you sure to start the benchmark task [benchmark-xgb-test-b514] in [cn-shanghai]? [Y/n]
    [OK] Task [benchmark-xgb-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]

    使用示例如下:

    eascmdwin64.exe bench delete benchmark-xgb-test-b514

    系统输出如下类似结果。

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

通过控制台管理压测任务

您可以在压测任务页签,查看已创建的压测任务列表,并管理压测任务。image

  • 支持一键启动、停止或删除压测任务。

  • 您需要单击右上角的刷新按钮,来刷新压测任务状态。

  • 当任务状态Running时,您可以单击操作列下的查看,来查看任务的实时监控数据。407eca10047573f0785f9b5940877175

  • 当压测任务自动结束或手动停止压测任务后,即任务状态Stopped时,您可以单击操作列下的查看,来查看压测报告。49ee99a5367c88017255f9fddb0c49a0

压测数据说明

压测数据格式说明

服务的请求数据格式与模型的定义及Processor的实现有关。

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

  • 如果服务的请求数据为结构化数据,例如请求必须为TFRequest,则需要通过EAS SDK来构造请求数据。您可以参考模型服务预热,将生成的二进制数据通过文件上传作为压测请求数据。

压测数据文件类型

压测数据文件类型无特殊要求,与服务的业务类型有关,例如.txt、.jpg、.bin等格式均支持。

压测模式介绍

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使用说明

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

相关文档

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