マルチモデルエンドポイントを作成する - Amazon SageMaker

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

マルチモデルエンドポイントを作成する

SageMaker コンソールまたは を使用して、マルチモデルエンドポイント AWS SDK for Python (Boto) を作成できます。CPU または GPU ベースのエンドポイントをコンソールから作成するには、以下のセクションのコンソールの手順を参照してください。を使用してマルチモデルエンドポイントを作成する場合は AWS SDK for Python (Boto)、次のセクションの CPU または GPU の手順を使用します。CPU と GPU のワークフローは似ていますが、コンテナの要件など、いくつかの違いがあります。

マルチモデルエンドポイントを作成する (コンソール)

CPU と GPU ベースのマルチモデルエンドポイントの両方をコンソールから作成できます。次の手順を使用して、 SageMaker コンソールからマルチモデルエンドポイントを作成します。

マルチモデルエンドポイントを作成するには (コンソール)
  1. https://console.aws.amazon.com/sagemaker/ で Amazon SageMaker コンソールを開きます。

  2. [モデル] を選択し、[推論] グループから [モデルの作成] を選択します。

  3. [モデル名] に名前を入力します。

  4. [IAM ロール] で、AmazonSageMakerFullAccess IAM ポリシーがアタッチされた IAM ロールを選択するか作成します。

  5. [コンテナの定義] セクションの、[モデルアーティファクトと推論イメージオプションの提供][複数のモデルの使用] を選択します。

    
              1 つのエンドポイントで複数のモデルをホストするために [Use multiple models] (複数のモデルを使用する) を選択できる、[Create model] (モデルの作成) ページのセクション。
  6. [推論コンテナイメージ] には、目的のコンテナイメージの Amazon ECR パスを入力します。

    GPU モデルの場合は、NVIDIA Triton Inference Server を基盤とするコンテナを使用する必要があります。GPU ベースのエンドポイントで動作するコンテナイメージのリストについては、「NVIDIA Triton Inference Containers (SM support only)」を参照してください。NVIDIA Triton 推論サーバーの詳細については、「 で Triton 推論サーバーを使用する SageMaker」を参照してください。

  7. [モデルの作成] を選択します。

  8. 単一モデルエンドポイントの場合と同様に、マルチモデルエンドポイントをデプロイします。手順については、「 SageMaker モデルをホスティングサービスにデプロイします。」を参照してください。

で CPUs を使用してマルチモデルエンドポイントを作成する AWS SDK for Python (Boto3)

以下のセクションを使用して、CPU インスタンスベースのマルチモデルエンドポイントを作成します。マルチモデルエンドポイントは、1 つのモデルエンドポイントを作成するのと同じように、Amazon SageMaker create_modelcreate_endpoint_config、および create_endpoint APIs を使用して作成しますが、2 つの変更を加えます。モデルコンテナを定義するときに、新しい Mode パラメータ値 MultiModel を渡す必要があります。また、1 つのモデルをデプロイするときは 1 つのモデルアーティファクトへのパスを渡しますが、代わりに、モデルアーティファクトが配置される Amazon S3 のプレフィックスを指定する ModelDataUrl フィールドを渡す必要があります。

が複数の XGBoost モデルをエンドポイントにデプロイ SageMaker するために使用するサンプルノートブックについては、「マルチモデルエンドポイント XGBoost サンプルノートブック」を参照してください。

ここでは、CPU ベースのマルチモデルエンドポイントを作成するためにそのサンプルで使用される主要な手順について概説しています。

モデルをデプロイするには (AWS SDK for Python (Boto 3))
  1. マルチモデルエンドポイントのデプロイをサポートするイメージを含んだコンテナを取得します。マルチモデルエンドポイントをサポートする組み込みアルゴリズムとフレームワークコンテナのリストについては、「サポートされるアルゴリズム、フレームワーク、インスタンス」を参照してください。この例では、組み込みのアルゴリズムの 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' }
  2. 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])
  3. (オプション) シリアル推論パイプラインを使用している場合、パイプラインに含める追加のコンテナを取得し、CreateModelContainers 引数に含めます。

    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] )
    注記

    シリアル推論パイプラインで使用できる multi-model-enabled エンドポイントは 1 つだけです。

  4. (オプション) モデルのキャッシュによる利点がないユースケースの場合は、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] )
  5. モデルのマルチモデルエンドポイントを設定します。少なくとも 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' } ] )
    注記

    シリアル推論パイプラインで使用できる multi-model-enabled エンドポイントは 1 つだけです。

  6. EndpointName および EndpointConfigName パラメータを使用してマルチモデルエンドポイントを作成します。

    response = sagemaker_client.create_endpoint( EndpointName = '<ENDPOINT_NAME>', EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')

で GPUs を使用してマルチモデルエンドポイントを作成する AWS SDK for Python (Boto3)

次のセクションを使用して、GPU ベースのマルチモデルエンドポイントを作成します。Amazon SageMaker create_model、、および create_endpoint APIs を使用してマルチモデルエンドポイントを作成する方法はcreate_endpoint_config、単一モデルエンドポイントを作成する場合と似ていますが、いくつかの変更があります。モデルコンテナを定義するときに、新しい Mode パラメータ値 MultiModel を渡す必要があります。また、1 つのモデルをデプロイするときは 1 つのモデルアーティファクトへのパスを渡しますが、代わりに、モデルアーティファクトが配置される Amazon S3 のプレフィックスを指定する ModelDataUrl フィールドを渡す必要があります。GPU ベースのマルチモデルエンドポイントでは、GPU インスタンスでの実行に最適化された NVIDIA Triton Inference Server のコンテナも使用する必要があります。GPU ベースのエンドポイントで動作するコンテナイメージのリストについては、「NVIDIA Triton Inference Containers (SM support only)」を参照してください。

GPU ベースのマルチモデルエンドポイントを作成する方法を示すノートブックの例については、「Amazon SageMaker マルチモデルエンドポイント (MME) を使用して GPUs」を参照してください。

ここでは、GPU ベースのマルチモデルエンドポイントを作成するための主要な手順について概説しています。

モデルをデプロイするには (AWS SDK for Python (Boto 3))
  1. コンテナイメージを定義します。モデルの GPU サポートを使用してマルチ ResNet モデルエンドポイントを作成するには、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"}, }
  2. 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])
  3. (オプション) シリアル推論パイプラインを使用している場合、パイプラインに含める追加のコンテナを取得し、CreateModelContainers 引数に含めます。

    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] )
    注記

    シリアル推論パイプラインで使用できる multi-model-enabled エンドポイントは 1 つだけです。

  4. (オプション) モデルのキャッシュによる利点がないユースケースの場合は、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] )
  5. モデルの 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' } ] )
  6. EndpointName および EndpointConfigName パラメータを使用してマルチモデルエンドポイントを作成します。

    response = sagemaker_client.create_endpoint( EndpointName = '<ENDPOINT_NAME>', EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')