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

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

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

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

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

コンソールを使用して、 CPUとGPUバックアップされたマルチモデルエンドポイントの両方を作成できます。 SageMaker コンソールを使用してマルチモデルエンドポイントを作成するには、次の手順に従います。

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

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

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

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

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

    「モデルの作成」ページの セクションでは、「複数のモデルを使用」を選択できます。
  6. 推論コンテナイメージ には、目的のコンテナイメージの Amazon ECRパスを入力します。

    GPU モデルの場合、NVIDIATriton 推論サーバーによってバックアップされたコンテナを使用する必要があります。GPU サポートされているエンドポイントで動作するコンテナイメージのリストについては、NVIDIA「Triton 推論コンテナ (SM サポートのみ)」を参照してください。NVIDIA Triton 推論サーバーの詳細については、「 で Triton 推論サーバーを使用する SageMaker」を参照してください。

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

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

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

次のセクションを使用して、CPUインスタンスにバックアップされたマルチモデルエンドポイントを作成します。マルチモデルエンドポイントは、Amazon SageMaker create_modelcreate_endpoint_config、および を使用して作成します。1 つのモデルエンドポイントを作成するのcreate_endpointAPIsと同じですが、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_config、単一モデルエンドポイントを作成する場合create_endpointAPIsと同様ですが、いくつかの変更があります。モデルコンテナを定義するときに、新しい Mode パラメータ値 MultiModel を渡す必要があります。また、1 つのモデルをデプロイするときは 1 つのモデルアーティファクトへのパスを渡しますが、代わりに、モデルアーティファクトが配置される Amazon S3 のプレフィックスを指定する ModelDataUrl フィールドを渡す必要があります。GPU バックアップされたマルチモデルエンドポイントの場合、GPUインスタンスでの実行用に最適化された NVIDIA Triton 推論サーバーでコンテナを使用する必要があります。GPU バックアップされたエンドポイントで動作するコンテナイメージのリストについては、NVIDIATriton 推論コンテナ (SM サポートのみ) を参照してください。

によってバックアップされたマルチモデルエンドポイントを作成する方法を示すノートブックの例についてはGPUs、「Amazon SageMaker マルチモデルエンドポイントを使用して GPUsで複数の深層学習モデルを実行する (MME)」を参照してください。

次の手順では、GPUバックアップされたマルチモデルエンドポイントを作成する主要なステップの概要を説明します。

モデルをデプロイするには (AWS SDK for Python (Boto 3))
  1. コンテナイメージを定義します。モデルGPUをサポートするマルチ ResNet モデルエンドポイントを作成するには、NVIDIATriton サーバーイメージ を使用するコンテナを定義します。このコンテナはマルチモデルエンドポイントをサポートし、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>')