在EAS中,可通过JSON格式的配置文件来定义和部署在线服务。
快速入门
1. 准备JSON配置文件
部署服务的核心是创建一个包含所有必需配置的JSON文件。对于初次使用者,建议通过自定义模型部署 > 自定义部署配置参数,系统会自动生成对应的JSON内容,可以在此基础上修改和扩展。
示例文件service.json如下,更多参数说明请参见附录:JSON参数说明。
{
"metadata": {
"name": "demo",
"instance": 1,
"workspace_id": "your-workspace-id"
},
"cloud": {
"computing": {
"instances": [
{
"type": "ecs.c7a.large"
}
]
}
},
"containers": [
{
"image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/python-inference:py39-ubuntu2004",
"script": "python app.py",
"port": 8000
}
]
}
2. 使用JSON文件部署服务
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
-
在推理服务页签,单击部署服务。然后在自定义模型部署区域选择JSON独立部署。
-
输入准备好的JSON文件,单击部署。等待一段时间,当服务状态变为运行中时,表明服务部署成功。
附录:JSON参数说明
|
参数 |
是否必选 |
描述 |
|
metadata |
是 |
服务的Meta信息。详情请参见metadata参数说明。 |
|
cloud |
否 |
计算资源与专有网络配置,详情请参见cloud参数说明。 |
|
containers |
否 |
镜像配置,详情参见containers参数说明。 |
|
dockerAuth |
否 |
访问需要认证的私有镜像仓库时,需配置。值为镜像仓库的 |
|
networking |
否 |
服务的调用配置。详情请参见networking参数说明。 |
|
storage |
否 |
用于将 OSS 或 NAS 等数据挂载到容器内。详细配置说明,请参见存储挂载。 |
|
token |
否 |
服务的访问鉴权Token。若不指定,系统将自动生成。 |
|
aimaster |
否 |
为多机分布式推理服务开启算力检测与容错。 |
|
model_path |
是 |
使用processor部署时必选。model_path和processor_path分别为模型和Processor的输入数据源地址,均支持以下格式的地址:
|
|
oss_endpoint |
否 |
OSS的Endpoint,例如oss-cn-beijing.aliyuncs.com。其他取值请参见地域和Endpoint。 说明
默认无需指定该参数,会使用当前地域的内网OSS地址下载模型文件或Processor文件。当跨地域访问OSS时,需要指定该参数。例如:当您在杭州地域部署服务时,model_path中填写了北京地域的OSS地址,则需要使用该参数指定北京地域的OSS公网访问地址。 |
|
model_entry |
否 |
表示模型的入口文件,可以包含任意文件。如果未指定,则使用model_path中的文件名。主文件路径会传递给Processor中的initialize()函数。 |
|
model_config |
否 |
表示模型的配置,支持任意文本。该参数值会传递给Processor中initialize()函数的第二个参数。 |
|
processor |
否 |
|
|
processor_path |
否 |
Processor的文件包路径,可以参见model_path参数的描述信息。 |
|
processor_entry |
否 |
Processor的主文件。例如libprocessor.so或app.py,其中包含了预测所需的 当processor_type为cpp或python时,必须指定该参数。 |
|
processor_mainclass |
否 |
Processor的主文件,JAR包中的mainclass。例如com.aliyun.TestProcessor。 当processor_type为java时,必须指定该参数。 |
|
processor_type |
否 |
processor实现的语言,取值如下:
|
|
warm_up_data_path |
否 |
用于模型预热的请求文件路径。详情请参见模型服务预热。 |
|
runtime.enable_crash_block |
否 |
当服务实例因Processor代码异常发生Crash后,服务实例是否会自动重启。取值如下:
|
|
autoscaler |
否 |
模型服务自动水平扩缩容的配置。详情请参见水平自动扩缩容。 |
|
labels |
否 |
为EAS服务配置标签。格式为 |
|
unit.size |
否 |
表示分布式推理配置下单实例部署的机器数。默认值为2。 |
|
sinker |
否 |
将服务所有的请求和响应记录持久化保存到大数据MaxCompute或日志服务SLS中。详情请参见sinker参数说明。 |
|
confidential |
否 |
通过配置系统信任管理服务,保证服务部署和调用的过程中数据、模型和代码等信息可以安全加密,实现安全可验证的推理服务。格式如下: 说明
安全加密环境主要针对您挂载的存储文件,请先完成存储文件的挂载再打开该功能。
参数配置说明如下,更详细的内容介绍,请参见安全加密推理服务。
|
metadata参数说明
高级参数
cloud参数说明
|
参数 |
是否必选 |
描述 |
|
|
computing |
instances |
否 |
使用公共资源组部署服务时,需设置该参数,表示使用的资源规格列表。当实例规格竞价失败或库存不足时,按照配置顺序依次尝试使用下一个实例规格创建服务。
|
|
disable_spot_protection_period |
否 |
使用竞价实例时,需设置该参数,取值如下:
|
|
|
networking |
vpc_id |
否 |
专有网络VPC |
|
vswitch_id |
否 |
交换机 |
|
|
security_group_id |
否 |
安全组 |
|
|
destination_cidrs |
否 |
若所配置的交换机网段与 EAS 管控网段(10.224.0.0/16 或 10.240.0.0/12)存在冲突,请将此字段显式设置为您的交换机网段(即 VSwitch 的 CIDR)。
其中 |
|
示例如下:
{
"cloud": {
"computing": {
"instances": [
{
"type": "ecs.c8i.2xlarge",
"spot_price_limit": 1
},
{
"type": "ecs.c8i.xlarge",
"capacity": "20%"
}
],
"disable_spot_protection_period": false
},
"networking": {
"vpc_id": "vpc-bp1oll7xawovg9*****",
"vswitch_id": "vsw-bp1jjgkw51nsca1e****",
"security_group_id": "sg-bp1ej061cnyfn0b*****"
}
}
}
containers参数说明
使用自定义镜像部署服务时,详情请参见使用自定义镜像部署。
|
参数 |
是否必选 |
描述 |
|
|
image |
是 |
使用镜像部署时必填。用于部署模型服务的镜像地址。 |
|
|
env |
name |
否 |
镜像执行时的环境变量名称。 |
|
value |
否 |
镜像执行时的环境变量取值。 |
|
|
command |
二者必选其一 |
镜像的入口命令,只支持单一命令形式,不支持复杂脚本,如:cd xxx && python app.py,这种形式请使用下面的script参数指定,command字段适应于镜像中无/bin/sh命令的场景。 |
|
|
script |
镜像的入口执行的脚本,可指定较为复杂的脚本形式,多行以\n或分号分隔。 |
||
|
port |
否 |
容器端口。 重要
|
|
|
prepare |
pythonRequirements |
否 |
实例启动前安装的python requirements列表,要求镜像中在系统路径中存在python和pip命令,list格式,如:
|
|
pythonRequirementsPath |
否 |
实例启动前安装的python requirements.txt文件地址,要求镜像中在系统路径中存在Python和pip命令,requirements.txt可直接打在镜像中,也可以由外部存储挂载的方式挂载到服务实例中,如:
|
|
networking参数说明
|
参数 |
是否必选 |
描述 |
|
gateway |
否 |
为EAS服务配置的专属网关。 |
|
gateway_policy |
否 |
限流配置示例:
|
sinker参数说明
|
参数 |
是否必选 |
描述 |
|
|
type |
否 |
支持配置以下两种存储类型:
|
|
|
config |
maxcompute.project |
否 |
MaxCompute项目名称。 |
|
maxcompute.table |
否 |
MaxCompute数据表。 |
|
|
sls.project |
否 |
SLS项目名称。 |
|
|
sls.logstore |
否 |
SLS的Logstore。 |
|
配置示例如下:
存储到MaxCompute
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
}
存储到日志服务SLS
"sinker": {
"type": "sls",
"config": {
"sls": {
"project": "k8s-log-****",
"logstore": "d****"
}
}
}
附录:JSON配置示例
上述参数在JSON文件中的配置示例如下:
{
"token": "****M5Mjk0NDZhM2EwYzUzOGE0OGMx****",
"processor": "tensorflow_cpu_1.12",
"model_path": "oss://examplebucket/exampledir/",
"oss_endpoint": "oss-cn-beijing.aliyuncs.com",
"model_entry": "",
"model_config": "",
"processor_path": "",
"processor_entry": "",
"processor_mainclass": "",
"processor_type": "",
"warm_up_data_path": "",
"runtime": {
"enable_crash_block": false
},
"unit": {
"size": 2
},
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
},
"cloud": {
"computing": {
"instances": [
{
"capacity": 800,
"type": "dedicated_resource"
},
{
"capacity": 200,
"type": "ecs.c7.4xlarge",
"spot_price_limit": 3.6
}
],
"disable_spot_protection_period": true
},
"networking": {
"vpc_id": "vpc-bp1oll7xawovg9t8****",
"vswitch_id": "vsw-bp1jjgkw51nsca1e****",
"security_group_id": "sg-bp1ej061cnyfn0b****"
}
},
"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/"
}
}
],
"confidential": {
"trustee_endpoint": "xx",
"decryption_key": "xx"
},
"metadata": {
"name": "test_eascmd",
"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,
"rdma": 1,
"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,
"shm_size": 100
},
"features": {
"eas.aliyun.com/extra-ephemeral-storage": "100Gi",
"eas.aliyun.com/gpu-driver-version": "tesla=550.127.08"
},
"networking": {
"gateway": "gw-m2vkzbpixm7mo****"
},
"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
}
],
"dockerAuth": "dGVzdGNhbzoxM*******"
}