服务模型所有相关参数说明

您可以使用EASCMD工具创建EAS服务,创建服务前需要配置服务相关信息的JSON文件。本文为您介绍JSON文件内的参数说明信息。

说明

如何使用EASCMD工具,详情请参见下载并认证客户端

参数说明

JSON文件参数说明如下表所示。

参数

是否必选

描述

name

服务名称,必须在同一地域内唯一。

token

表示访问鉴权的Token字符串。如果未指定,则系统自动生成。

model_path

model_pathprocessor_path分别为模型和Processor的输入数据源地址,均支持以下格式的地址:

  • HTTP地址:所需文件必须为TAR.GZTARBZ2ZIP等压缩包。

  • OSS地址:地址链接可以是具体文件路径或文件夹路径。同时,还需要配置参数oss_endpoint,示例如下。

    "model_path":"oss://wowei-beijing-tiyan/alink/",
    "oss_endpoint":"oss-cn-beijing.aliyuncs.com",
  • 本地路径:如果使用test命令进行本地调试,则可以使用本地路径。

oss_endpoint

OSSEndpoint,例如oss-cn-beijing.aliyuncs.com。其他取值请参见OSS地域和访问域名

说明

默认无需指定该参数,会使用当前地域的内网OSS地址,来进行模型文件或Processor文件的下载。当跨地域访问OSS时,需要指定该参数。例如:当您在杭州地域部署服务时,model_path中填写了北京地域的OSS地址,则需要使用该参数来指定北京地域的OSS公网访问地址。

model_entry

表示模型的入口文件,可以包含任意文件。如果未指定,则使用model_path中的文件名。主文件路径会传递给Processor中的initialize()函数。

model_config

表示模型的配置,支持任意文本。该参数值会传递给ProcessorInitialize()函数的第二个参数。

processor

  • 如果使用官方提供的预置Processor,则直接在此指定Processor Code即可。Processoreascmd中使用的Code请参见预置Processor使用说明

  • 如果使用自定义Processor,则无需配置该参数,只需要配置processor_pathprocessor_entryprocessor_mainclassprocessor_type参数。

processor_path

Processor相关的文件包路径,可以参见model_path参数的描述信息。

processor_entry

Processor的主文件。例如libprocessor.soapp.py,其中包含了预测所需的initialize()函数和process()函数的实现。

processor_typecpppython时,必须指定该参数。

processor_mainclass

Processor的主文件,JAR包中的mainclass。例如com.aliyun.TestProcessor

processor_typejava时,必须指定该参数。

processor_type

processor实现的语言,取值如下:

  • cpp

  • java

  • python

warm_up_data_path

用于模型预热的请求文件路径。更多关于模型预热功能的介绍,详情请参见模型服务预热

runtime.enable_crash_block

当服务实例因Processor代码异常发生Crash后,服务实例是否会自动重启。取值如下:

  • true:表示服务实例不自动重启,以保留现场进行问题排查。

  • false:默认值,表示服务实例自动重启。

cloud

使用公共资源组部署服务时,请务必使用cloud.computing.instance_type字段来指定实例使用的机型。

"cloud":{
      "computing":{
          "instance_type":"ecs.gn6i-c24g1.6xlarge"
      }
  }

具体参数配置详情,请参见公共资源组使用说明

autoscaler

表示模型服务自动水平扩缩容的配置信息。具体参数配置,详情请参见水平自动扩缩容功能

containers

表示使用自定义镜像部署服务时的容器信息。具体参数配置,详情请参见服务部署:自定义镜像

storage

表示服务存储挂载等相关信息。

metadata

表示服务的Meta信息。具体参数配置,详情请参见1.metadata参数说明

features

表示服务的特殊功能配置。具体参数配置,详情请参见2.features参数说明

networking

表示服务的调用配置。具体参数配置,详情请参见3.networking参数说明

1.metadata参数说明

参数

是否必选

描述

一般参数

instance

服务启动的实例数量。

workspace_id

设置工作空间ID参数后,服务将只能在指定的PAI工作空间之内使用。例如:1405**

cpu

每个实例需要的CPU数量。

memory

每个实例需要的内存数量,取值为整型,单位为MB。例如,"memory": 4096表示每个实例需要4 GB内存。

gpu

每个实例需要的GPU数量。

gpu_memory

每个实例所需的GPU显存数量,取值为整型,单位为GB。

系统支持实例按显存进行调度,实现单卡共享多实例功能。如果使用显存调度,则需要将gpu字段配置为0。当gpu字段配置为1时,表示实例独占整张GPU卡,此时gpu_memory 字段会被忽略。

重要

当前未开启显存的严格隔离,您需自行控制各实例的显存使用量,不能超出申请量,避免出现显存内存溢出。

gpu_core_percentage

每个实例所需的单个GPU算力比例,取值为1~100之间的整数,单位为百分比。例如填写10,代表的是单个GPU10%算力。

系统支持实例按算力进行调度,实现单卡共享多实例功能。另外指定该参数时,必须指定gpu_memory参数,否则该参数不生效。

qos

