在使用非同步推理服務時,可能會遇到資源利用不充分和縮容過程中請求中斷等問題。為瞭解決這些問題,EAS推出了彈性Job服務,該服務對訂閱邏輯進行了最佳化。本文將指導您如何在寫真相機方案中使用彈性Job服務實現推理功能。
前提條件
已建立專用網路,並配置公網串連。
已建立Virtual Private Cloud、交換器和安全性群組。具體操作,請參見搭建IPv4專用網路和建立安全性群組。
已為該VPC建立了公網NAT Gateway,並為該網關綁定了Elastic IP Address、配置了SNAT條目。具體操作,請參見使用公網NAT GatewaySNAT功能訪問互連網。
已準備好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)
相關文檔
如何在訓練情境使用彈性Job服務,請參見部署Auto Scaling的Kohya訓練服務。
關於彈性Job服務更詳細的內容介紹,請參見彈性Job服務功能介紹。