マルチモデルエンドポイントを作成する
SageMaker コンソール、または AWS SDK for Python (Boto) を使って、マルチモデルエンドポイントを作成します。CPU または GPU ベースのエンドポイントをコンソールから作成するには、以下のセクションのコンソールの手順を参照してください。AWS SDK for Python (Boto) を使用してマルチモデルエンドポイントを作成する場合は、以下のセクションの CPU または GPU の手順を使用してください。CPU と GPU のワークフローは似ていますが、コンテナの要件など、いくつかの違いがあります。
トピック
マルチモデルエンドポイントを作成する (コンソール)
CPU と GPU ベースのマルチモデルエンドポイントの両方をコンソールから作成できます。以下の手順に従って SageMaker コンソールからマルチモデルエンドポイントを作成します。
マルチモデルエンドポイントを作成するには (コンソール)
-
Amazon SageMaker コンソール (https://console.aws.amazon.com/sagemaker/
) を開きます。 -
[モデル] を選択し、[推論] グループから [モデルの作成] を選択します。
-
[モデル名] に名前を入力します。
-
[IAM ロール] で、
AmazonSageMakerFullAccess
IAM ポリシーがアタッチされた IAM ロールを選択するか作成します。 -
[コンテナの定義] セクションの、[モデルアーティファクトと推論イメージオプションの提供] で [複数のモデルの使用] を選択します。
-
[推論コンテナイメージ] には、目的のコンテナイメージの Amazon ECR パスを入力します。
GPU モデルの場合は、NVIDIA Triton Inference Server を基盤とするコンテナを使用する必要があります。GPU ベースのエンドポイントで動作するコンテナイメージのリストについては、「NVIDIA Triton Inference Containers (SM support only)
」を参照してください。NVIDIA Triton Inference Server の詳細については、「Use Triton Inference Server with SageMaker」を参照してください。 -
[モデルの作成] を選択します。
-
単一モデルエンドポイントの場合と同様に、マルチモデルエンドポイントをデプロイします。手順については、SageMaker ホスティングサービスにモデルをデプロイする を参照してください。
AWS SDK for Python (Boto3) を使用して CPU を使用するマルチモデルエンドポイントを作成する
以下のセクションを使用して、CPU インスタンスベースのマルチモデルエンドポイントを作成します。マルチモデルエンドポイントは、モデルが 1 つのエンドポイントを作成する場合と同様に Amazon SageMaker の create_model
create_endpoint_config
create_endpoint
Mode
パラメータ値 MultiModel
を渡す必要があります。また、1 つのモデルをデプロイするときは 1 つのモデルアーティファクトへのパスを渡しますが、代わりに、モデルアーティファクトが配置される Amazon S3 のプレフィックスを指定する ModelDataUrl
フィールドを渡す必要があります。
SageMaker を使って複数の XGBoost モデルをエンドポイントにデプロイするサンプルノートブックについては、「マルチモデルエンドポイント (XGBoost) のサンプルノートブック
ここでは、CPU ベースのマルチモデルエンドポイントを作成するためにそのサンプルで使用される主要な手順について概説しています。
モデルをデプロイするには (AWS SDK for Python (Boto3))
-
マルチモデルエンドポイントのデプロイをサポートするイメージを含んだコンテナを取得します。マルチモデルエンドポイントをサポートする組み込みアルゴリズムとフレームワークコンテナのリストについては、「マルチモデルエンドポイントでサポートされるアルゴリズム、フレームワーク、インスタンス」を参照してください。この例では、組み込みのアルゴリズムの K 最近傍 (k-NN) アルゴリズム を使います。SageMaker Python SDK
のユーティリティ関数 image_uris.retrieve()
を呼び出して、組み込みの K 最近傍アルゴリズムイメージのアドレスを取得します。import sagemaker region = sagemaker_session.boto_region_name image = sagemaker.image_uris.retrieve("knn",region=region) container = { 'Image': image, 'ModelDataUrl': 's3://
<BUCKET_NAME>
/<PATH_TO_ARTIFACTS>
', 'Mode': 'MultiModel' } -
AWS SDK for Python (Boto3) SageMaker クライアントを取得し、このコンテナを使うモデルを作成します。
import boto3 sagemaker_client = boto3.client('sagemaker') response = sagemaker_client.create_model( ModelName =
'<MODEL_NAME>'
, ExecutionRoleArn = role, Containers = [container]) -
(オプション) シリアル推論パイプラインを使用している場合、パイプラインに含める追加のコンテナを取得し、
CreateModel
のContainers
引数に含めます。preprocessor_container = { 'Image': '
<ACCOUNT_ID>
.dkr.ecr.<REGION_NAME>
.amazonaws.com/<PREPROCESSOR_IMAGE>
:<TAG>
' } multi_model_container = { 'Image': '<ACCOUNT_ID>
.dkr.ecr.<REGION_NAME>
.amazonaws.com/<IMAGE>
:<TAG>
', 'ModelDataUrl': 's3://<BUCKET_NAME>
/<PATH_TO_ARTIFACTS>
', 'Mode': 'MultiModel' } response = sagemaker_client.create_model( ModelName ='<MODEL_NAME>'
, ExecutionRoleArn = role, Containers = [preprocessor_container, multi_model_container] )注記
シリアル推論パイプラインで使用できるマルチモデル対応エンドポイントは 1 つだけです。
-
(オプション) モデルのキャッシュによる利点がないユースケースの場合は、
MultiModelConfig
パラメータのModelCacheSetting
フィールドの値をDisabled
に設定し、create_model
呼び出しのContainer
引数に含めます。デフォルトでは、ModelCacheSetting
フィールドの値はEnabled
です。container = { 'Image': image, 'ModelDataUrl': 's3://
<BUCKET_NAME>
/<PATH_TO_ARTIFACTS>
', 'Mode': 'MultiModel' 'MultiModelConfig': { // Default value is 'Enabled' 'ModelCacheSetting': 'Disabled' } } response = sagemaker_client.create_model( ModelName ='<MODEL_NAME>'
, ExecutionRoleArn = role, Containers = [container] ) -
モデルのマルチモデルエンドポイントを設定します。少なくとも 2 つのインスタンスでエンドポイントを設定することをお勧めします。これにより、SageMaker は複数のアベイラビリティーゾーン全体で可用性の高い予測のセットをモデルに提供できます。
response = sagemaker_client.create_endpoint_config( EndpointConfigName =
'<ENDPOINT_CONFIG_NAME>'
, ProductionVariants=[ { 'InstanceType': 'ml.m4.xlarge', 'InitialInstanceCount': 2, 'InitialVariantWeight': 1, 'ModelName':'<MODEL_NAME>'
, 'VariantName': 'AllTraffic' } ] )注記
シリアル推論パイプラインで使用できるマルチモデル対応エンドポイントは 1 つだけです。
-
EndpointName
およびEndpointConfigName
パラメータを使用してマルチモデルエンドポイントを作成します。response = sagemaker_client.create_endpoint( EndpointName =
'<ENDPOINT_NAME>'
, EndpointConfigName ='<ENDPOINT_CONFIG_NAME>'
)
AWS SDK for Python (Boto3) を使用して、GPU を使用するマルチモデルエンドポイントを作成する
次のセクションを使用して、GPU ベースのマルチモデルエンドポイントを作成します。マルチモデルエンドポイントは、モデルが 1 つのエンドポイントを作成する場合と同様に Amazon SageMaker の create_model
create_endpoint_config
create_endpoint
Mode
パラメータ値 MultiModel
を渡す必要があります。また、1 つのモデルをデプロイするときは 1 つのモデルアーティファクトへのパスを渡しますが、代わりに、モデルアーティファクトが配置される Amazon S3 のプレフィックスを指定する ModelDataUrl
フィールドを渡す必要があります。GPU ベースのマルチモデルエンドポイントでは、GPU インスタンスでの実行に最適化された NVIDIA Triton Inference Server のコンテナも使用する必要があります。GPU ベースのエンドポイントで動作するコンテナイメージのリストについては、「NVIDIA Triton Inference Containers (SM support only)
GPU ベースのマルチモデルエンドポイントを作成する方法を示すノートブックの例については、「Run mulitple deep learning models on GPUs with Amazon SageMaker Multi-model endpoints (MME)
ここでは、GPU ベースのマルチモデルエンドポイントを作成するための主要な手順について概説しています。
モデルをデプロイするには (AWS SDK for Python (Boto3))
-
コンテナイメージを定義します。ResNet モデル用の GPU サポートを備えたマルチモデルエンドポイントを作成するには、NVIDIA Triton Server イメージを使用するコンテナを定義します。このコンテナはマルチモデルエンドポイントをサポートし、GPU インスタンスでの実行に最適化されています。SageMaker Python SDK
のユーティリティ関数 image_uris.retrieve()
を呼び出して、イメージのアドレスを取得します。例:import sagemaker region = sagemaker_session.boto_region_name // Find the sagemaker-tritonserver image at // https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-triton/resnet50/triton_resnet50.ipynb // Find available tags at https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only image = "
<ACCOUNT_ID>
.dkr.ecr.<REGION_NAME>
.amazonaws.com/sagemaker-tritonserver:<TAG>
".format( account_id=account_id_map[region], region=region ) container = { 'Image': image, 'ModelDataUrl': 's3://<BUCKET_NAME>
/<PATH_TO_ARTIFACTS>
', 'Mode': 'MultiModel', "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "resnet"}, } -
AWS SDK for Python (Boto3) SageMaker クライアントを取得し、このコンテナを使うモデルを作成します。
import boto3 sagemaker_client = boto3.client('sagemaker') response = sagemaker_client.create_model( ModelName =
'<MODEL_NAME>'
, ExecutionRoleArn = role, Containers = [container]) -
(オプション) シリアル推論パイプラインを使用している場合、パイプラインに含める追加のコンテナを取得し、
CreateModel
のContainers
引数に含めます。preprocessor_container = { 'Image': '
<ACCOUNT_ID>
.dkr.ecr.<REGION_NAME>
.amazonaws.com/<PREPROCESSOR_IMAGE>
:<TAG>
' } multi_model_container = { 'Image': '<ACCOUNT_ID>
.dkr.ecr.<REGION_NAME>
.amazonaws.com/<IMAGE>
:<TAG>
', 'ModelDataUrl': 's3://<BUCKET_NAME>
/<PATH_TO_ARTIFACTS>
', 'Mode': 'MultiModel' } response = sagemaker_client.create_model( ModelName ='<MODEL_NAME>'
, ExecutionRoleArn = role, Containers = [preprocessor_container, multi_model_container] )注記
シリアル推論パイプラインで使用できるマルチモデル対応エンドポイントは 1 つだけです。
-
(オプション) モデルのキャッシュによる利点がないユースケースの場合は、
MultiModelConfig
パラメータのModelCacheSetting
フィールドの値をDisabled
に設定し、create_model
呼び出しのContainer
引数に含めます。デフォルトでは、ModelCacheSetting
フィールドの値はEnabled
です。container = { 'Image': image, 'ModelDataUrl': 's3://
<BUCKET_NAME>
/<PATH_TO_ARTIFACTS>
', 'Mode': 'MultiModel' 'MultiModelConfig': { // Default value is 'Enabled' 'ModelCacheSetting': 'Disabled' } } response = sagemaker_client.create_model( ModelName ='<MODEL_NAME>'
, ExecutionRoleArn = role, Containers = [container] ) -
モデルの GPU ベースのマルチモデルエンドポイントを設定します。可用性を高め、キャッシュヒット率を高めるために、エンドポイントに複数のインスタンスを設定することをお勧めします。
response = sagemaker_client.create_endpoint_config( EndpointConfigName =
'<ENDPOINT_CONFIG_NAME>'
, ProductionVariants=[ { 'InstanceType': 'ml.g4dn.4xlarge', 'InitialInstanceCount': 2, 'InitialVariantWeight': 1, 'ModelName':'<MODEL_NAME>'
, 'VariantName': 'AllTraffic' } ] ) -
EndpointName
およびEndpointConfigName
パラメータを使用してマルチモデルエンドポイントを作成します。response = sagemaker_client.create_endpoint( EndpointName =
'<ENDPOINT_NAME>'
, EndpointConfigName ='<ENDPOINT_CONFIG_NAME>'
)