实例的服务质量,可选参数值为空或BestEffort。当qos指定为BestEffort时,表示进入CPU共享模式。使实例完全按照显存和内存进行调度,不再受节点的CPU数量限制,节点上的所有实例共享CPU。此时cpu字段表示,按CPU共享模式时,单个实例能使用的最大配额。

resource

资源组ID,配置策略如下:

  • 如果服务部署在公共资源组,则可以忽略该参数,此时服务进行按量付费。

  • 如果服务部署在专属资源组,则配置该参数为资源组ID。例如eas-r-6dbzve8ip0xnzte5rp

cuda

服务需要使用的cuda版本。服务运行时,会自动将指定版本的cuda挂载到实例的/usr/local/cuda目录中。

目前支持的cuda版本为:8.0,9.0,10.0,10.1,10.2,11.0,11.1,11.2。使用示例为:"cuda":"11.2"

enable_grpc

表示是否开启服务网关的GRPC连接,取值如下:

  • false:默认值,表示网关不开启GRPC链接,默认支持HTTP请求。

  • true:表示网关开启GRPC连接。

说明

如果使用自定义镜像部署服务时,镜像中的服务端实现为GRPC,则需要通过该参数将网关的协议切换成GRPC。

enable_webservice

表示是否开启webserver,从而部署为一个AI-Web应用:

  • false:默认值,表示不开启webserver。

  • true:表示开启webserver。

高级参数

重要

请您慎重调整。

rpc.batching

是否开启ServerBatching,用于GPU模型加速,仅支持预置processor模式。取值如下:

  • false:默认值,关闭ServerBatching。

  • true:开启ServerBatching。

rpc.keepalive

单个请求的最长处理时间。如果请求处理时长超过该值,则服务端返回408超时并关闭连接。默认值为5000,单位为毫秒。

说明

当使用自定义Processor时,还需额外在代码中配置allspark参数,详情请参见使用Python开发自定义Processor

rpc.io_threads

每个实例用于处理网络IO的线程数量,默认值为4。

rpc.max_batch_size

每个Batch的最大Size,默认值为16,仅支持预置processor模式。仅rpc.batching取值为true时,该参数生效。

rpc.max_batch_timeout

每个Batch的最大Timeout,默认值为50毫秒,仅支持预置processor模式。仅rpc.batching取值为true时,该参数生效。

rpc.max_queue_size

队列大小,默认值为64。队列满时,服务端返回450并关闭连接。为保证服务端不会压力过载,队列可以提前通知客户端向其他实例进行重试。对于RT较长的服务队列,可以适当减小队列长度,以避免请求在队列中堆积导致大量请求超时。

rpc.worker_threads

每个实例中用于并发处理请求的线程数,默认值为5,仅支持预置processor模式。

rpc.rate_limit

表示开启QPS限流功能,并限制实例处理的最大QPS。默认为0,表示关闭QPS限流功能。

例如:该参数配置为2000,当QPS高于2000时,会拒绝请求并返回429(Too Many Requests)。

rolling_strategy.max_surge

服务滚动更新过程中,多于指定实例数,最多可以额外创建的实例个数。该参数可以为正整数,表示实例个数;也可以为百分比,例如2%。默认比例为2%。增大该参数可以提高服务更新速度。

例如:服务实例个数指定为100,该参数配置为20,则服务更新开始后会立即创建20个新实例。

rolling_strategy.max_unavailable

服务滚动更新过程中,最大不可用的实例个数。该参数可以在服务更新过程中,为新实例释放资源,避免服务因空闲资源不足而更新卡住。目前在专有资源组中,该参数默认为1;在公共资源组中,该参数默认为0。

例如:该参数为N,则服务更新开始时会立即停止N个实例。

说明

如果空闲资源充足,可以将该参数配置为0。该参数配置过大可能会影响服务稳定性。因为在服务更新瞬间,可用实例个数会减少,则单实例承载的流量会变大。您需要权衡服务稳定性和资源情况来配置该参数。

eas.termination_grace_period

表示实例的优雅退出时间,单位为秒,默认为30秒。

EAS服务采用滚动更新的策略,实例会先进入Terminating状态,服务会先将流量从要退出的实例上切走,实例等待30秒后将已收到的请求处理完成后退出。如果请求处理时间很长,为保证服务更新时,状态为in progress的请求都能被处理完,您可以将该参数值适当调大。

重要

如果将该参数值调小则会影响服务稳定性,将该参数配置过大则会导致服务更新速度过慢,如果无特别需求请不要配置该参数。

scheduling.spread.policy

服务实例调度时的打散策略,支持以下几种策略:

  • host:按照节点来打散,实例尽可能分散在不同的节点上。

  • zone:按照节点所在的可用区来打散,实例尽可能分散在不同的可用区。

  • default:按照默认策略进行调度,无主动打散的逻辑。

rpc.enable_sigterm

取值如下:

  • false(默认值):实例进入退出状态时不会发送SIGTERM信号。

  • true:在服务实例进入退出状态时,系统会立即向主进程发送SIGTERM信号,服务内进程收到该信号后需要在信号处理函数中进行自定义的优雅退出操作,若不处理该信号可能导致主进程收到信号后直接退出,从而使优雅退出失败。

