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

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

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

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

CPU ベースのインスタンスにマルチモデルエンドポイント用の独自の依存関係を持たせる

ビルド済みのコンテナイメージがどれもニーズを満たさない場合は、CPU ベースのマルチモデルエンドポイントで使用する独自のコンテナを構築できます。

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

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

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

SAGEMAKER_MULTI_MODEL=true

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

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

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

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

GPU ベースのインスタンスにマルチモデルエンドポイント用の独自の依存関係を持たせる

GPU ベースのインスタンスを使用するマルチモデルエンドポイントでの Bring Your Own Container (BYOC) SageMaker 機能は、現在、マルチモデルサーバーおよび推論ツールキットライブラリではサポートされていません。

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

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

GPU ベースのマルチモデルエンドポイントに使用できるコンテナは、Triton Inference Server を備えたコンテナだけです。

SageMaker 推論ツールキットを使用する

注記

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

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

注記

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

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 でマルチモデルエンドポイントをデプロイできるようになりました。