マルチモデルエンドポイントを作成する - 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 サポートされているエンドポイントで動作するコンテナイメージのリストについては、NVIDIATriton 推論コンテナ (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-Nearest Neighbors 組み込みアルゴリズムイメージのアドレスを取得します。

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

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

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

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

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

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

  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>')