在使用异步推理服务时,可能会遇到资源利用不充分和缩容过程中请求中断等问题。为了解决这些问题,EAS推出了弹性Job服务,该服务对订阅逻辑进行了优化。本文将指导您如何在写真相机方案中使用弹性Job服务实现推理功能。
前提条件
已创建专有网络,并配置公网连接。
已创建专有网络VPC、交换机和安全组。具体操作,请参见搭建IPv4专有网络和创建安全组。
已为该VPC创建了公网NAT网关,并为该网关绑定了弹性公网IP、配置了SNAT条目。具体操作,请参见使用公网NAT网关SNAT功能访问互联网。
已准备好5-20张训练图片和1张模板图片,用于模型训练和写真制作。图片格式支持
.jpg
、.jpeg
、.png
等。如果进行单人写真制作,模板图片中包含单张人脸即可。
多张训练图片中的人脸属于同一个人。
如果进行多人写真制作,模板图片中需包含多张人脸,且人脸数量与模型训练的model_id数量一致。
请确保图片的尺寸大于512×512像素。
已创建OSS Bucket,详情请参见创建存储空间。
使用限制
仅支持在华北2(北京)和新加坡地域使用该方案。
部署推理场景弹性Job服务
进入PAI-EAS模型在线服务页面。
登录PAI控制台。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
在工作空间页面的左侧导航栏选择 ,进入PAI-EAS 模型在线服务页面。
部署核验服务。
在PAI-EAS 模型在线服务页面,单击部署服务,在弹出对话框中,选择自定义部署,然后单击确定。
在部署服务页面,配置以下关键参数,其他参数取默认配置即可,更多参数配置说明,请参见控制台上传部署。
在模型服务信息区域中,配置以下参数:
参数
描述
服务名称
参考界面提示,自定义服务名称。例如:photog_check。
部署方式
选择镜像部署服务,并打开异步服务开关。
镜像选择
选中镜像地址,并在文本框中输入镜像地址,取值如下:
华北2(北京)的镜像地址为:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub
。新加坡的镜像地址为:
registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub
。
代码配置
单击填写代码配置,选择OSS挂载,并配置以下参数:
选择您自己的OSS Bucket路径。例如
oss://examplebucket/
。挂载路径:配置为
/photog_oss
。
运行命令
运行命令配置为
python app.py
。端口号配置为7860。
在资源部署信息区域中,配置以下参数:
参数
描述
资源组种类
选择公共资源组。
资源配置方法
选择常规资源配置。
资源配置选择
选择GPU下的gu30系列机型,推荐使用ml.gu7i.c32m188.1-gu30。
系统盘配置
将额外系统盘配置为120 GB。
在异步服务配置区域中,配置以下参数:
参数
描述
异步队列资源配置
选择公共资源组。
异步队列占用资源
最小实例数:1。
CPU:8核。
内存:64 GB。
单一输入请求最大数据
配置为20480 KB。避免队列中每个请求的存储空间不足。
单一输出返回最大数据
在专有网络配置区域中,选择已创建的VPC、交换机和安全组。
在对应配置编辑区域中,添加以下配置,您可以参考下方的完整配置示例,来添加新增的参数。
字段
新增的参数
metadata
增加以下参数:
"rpc": { "keepalive": 3600000, "worker_threads": 1 }
keepalive:单个请求的最长处理时间,单位为毫秒,配置为3600000。
worker_threads:EAS每个实例中用于并发处理请求的线程数。
默认为5,表示最先进入队列的前五个任务会被分配到同一个实例上。建议将该参数设置为1,这样可以确保请求按顺序排队处理。
queue
增加参数
"max_delivery": 1
,防止失败后多次重复投递。完整的配置示例如下:
{ "metadata": { "name": "photog_check", "instance": 1, "rpc": { "keepalive": 3600000, "worker_threads": 1 }, "type": "Async" }, "cloud": { "computing": { "instance_type": "ml.gu7i.c32m188.1-gu30", "instances": null }, "networking": { "vswitch_id": "vsw-2ze4o9kww55051tf2****", "security_group_id": "sg-2ze0kgiee55d0fn4****", "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****" } }, "features": { "eas.aliyun.com/extra-ephemeral-storage": "100Gi" }, "queue": { "cpu": 8, "max_delivery": 1, "min_replica": 1, "memory": 64000, "resource": "", "source": { "max_payload_size_kb": 20480 }, "sink": { "max_payload_size_kb": 20480 } }, "storage": [ { "oss": { "path": "oss://examplebucket/", "readOnly": false }, "properties": { "resource_type": "code" }, "mount_path": "/photog_oss" } ], "containers": [ { "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub", "script": "python app.py", "port": 7860 } ] }
单击部署。
部署训练服务。
在PAI-EAS 模型在线服务页面,单击部署服务,在弹出对话框中,选择自定义部署,然后单击确定。
在部署服务页面,配置以下关键参数,其他参数取默认配置即可,更多参数配置说明,请参见控制台上传部署。
在模型服务信息区域中,配置以下参数:
参数
描述
服务名称
参考界面提示,自定义服务名称。例如:photog_train_pmml。
部署方式
选择镜像部署服务,并打开异步服务开关。
镜像选择
选中镜像地址,并在文本框中输入镜像地址,取值如下:
华北2(北京)的镜像地址为:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub
。新加坡的镜像地址为:
registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub
。
代码配置
单击填写代码配置,选择OSS挂载,并配置以下参数:
选择您自己的OSS Bucket路径,与核验服务选择的OSS路径保持一致。例如
oss://examplebucket/
。挂载路径:配置为
/photog_oss
。
运行命令
运行命令配置为
python app.py
。端口号配置为7860。
在资源部署信息区域中,配置以下参数:
参数
描述
资源组种类
选择公共资源组。
资源配置方法
选择常规资源配置。
资源配置选择
选择GPU下的gu30系列机型,推荐使用ml.gu7i.c32m188.1-gu30。
系统盘配置
将额外系统盘配置为120 GB。
在异步服务配置区域中,配置以下参数:
参数
描述
异步队列资源配置
选择公共资源组。
异步队列占用资源
最小实例数:1。
CPU:8核。
内存:64 GB。
单一输入请求最大数据
配置为20480 KB。避免队列中每个请求的存储空间不足。
单一输出返回最大数据
在专有网络配置区域中,选择已创建的VPC、交换机和安全组。
在对应配置编辑区域中,添加以下配置,您可以参考下方的完整配置示例,来添加新增的参数。
字段
新增的参数
autoscaler
(可选)水平自动扩缩容配置,详情请参见水平自动扩缩容功能。
"behavior": { "scaleDown": { "stabilizationWindowSeconds": 60 } }, "max": 5, "min": 1, "strategies": { "queue[backlog]": 1 }
metadata
增加以下参数:
"rpc": { "keepalive": 3600000, "worker_threads": 1 }
keepalive:单个请求的最长处理时间,单位为毫秒,配置为3600000。
worker_threads:EAS每个实例中用于并发处理请求的线程数。
默认为5,表示最先进入队列的前五个任务会被分配到同一个实例上。建议将该参数设置为1,这样可以确保请求按顺序排队处理。
queue
增加参数
"max_delivery": 1
,防止失败后多次重复投递。完整的配置示例如下:
{ "autoscaler": { "behavior": { "scaleDown": { "stabilizationWindowSeconds": 60 } }, "max": 5, "min": 1, "strategies": { "queue[backlog]": 1 } }, "metadata": { "name": "photog_train_pmml", "instance": 1, "rpc": { "keepalive": 3600000, "worker_threads": 1 }, "type": "Async" }, "cloud": { "computing": { "instance_type": "ml.gu7i.c32m188.1-gu30", "instances": null }, "networking": { "vswitch_id": "vsw-2ze4o9kww55051tf2****", "security_group_id": "sg-2ze0kgiee55d0fn4****", "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****" } }, "features": { "eas.aliyun.com/extra-ephemeral-storage": "120Gi" }, "queue": { "cpu": 8, "max_delivery": 1, "min_replica": 1, "memory": 64000, "resource": "", "source": { "max_payload_size_kb": 20480 }, "sink": { "max_payload_size_kb": 20480 } }, "storage": [ { "oss": { "path": "oss://examplebucket/", "readOnly": false }, "properties": { "resource_type": "code" }, "mount_path": "/photog_oss" } ], "containers": [ { "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub", "script": "python app.py", "port": 7860 } ] }
单击部署。
部署预测服务。
本方案将预测服务部署为弹性Job服务,具体操作步骤如下:
在PAI-EAS 模型在线服务页面,单击部署服务,在弹出对话框中,选择自定义部署,然后单击确定。
在对应配置编辑区域,单击JSON独立部署,并在编辑框中填入配置信息。
{ "metadata": { "name": "photog_pre_pmml", "instance": 1, "rpc": { "keepalive": 3600000, "worker_threads": 1 }, "type": "ScalableJob" }, "cloud": { "computing": { "instance_type": "ecs.gn6v-c8g1.2xlarge", "instances": null }, "networking": { "vswitch_id": "vsw-2ze4o9kww55051tf2****", "security_group_id": "sg-2ze0kgiee55d0fn4****", "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****" } }, "features": { "eas.aliyun.com/extra-ephemeral-storage": "120Gi" }, "queue": { "cpu": 8, "max_delivery": 1, "min_replica": 1, "memory": 64000, "resource": "", "source": { "max_payload_size_kb": 20480 }, "sink": { "max_payload_size_kb": 20480 } }, "storage": [ { "oss": { "path": "oss://examplebucket/", "readOnly": false }, "properties": { "resource_type": "code" }, "mount_path": "/photog_oss" } ], "containers": [ { "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub", "env": [ { "name": "URL", "value": "http://127.0.0.1:8000" }, { "name": "AUTHORIZATION", "value": "=" } ], "script": "python app.py", "port": 7861 }, { "image": "eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2", "port": 8000, "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-install --api --filebrowser --sd-dynamic-cache --data-dir /photog_oss/photog/webui/" } ] }
其中关键参数说明如下,其他参数配置详情,请参见服务模型所有相关参数说明。
参数
描述
metadata
name
自定义服务名称,在同地域内唯一。
type
配置为ScalableJob,异步推理服务会以弹性Job的形式进行部署。
containers
image
需要同时配置AI写真预测服务和WebUI预测服务镜像地址。支持配置的镜像列表如下,本方案选择华北2(北京)地域的镜像地址。
华北2(北京)镜像地址:
AI写真预测服务:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub
。WebUI预测服务:
eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2
。
新加坡镜像地址:
AI写真预测服务:
registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub
。WebUI预测服务:
eas-registry-vpc.ap-southeast-1.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2
。
storage
path
本方案以OSS挂载为例,配置为您自己的OSS Bucket路径,与核验服务选择的OSS路径保持一致,例如
oss://examplebucket/
。您需要下载并解压WebUI所需的模型文件,并将其按照下图布局方式存放到您的OSS Bucket路径
oss://examplebucket/photog_oss/webui
中。关于如何将文件上传到OSS Bucket路径,详情请参见ossutil概述。关于如何将文件上传到NAS路径,详情请参见快速入门(Linux)和文件管理。mount_path
配置为
/photog_oss
。
单击部署。
弹性Job服务部署成功后,会自动创建队列服务,同时默认启动Autoscaler(水平自动扩缩容)功能。
调用服务
服务部署成功后,您可以通过调用服务实现AI写真。具体操作,请参见调用接口。
调用服务时,您需要参考服务调用指定taskType为query,来标识发送的是推理请求,以调用图像核验接口为例,示例代码如下:
import json
from eas_prediction import QueueClient
# 创建输入队列对象,用于写入输入数据。
input_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_check')
input_queue.set_token('<token>')
input_queue.init()
datas = json.dumps(
{
'request_id' : 12345,
'images' : ["xx.jpg", "xx.jpg"], # urls, a list
'configure' : {
'face_reconize' : True, # Judge whether all pictures are of a person
}
}
)
# 指定taskType为query。
tags = {"taskType": "query"}
index, request_id = input_queue.put(f'{datas}', tags)
print(index, request_id)
# 查看输入队列的详情。
attrs = input_queue.attributes()
print(attrs)
相关文档
使用异步推理服务实现AI写真的具体操作,请参见写真相机方案。
如何在训练场景使用弹性Job服务,请参见部署弹性伸缩的Kohya训练服务。
关于弹性Job服务更详细的内容介绍,请参见弹性Job服务功能介绍。