このトピックでは、オンラインポートレートサービスをスケーラブルジョブとしてデプロイして推論を実行する方法について説明し、リソースの利用率の低下やスケールイン中のリクエストの中断などの問題に対処します。
前提条件
VPC が作成され、VPC のインターネットアクセスが有効になっていること。
VPC、vSwitch、およびセキュリティグループが作成されていること。詳細については、「IPv4 CIDR ブロックを持つ VPC を作成する」および「セキュリティグループを作成する」をご参照ください。
インターネット NAT ゲートウェイが VPC に作成されていること。EIP (Elastic IP Address) がゲートウェイに関連付けられ、SNAT エントリがゲートウェイで構成されていること。詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。
モデルのトレーニングとポートレートの作成のために、5〜20 枚のトレーニング画像と 1 枚のテンプレート画像が準備されていること。サポートされている画像フォーマットは、
.jpg、.jpeg、.pngです。各画像のサイズが 512 x 512 ピクセルより大きいことを確認してください。1 人のポートレート: テンプレート画像には人物の顔が含まれている必要があります。複数のトレーニング画像内の顔は、同じ人物のものである必要があります。
複数人のポートレート: テンプレート画像には複数の顔が含まれている必要があり、顔の数はモデルのトレーニングで指定された model_id パラメーターの値と同じである必要があります。
Object Storage Service (OSS) バケットが作成されていること。詳細については、「バケットの作成」をご参照ください。
制限事項
AI ポートレートソリューションは、中国 (北京) およびシンガポールリージョンでのみサポートされています。
モデル推論用のスケーラブルジョブをデプロイする
検証サービスのデプロイ
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
[Deploy Service] をクリックします。[Custom Model Deployment] セクションで、[Custom Deployment] をクリックします。
[Custom Deployment] ページで、パラメーターを構成します。次の表に、主要なパラメーターを示します。その他のパラメーターにはデフォルト設定を使用します。詳細については、「カスタムデプロイメント」をご参照ください。
[基本情報] セクションで、 サービス名 (例: photog_check) を入力します。
[環境情報] セクションで、次の表のパラメーターを構成します。
パラメーター
説明
デプロイメント方法
[イメージベースのデプロイメント] を選択し、[非同期キュー] を有効にします。
イメージ構成
[イメージアドレス] を選択し、イメージアドレスを指定します。有効な値:
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] をクリックし、次のパラメーターを構成します:
[Uri]: OSS バケットのパスを選択します。例:
oss://examplebucket/。[マウントパス]:
/photog_ossを入力します。
コマンド
python app.pyを入力します。ポート番号
7860 を入力します。
[リソース情報] セクションで、次の表のパラメーターを構成します。
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイメントリソース
[GPU] タブで -gu30 インスタンスタイプを選択します。[ml.gu7i.c32m188.1-gu30] インスタンスタイプを使用することをお勧めします。
追加のシステムディスク
値を 120 に設定します。単位: GiB。
[非同期キュー] セクションで、次の表のパラメーターを構成します。
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
Deployment
最小インスタンス数: 1
vCPU: 8 コア
メモリ (GB): 64 GB
単一入力リクエストの最大データ
キュー内の各リクエストに十分なストレージ容量を確保するために、値を 20480 KB に設定します。
単一出力の最大データ
[サービスアクセス] セクションで、作成した VPC、vSwitch、および セキュリティグループ を選択します。
[サービス構成] セクションで、次のオプションを追加します。詳細については、完全な構成例をご参照ください。
フィールド
新しいオプション
metadata
次のオプションを追加します:
"rpc": { "keepalive": 3600000, "worker_threads": 1 }keepalive: 単一リクエストの最大処理時間。単位: ミリ秒。値を 3600000 に設定します。
worker_threads: 各 Elastic Algorithm Service (EAS) インスタンスでリクエストを同時に処理するために使用されるスレッドの数。
デフォルト値は 5 で、キュー内の最初の 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 } ] }[Deploy] をクリックします。
トレーニングサービスのデプロイ
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
[Deploy Service] をクリックします。[Custom Model Deployment] セクションで、[Custom Deployment] をクリックします。
[Custom Deployment] ページで、パラメーターを構成します。次の表に、主要なパラメーターを示します。その他のパラメーターにはデフォルト設定を使用します。詳細については、「カスタムデプロイメント」をご参照ください。
[基本情報] セクションで、[サービス名] (例: photog_check) を入力します。
[環境情報] セクションで、次の表のパラメーターを構成します。
パラメーター
説明
デプロイメント方法
[イメージベースのデプロイメント] を選択し、[非同期キュー] を有効にします。
イメージ構成
[イメージアドレス] を選択し、イメージアドレスを指定します。有効な値:
中国 (北京) リージョンのイメージアドレス:
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] をクリックし、次のパラメーターを構成します:
[Uri]: 検証サービスに指定した OSS バケットのパスを選択します。例:
oss://examplebucket/。[マウントパス]: この例では、
/photog_ossが使用されます。
コマンド
python app.pyを入力します。ポート番号
7860 を入力します。
[リソース情報] セクションで、次の表のパラメーターを構成します。
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイメントリソース
[GPU] タブで -gu30 インスタンスタイプを選択します。[ml.gu7i.c32m188.1-gu30] インスタンスタイプを使用することをお勧めします。
追加のシステムディスク
値を 120 に設定します。単位: GiB。
[非同期キュー] セクションで、次の表のパラメーターを構成します。
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
Deployment
最小インスタンス数: 1
vCPU: 8 コア
メモリ (GB): 64 GB
単一入力リクエストの最大データ
キュー内の各リクエストに十分なストレージ容量を確保するために、値を 20480 KB に設定します。
単一出力の最大データ
[サービスアクセス] セクションで、作成した VPC、vSwitch、および セキュリティグループ を選択します。
[サービス構成] セクションで、次のオプションを追加します。詳細については、完全な構成例をご参照ください。
フィールド
追加されたオプション
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 で、キュー内の最初の 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 } ] }
[デプロイ] をクリックします。
予測サービスのデプロイ
この例では、予測サービスはスケーラブルジョブとしてデプロイされます。次の手順を実行します:
[Deploy Service] をクリックします。[Custom Model Deployment] セクションで、[JSON Deployment] をクリックします。
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 に設定します。
containers
image
AI ポートレート予測サービスと Web UI 予測サービスのイメージアドレスを指定する必要があります。この例では、中国 (北京) リージョンのイメージアドレスが使用されます。有効な値:
中国 (北京) リージョンのイメージアドレス:
AI ポートレート予測サービス:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer. 1.0.0.pub。Web UI 予測サービス:
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。Web UI 予測サービス:
eas-registry-vpc.ap-southeast-1.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2。
storage
path
この例では、OSS マウントが使用されます。検証サービスに指定した OSS バケットのパスに値を設定します。例:
oss://examplebucket/。WebUI モデルファイルをダウンロードして解凍します。ファイルを OSS バケットに保存します。この例では、
oss://examplebucket/photog_oss/webuiパスが使用されます。OSS バケットにオブジェクトをアップロードする方法については、「ossutil の概要」をご参照ください。File Storage NAS ファイルシステムにファイルをアップロードする方法については、「Linux ECS インスタンスにファイルシステムをマウントする」および「ファイルの管理」をご参照ください。mount_path
値を
/photog_ossに設定します。[Deploy] をクリックします。
スケーラブルジョブをデプロイすると、システムは自動的にキューサービスを作成し、サービスの自動スケーリング機能を有効にします。
サービスの呼び出し
サービスをデプロイした後、サービスを呼び出して 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"], # URL、リスト
'configure' : {
'face_reconize' : True, # すべての画像が同一人物のものであるかどうかを判断します
}
}
)
# taskType パラメーターを query に設定します。
tags = {"taskType": "query"}
index, request_id = input_queue.put(f'{datas}', tags)
print(index, request_id)
# 入力キューの詳細を表示します。
attrs = input_queue.attributes()
print(attrs)参考資料
トレーニングシナリオでスケーラブルジョブをデプロイする方法については、「Kohya ベースのトレーニングをスケーラブルジョブとしてデプロイする」をご参照ください。
Scalable Job サービスの詳細については、「概要」をご参照ください。