自动扩缩容

系统可以通过监控队列中积压的数据数量来实现推理服务的自动扩缩容,从而有效地控制推理服务实例的数量。本文为您介绍如何为推理服务配置自动扩缩容。

实现原理

在异步推理场景中,系统可以根据队列的状态动态地对推理服务的实例数量进行伸缩,并且支持在队列为空时将推理服务的实例数缩容到0以进一步降低成本。异步推理服务自动扩缩容的原理示意图如下:

image

为异步推理服务配置自动扩缩容

您可以登录eascmd客户端后,使用以下命令开启异步推理服务的弹性伸缩功能。如何登录eascmd客户端,详情请参见下载并认证客户端

  • 命令格式

    eascmd autoscale <service_name> -Dmin=[attr_value] -Dmax=[attr_value] -Dstrategies.queue[avgbacklog]=[attr_value]

    其中:

    • queue[avgbacklog]:判断推理服务触发自动伸缩的独立指标,表示队列中等待推理服务中的每个实例处理的请求数。

    • <service_name>:异步推理服务名称。

  • 使用示例

    eascmd autoscale pmmlasync -Dmin=0 -Dmax=10 -Dstrategies.queue[avgbacklog]=10

    其中:

    • queue[avgbacklog]=10:表示推理服务中每个实例最多能处理10个请求。

    • max=10:表示推理服务的实例个数最多能扩容到10个。

    • min=0:表示推理服务的实例个数最多能缩容到0个。

    如果推理服务的实例个数为3,当队列中堆积的请求数超过30(即30/3大于10)时,开始扩容,推理服务的实例数最多扩容到10个。当队列中堆积的请求数小于且等于30个时,开始缩容。当队列中的请求长度为空时,支持将推理服务的实例数完全缩容到0,此时队列服务会持续运行。当请求数据重新被发送到队列服务中时,则会触发扩容。

您可以使用以下命令,配置扩容和缩容的等待时间。

  • 命令格式

    eascmd autoscale <service_name> -Dbehavior.<attr_name>.stabilizationWindowSeconds=<attr_value>

    其中:

    • <service_name>:异步推理服务名称。

    • <attr_name>:取值为scaleDown(表示缩容)或scaleUp(表示扩容)。

    • <attr_value>:参数值,表示配置的等待时间,INT类型,单位为秒。

      缩容时,该参数值默认为300秒。该值不宜配置过小,避免因指标波动较大导致频繁触发缩容。

      扩容时,该参数值默认为0秒。通常在指标超过阈值时,尽可能快地进行扩容,避免因资源不足影响业务,可根据实际情况进行配置。

  • 使用示例

    • 配置缩容等待时间

      eascmd autoscale pmmlasync -Dbehavior.scaleDown.stabilizationWindowSeconds=100

      表示在指标值达到缩容阈值时,等待100秒进行缩容。

    • 配置扩容等待时间

      eascmd autoscale pmmlasync -Dbehavior.scaleUp.stabilizationWindowSeconds=100

      表示在指标值达到扩容阈值时,等待100秒进行扩容。

您也可以通过配置文件,同时配置扩容和缩容的等待时间。

  • 命令格式

    eascmd autoscale <service_name> -s <scale.json>

    其中:

    • <service_name>:异步推理服务名称。

    • <scale.json>:配置文件。文件内容示例如下。

      {
        "behavior": {
          "scaleUp": {
            "stabilizationWindowSeconds": 20
          },
          "scaleDown": {
            "stabilizationWindowSeconds": 150
          }
        }
      }
  • 使用示例

    eascmd autoscale pmmlasync -s scale.json

    表示在指标值达到扩容阈值时,等待20秒进行扩容;在指标达到缩容阈值时,等待150秒进行缩容。