resource_rebalancing

取值如下:

  • false(默认值):不启用该功能。

  • true:EAS会周期性地在高优先级资源上创建探针实例。如果探针实例调度成功,则会以指数增长方式创建更多探针实例,直至调度失败。同时,成功调度的探针实例完成初始化并且进入就绪状态后,会替换低优先级资源上的实例。

该功能可以解决以下问题:

  • 在服务滚动更新过程中,正在终止的实例仍会占用资源,导致新创建实例启动在公共资源组上,由于公共资源限制,后续新实例会重新调度回专属资源组上。

  • 当同时使用竞价实例和常规实例时,系统会定期检查竞价实例是否可用,如果可用,则会将常规实例迁移至竞价实例上。

2.features参数说明

参数

是否必选

描述

eas.aliyun.com/extra-ephemeral-storage

当免费额度的系统盘容量不能满足您的业务需求时,额外需要配置的系统盘内存大小。取值为正整数,单位为GB,取值范围为0~2000 GB。

3.networking参数说明

参数

是否必选

描述

disable_internet_endpoint

默认为false,将该参数设置为true后,会禁用服务的公网调用方式。

4.containers参数说明

参数

是否必选

描述

image

用于部署模型服务的镜像地址。

env

name

镜像执行时的环境变量名称。

value

镜像执行时的环境变量取值。

command

二者必选其一

镜像的入口命令,只支持单一命令形式,不支持复杂脚本,如:cd xxx && python app.py,这种形式请使用下面的script参数来指定,command字段适应于镜像中无/bin/sh命令的场景。

script

镜像的入口执行的脚本,可指定较为复杂的脚本形式,多行以\n或分号分隔。

port

容器端口。

重要
  • 由于EAS引擎监听固定的8080/9090端口,因此容器端口需要避开8080/9090端口。

  • 该端口一定要和command中的xxx.py文件配置的端口保持一致。

prepare

pythonRequirements

实例启动前安装的python requirements列表,要求镜像中在系统路径中存在pythonpip命令,list格式,如:

"prepare": {
  "pythonRequirements": [
    "numpy==1.16.4",
    "absl-py==0.11.0"
  ]
}

pythonRequirementsPath

实例启动前安装的python requirements.txt文件地址,要求镜像中在系统路径中存在Pythonpip命令,requirements.txt可直接打在镜像中,也可以由外部存储挂载的方式挂载到服务实例中,如:

"prepare": {
  "pythonRequirementsPath": "/data_oss/requirements.txt"
}

使用示例

上述参数在JSON文件中的配置示例如下:

{
  "name": "test_eascmd",
  "token": "****M5Mjk0NDZhM2EwYzUzOGE0OGMx****",
  "processor": "tensorflow_cpu_1.12",
  "model_path": "oss://examplebucket/exampledir/",
  "oss_endpoint": "oss-cn-beijing.aliyuncs.com",
  "model_entry": "",
  "model_config": "",
  "processor": "",
  "processor_path": "",
  "processor_entry": "",
  "processor_mainclass": "",
  "processor_type": "",
  "warm_up_data_path": "",
  "runtime": {
    "enable_crash_block": false
  },
  "cloud": {
    "computing": {
      "instance_type": "ecs.gn6i-c24g1.6xlarge"
    }
  },
  "autoscaler": {
    "min": 2,
    "max": 5,
    "strategies": {
      "qps": 10
    }
  },
  "storage": [
    {
      "mount_path": "/data_oss",
      "oss": {
        "endpoint": "oss-cn-shanghai-internal.aliyuncs.com",
        "path": "oss://bucket/path/"
      }
    }
  ],
  "metadata": {
    "resource": "eas-r-9lkbl2jvdm0puv****",
    "instance": 1,
    "workspace_id": 1405**,
    "gpu": 0,
    "cpu": 1,
    "memory": 2000,
    "gpu_memory": 10,
    "gpu_core_percentage": 10,
    "qos": "",
    "cuda": "11.2",
    "enable_grpc": false,
    "enable_webservice": false,
    "rpc": {
      "batching": false,
      "keepalive": 5000,
      "io_threads": 4,
      "max_batch_size": 16,
      "max_batch_timeout": 50,
      "max_queue_size": 64,
      "worker_threads": 5,
      "rate_limit": 0,
      "enable_sigterm": false
    },
    "rolling_strategy": {
      "max_surge": 1,
      "max_unavailable": 1
    },
    "eas.termination_grace_period": 30,
    "scheduling": {
      "spread": {
        "policy": "host"
      }
    },
    "resource_rebalancing": false
  },
  "features": {
    "eas.aliyun.com/extra-ephemeral-storage": "100Gi"
  },
  "networking": {
    "disable_internet_endpoint": false
  },
  "containers": [
    {
      "image": "registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz",
      "prepare": {
        "pythonRequirements": [
          "numpy==1.16.4",
          "absl-py==0.11.0"
        ]
      },
      "command": "python app.py",
      "port": 8000
    }
  ]
}