すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:スケーラブルなジョブとしてオンラインポートレートサービスを展開する

最終更新日:Jul 22, 2024

非同期推論シナリオでは、不十分なリソース使用率やスケールアウト中の要求の中断などの問題が発生する可能性があります。 この問題を解決するために、Platform for AI (PAI) のElastic Algorithm Service (EAS) は、最適化されたサービスサブスクリプションメカニズムを備えたスケーラブルなジョブサービスを提供します。 このトピックでは、オンラインポートレートサービスをスケーラブルなジョブとしてデプロイして推論を実行する方法について説明します。

前提条件

  • Object Storage Service (OSS) バケットが作成されます。 詳細については、「バケットの作成」をご参照ください。

モデル推論用のスケーラブルなジョブのデプロイ

  1. EAS-Online Model Servicesページに移動します。

    1. PAIコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。

    3. 左側のナビゲーションウィンドウで、[モデル展開] > [Elastic Algorithm Service (EAS)] を選択します。 Elastic Algorithm Service (EAS) ページが表示されます。

  2. 検証サービスをデプロイします。

    1. [Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 表示されるダイアログボックスで、[カスタムデプロイ] を選択し、[OK] をクリックします。

    2. [サービスのデプロイ] ページで、パラメーターを設定します。 次の表に、主要なパラメーターを示します。 他のパラメーターについてはデフォルト値を使用します。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。

      • [モデルサービス情報] セクションで、次のパラメーターを設定します。

        項目

        説明

        サービス名

        画面の指示に従ってサービス名を指定します。 例: photog_check。

        デプロイ方法

        [イメージを使用したサービスのデプロイ] を選択し、[非同期推論サービス] をオンにします。

        画像の選択

        [イメージアドレス] を選択し、イメージアドレスを指定します。 有効な値:

        • 中国 (北京) リージョンの画像アドレス: 1.0.0.pub

        • シンガポール地域の画像アドレス: 1.0.0.pub

        コード設定

        [コード設定の指定] をクリックします。 [OSSパスのマウント] を選択し、次のパラメーターを設定します。

        • 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設定] セクションで、作成した仮想プライベートクラウド (VPC) 、vSwitch、およびセキュリティグループを選択します。

      • [構成エディター] セクションで、次のオプションを追加します。 詳細については、完全な設定例をご参照ください。

        項目

        追加オプション

        メタデータ

        次のオプションを追加します。

        "rpc": {
                    "keepalive": 3600000,
                    "worker_threads": 1
                }
        • keepalive: 1つのリクエストの最大処理時間。 単位:ミリ秒。 値を3600000に設定します。

        • worker_threads: 各EASインスタンスでリクエストを同時に処理するために使用されるスレッドの数。

          デフォルト値は5で、キューにある最初の5つのタスクが同じインスタンスに割り当てられることを指定します。 リクエストを順番にキューに入れて処理するために、このオプションを1に設定することを推奨します。

        キュー

        失敗後の繰り返し配信を防ぐには、"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
                }
            ]
        }
    3. [デプロイ] をクリックします。

  3. トレーニングサービスを展開します。

    1. [Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 表示されるダイアログボックスで、[カスタムデプロイ] を選択し、[OK] をクリックします。

    2. [サービスのデプロイ] ページで、パラメーターを設定します。 次の表に、主要なパラメーターを示します。 他のパラメーターについてはデフォルト値を使用します。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。

      • [モデルサービス情報] セクションで、次のパラメーターを設定します。

        パラメーター

        説明

        サービス名

        画面の指示に従ってサービス名を指定します。 この例では、photog_train_pmmlが使用されます。

        デプロイ方法

        [イメージを使用したサービスのデプロイ] を選択し、[非同期推論サービス] をオンにします。

        画像の選択

        [イメージアドレス] を選択し、イメージアドレスを指定します。 有効な値:

        • 中国 (北京) リージョンの画像アドレス: 1.0.0.pub

        • シンガポール地域の画像アドレス: 1.0.0.pub

        コード設定

        [コード設定の指定] をクリックします。 [OSSパスのマウント] を選択し、次のパラメーターを設定します。

        • 検証サービスに指定した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設定] セクションで、作成した仮想プライベートクラウド (VPC) 、vSwitch、およびセキュリティグループを選択します。

      • [構成エディター] セクションで、次のオプションを追加します。 詳細については、完全な設定例をご参照ください。

        項目

        追加オプション

        autoscaler

        オプションです。 サービスの自動スケーリングの設定。 詳細については、「自動スケーリング」をご参照ください。

        "behavior": {
          "scaleDown": {
            "stabilizationWindowSeconds": 60
          }
        },
        "max": 5,
        "min": 1,
        "strategies": {
                    "queue[backlog]": 1
        }

        metadata

        次のオプションを追加します。

        "rpc": {
                    "keepalive": 3600000,
                    "worker_threads": 1
                }
        • keepalive: 1つのリクエストの最大処理時間。 単位:ミリ秒。 値を3600000に設定します。

        • worker_threads: 各EASインスタンスで要求を同時に処理するために使用されるスレッドの数。

          デフォルト値は5で、キューにある最初の5つのタスクが同じインスタンスに割り当てられることを指定します。 リクエストを順番にキューに入れて処理するために、このオプションを1に設定することを推奨します。

        キュー

        失敗後の繰り返し配信を防ぐには、"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
                }
            ]
        }
    3. [デプロイ] をクリックします。

  4. 予測サービスをデプロイします。

    この例では、予測サービスがスケーラブルなジョブとしてデプロイされています。 以下の手順を実行します。

    1. [Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 表示されるダイアログボックスで、[カスタムデプロイ] を選択し、[OK] をクリックします。

    2. [設定エディター] セクションで、[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/"
              }
          ]
      }

      次の表に、主要なパラメーターを示します。 他のパラメーターを設定する方法の詳細については、「サービスモデルに関連するパラメーター」をご参照ください。

      パラメーター

      説明

      メタデータ

      name

      サービス名。リージョン内で一意です。

      タイプ

      非同期推論サービスをスケーラブルなジョブとして展開するには、値をScalableJobに設定します。

      コンテナー

      イメージ

      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

      ストレージ

      パス

      この例では、OSSマウントが使用されています。 検証サービスに指定したOSSバケットのパスに値を設定します。 例: oss:// examplebucket/

      WebUIモデルファイルファイルをダウンロードして解凍します。 ファイルをOSSバケットに保存します。 この例では、oss:// examplebucket/photog_oss/webuiパスが使用されています。 オブジェクトをOSSバケットにアップロードする方法については、「ossutilの概要」をご参照ください。 Apsara File Storage NASファイルシステムにファイルをアップロードする方法については、「Linux ECSインスタンスにファイルシステムをマウントする」および「Workbenchを使用したLinuxインスタンスのファイルの管理」をご参照ください。

      mount_path

      値を /photog_ossに設定します。

  5. [デプロイ] をクリックします。

    スケーラブルなジョブをデプロイすると、システムは自動的にキューサービスを作成し、サービスの自動スケーリング機能を有効にします。

コールサービス

サービスをデプロイした後、サービスを呼び出してAIポートレートを実装できます。

サービスを呼び出すときは、taskTypeパラメーターをクエリに設定して、リクエストが推論リクエストであることを指定する必要があります。 詳細については、「概要」トピックの「サービスの呼び出し」セクションを参照してください。 サンプルコード:

import json
from eas_prediction import QueueClient

# Create input queue objects to receive input data. 
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
        }
    }
)
# Set the taskType parameter to query. 
tags = {"taskType": "query"}
index, request_id = input_queue.put(f'{datas}', tags)
print(index, request_id)

# View details about the input queues. 
attrs = input_queue.attributes()
print(attrs)

関連ドキュメント