マルチモデルエンドポイント用の SageMaker独自のコンテナを構築する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

マルチモデルエンドポイント用の SageMaker独自のコンテナを構築する

独自のコンテナと依存関係をマルチモデルエンドポイントに導入する方法については、以下のセクションを参照してください。

CPU バックアップされたインスタンスでマルチモデルエンドポイントに独自の依存関係を持たせる

構築済みのコンテナイメージのいずれもニーズに合わない場合は、CPUバックアップされたマルチモデルエンドポイントで使用する独自のコンテナを構築できます。

Amazon にデプロイされたカスタム Amazon Elastic Container Registry (Amazon ECR) イメージ SageMaker は、 ホスティングサービスでの独自の推論コードの使用が独自の推論コードを実行する Docker コンテナと SageMaker やり取りする方法を規定する、 で説明されている基本契約に準拠することが期待されます。コンテナが複数のモデルを同時にロードして提供できるようにするには、従う必要がある追加の APIsおよび 動作があります。この追加契約には、モデルAPIsをロード、一覧表示、取得、アンロードする新しい と、モデルAPIを呼び出す別の が含まれます。エラーシナリオには、 が従APIsう必要があるさまざまな動作もあります。コンテナが追加の要件に準拠していることを示すために、以下のコマンドを Docker ファイルに追加できます。

LABEL com.amazonaws.sagemaker.capabilities.multi-models=true

SageMaker また、 は環境変数をコンテナに挿入します。

SAGEMAKER_MULTI_MODEL=true

シリアル推論パイプラインのマルチモデルエンドポイントを作成する場合、Docker ファイルには、マルチモデルとシリアル推論パイプラインの両方の必須ラベルが必要です。シリアル情報パイプラインの詳細については、「推論パイプラインでリアルタイム予測を実行する」を参照してください。

カスタムコンテナにこれらの要件を実装するために、2 つのライブラリが利用できます。

  • マルチモデルサーバーは、新しいマルチモデルエンドポイントコンテナ の要件を満たすフロントエンドを提供するためにコンテナにインストールできる機械学習モデルを提供するためのオープンソースフレームワークですAPIs。マルチモデルエンドポイントが 1 つのコンテナ内で複数のモデルをホストし、モデルをコンテナに動的にロードおよびコンテナからアンロードし、指定されたロードされたモデルで推論を実行するために必要なHTTPフロントエンドおよびモデル管理機能を提供します。また、独自のアルゴリズムを実装できるプラガブルなカスタムバックエンドハンドラをサポートする、プラガブルなバックエンドも提供します。

  • SageMaker Inference Toolkit は、マルチモデルエンドポイントと互換性を持たせる設定と設定で SageMaker マルチモデルサーバーをブートストラップするライブラリです。また、シナリオのニーズに応じて、モデルごとのワーカー数などの重要なパフォーマンスパラメータを調整できます。

GPU バックアップされたインスタンスでマルチモデルエンドポイントに独自の依存関係を持たせる

GPU バックアップされたインスタンスを持つマルチモデルエンドポイントでの独自のコンテナの持ち込み (BYOC) SageMaker 機能は、現在、マルチモデルサーバーおよび推論ツールキットライブラリではサポートされていません。

GPU バックアップされたインスタンスでマルチモデルエンドポイントを作成するには、サポートされている NVIDIA Triton 推論サーバー NVIDIA Triton 推論コンテナ で使用できます SageMaker。独自の依存関係を持ち込むには、 SageMaker サポートされている NVIDIA Triton Inference Server を Docker ファイルのベースイメージとして使用して独自のコンテナを構築できます。

FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
重要

Triton Inference Server を使用するコンテナは、GPUバックアップされたマルチモデルエンドポイントに使用できる唯一のサポート対象コンテナです。

Inference Toolkit SageMaker を使用する

注記

SageMaker Inference Toolkit は、CPUバックアップされたマルチモデルエンドポイントでのみサポートされています。 SageMaker Inference Toolkit は現在、GPUバックアップされたマルチモデルエンドポイントではサポートされていません。

マルチモデルエンドポイントをサポートするビルド済みコンテナは、「サポートされるアルゴリズム、フレームワーク、インスタンス」に記載されています。他のフレームワークやアルゴリズムを使用する場合は、コンテナを構築する必要があります。これを行う最も簡単な方法は、SageMaker Inference Toolkit を使用して既存の構築済みコンテナを拡張することです。 SageMaker 推論ツールキットは、 にデプロイできるエンドポイントを作成するマルチモデルサーバー (MMS) の実装です SageMaker。でマルチモデルエンドポイントをサポートするカスタムコンテナをセットアップおよびデプロイする方法を示すサンプルノートブックについては SageMaker、「マルチモデルエンドポイントBYOCサンプルノートブック」を参照してください。

注記

SageMaker 推論ツールキットは Python モデルハンドラーのみをサポートします。ハンドラーを他の言語で実装する場合は、追加のマルチモデルエンドポイント を実装する独自のコンテナを構築する必要がありますAPIs。詳細については、マルチモデルエンドポイント用のカスタムコンテナの規約 を参照してください。

SageMaker 推論ツールキットを使用してコンテナを拡張するには
  1. モデルハンドラを作成します。MMS は、モデルハンドラーを想定しています。これは、モデルハンドラーで事前処理、モデルからのプリディションの取得、および出力の処理を行う関数を実装する Python ファイルです。モデルハンドラの例については、サンプルノートブックの model_handler.py を参照してください。

  2. 推論ツールキットをインポートし、そのmodel_server.start_model_server関数を使用して を起動しますMMS。次の例は、サンプルノートブックの dockerd-entrypoint.py ファイルからのものです。model_server.start_model_server を呼び出すと、前のステップで説明したモデルハンドラが 渡されます。

    import subprocess import sys import shlex import os from retrying import retry from subprocess import CalledProcessError from sagemaker_inference import model_server def _retry_if_error(exception): return isinstance(exception, CalledProcessError or OSError) @retry(stop_max_delay=1000 * 50, retry_on_exception=_retry_if_error) def _start_mms(): # by default the number of workers per model is 1, but we can configure it through the # environment variable below if desired. # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2' model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle') def main(): if sys.argv[1] == 'serve': _start_mms() else: subprocess.check_call(shlex.split(' '.join(sys.argv[1:]))) # prevent docker exit subprocess.call(['tail', '-f', '/dev/null']) main()
  3. Dockerfile では、最初のステップからのモデルハンドラをコピーし、前のステップの Python ファイルを Dockerfile のエントリポイントとして指定します 。次の行は、サンプルノートブックで使用されている Dockerfile からのものです。

    # Copy the default custom service file to handle incoming data and inference requests COPY model_handler.py /home/model-server/model_handler.py # Define an entrypoint script for the docker image ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
  4. コンテナを構築して登録します。サンプルノートブックの次のシェルスクリプトは、コンテナを構築し、 AWS アカウントの Elastic Container Registry リポジトリにアップロードします。

    %%sh # The name of our algorithm algorithm_name=demo-sagemaker-multimodel cd container account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly $(aws ecr get-login --region ${region} --no-include-email) # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -q -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}

このコンテナを使用して、マルチモデルエンドポイントを にデプロイできるようになりました SageMaker。