在使用異步推理服務時,可能會遇到資源利用不充分和縮容過程中請求中斷等問題。為了解決這些問題,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。
部署核驗服務。
單擊部署服務,然后在自定義模型部署區域,單擊自定義部署。
在自定義部署頁面,配置以下關鍵參數,其他參數取默認配置即可,更多參數配置說明,請參見控制臺上傳部署。
在基本信息區域,配置服務名稱。例如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:選擇您自己的OSS Bucket路徑。例如
oss://examplebucket/
。掛載路徑:配置為
/photog_oss
。
運行命令
配置為
python app.py
。端口號
配置為7860。
在資源部署區域中,配置以下參數:
參數
描述
資源類型
選擇公共資源。
部署資源
資源規格選擇GPU類型的GU30系列機型,推薦使用ml.gu7i.c32m188.1-gu30。
額外系統盤
配置為120 GB。
在異步服務區域中,配置以下參數:
參數
描述
資源類型
選擇公共資源。
部署資源
最小實例數:1。
CPU(核數):8核。
內存(GB):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 } ] }
單擊部署。
部署訓練服務。
單擊部署服務,然后在自定義模型部署區域,單擊自定義部署。
在自定義部署頁面,配置以下關鍵參數,其他參數取默認配置即可,更多參數配置說明,請參見控制臺上傳部署。
在基本信息區域,配置服務名稱。例如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:選擇您自己的OSS Bucket路徑,與核驗服務選擇的OSS路徑保持一致。例如
oss://examplebucket/
。掛載路徑:配置為
/photog_oss
。
運行命令
配置為
python app.py
。端口號
配置為7860。
在資源部署區域中,配置以下參數:
參數
描述
資源類型
選擇公共資源。
部署資源
資源規格選擇GPU類型的GU30系列機型,推薦使用ml.gu7i.c32m188.1-gu30。
額外系統盤
配置為120 GB。
在異步服務區域中,配置以下參數:
參數
描述
資源類型
選擇公共資源。
部署資源
最小實例數:1。
CPU(核數):8核。
內存(GB):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服務,具體操作步驟如下:
單擊部署服務,然后在自定義模型部署區域,單擊JSON獨立部署。
在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 1.0。關于如何將文件上傳到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服務功能介紹。