非同期推論エンドポイントを作成する - Amazon SageMaker

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

非同期推論エンドポイントを作成する

SageMaker ホスティングサービスを使用してエンドポイントを作成する場合と同じ方法で非同期エンドポイントを作成します。

  • SageMaker でモデルを作成しますCreateModel

  • CreateEndpointConfig を使用してエンドポイント設定を作成する。

  • CreateEndpoint を使用して HTTPS エンドポイントを作成する。

エンドポイントを作成するには、まず、CreateModel を使用してモデルアーティファクトと Docker レジストリパス (イメージ) をポイントする、モデルを作成します。次に、API を使用して設定を作成します。CreateEndpointConfigこの設定では、CreateModel API を使用して作成された 1 つ以上のデプロイするモデルと、 SageMaker プロビジョンするリソースを指定します。リクエストで指定したエンドポイント設定を使用して CreateEndpoint でエンドポイントを作成します。非同期エンドポイントは、UpdateEndpoint API を使用して更新できます。InvokeEndpointAsync を使って、エンドポイント ホストされているモデルとの間で推論リクエストを送受信します。エンドポイントは DeleteEndpoint API を使用して削除できます。

SageMaker 利用可能なイメージの完全なリストについては、「使用可能な Deep Learning Containers イメージ」を参照してください。Docker イメージの作成方法の詳細については、「独自の推論コードを使用する」を参照してください。

モデルを作成する

次の例は、AWS SDK for Python (Boto3) を使用してモデルを作成する方法を示しています。最初の数行では、以下を定義します。

  • sagemaker_client: SageMaker AWS サービスに対するリクエストの送受信を簡単にする低レベルのクライアントオブジェクト。

  • sagemaker_role: SageMaker IAM ロールの Amazon リソースネーム (ARN) を含む文字列変数。

  • aws_region: AWS リージョンの名前を持つ文字列変数。

import boto3 # Specify your AWS Region aws_region='<aws_region>' # Create a low-level SageMaker service client. sagemaker_client = boto3.client('sagemaker', region_name=aws_region) # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<account>:role/*"

次に、Amazon S3 に保存されているトレーニング済みモデルの場所を指定します。この例では、demo-xgboost-model.tar.gz という名前のトレーニング済み XGBoost モデルを使用します。完全な Amazon S3 URI は文字列変数 model_url に保存されています。

#Create a variable w/ the model S3 URI s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket bucket_prefix='saved_models' model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz" #Specify S3 bucket w/ model model_url = f"s3://{s3_bucket}/{model_s3_key}"

主コンテナを指定してください。プライマリコンテナについては、推論コードを含む Docker イメージ、アーティファクト (以前のトレーニングから)、予測のためにモデルをデプロイするときに推論コードが使うカスタム環境マップを指定します。

この例では、XGBoost 組み込みアルゴリズムコンテナイメージを指定します。

from sagemaker import image_uris # Specify an AWS container image. container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')

SageMaker CreateModelを使用してAmazonでモデルを作成してください。次を指定します:

  • ModelName: モデルの名前 (この例では、model_name という文字列変数として保存されています)。

  • ExecutionRoleArn: Amazon が機械学習コンピューティングインスタンスへのデプロイまたはバッチ変換ジョブのためにモデルアーティファクトや Docker SageMaker イメージにアクセスするのに使用できる IAM ロールの Amazon リソースネーム (ARN)。

  • PrimaryContainer: 推論コード、関連アーティファクト、予測のためにモデルがデプロイされるときに推論コードが使用するカスタム環境マップを含むプライマリ Docker イメージの場所。

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, })

API パラメータの完全なリストについては、 SageMaker API CreateModelリファレンスガイドの説明を参照してください。

SageMaker 提供されているコンテナを使用している場合は、このステップで環境変数を設定することで、モデルサーバーのタイムアウトとペイロードのサイズをデフォルト値からフレームワークがサポートする最大値まで増やすことができます。これらの変数を明示的に設定しないと、非同期推論がサポートする最大タイムアウトとペイロードサイズを活用できない場合があります。次の例は、 PyTorch に基づいて推論コンテナの環境変数を設定する方法を示しています TorchServe。

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, 'Environment': { 'TS_MAX_REQUEST_SIZE': '100000000', 'TS_MAX_RESPONSE_SIZE': '100000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '1000' }, })

エンドポイントの作成が完了したら、inference.pyスクリプトから環境変数を印刷して、環境変数が正しく設定されたことをテストする必要があります。次の表は、デフォルト値を変更するように設定できるいくつかのフレームワークの環境変数を示しています。

Framework 環境変数

PyTorch 1.8 (に基づく TorchServe)

'リクエストの最大サイズ': '100000000'

'TS_MAX_RESPONSE_SIZE': '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'

PyTorch 1.4 (MMS に基づく)

'MMS_MAX_REQUEST_SIZE': '1000000000'

'MMS_MAX_RESPONSE_SIZE': '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

HuggingFace 推論コンテナ (MMS ベース)

'MMS_MAX_REQUEST_SIZE': '2000000000'

'MMS_MAX_RESPONSE_SIZE': '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

エンドポイント設定を作成する

モデルを作成したら、CreateEndpointConfig を使用してエンドポイント設定を作成します。Amazon SageMaker ホスティングサービスはこの設定を使用してモデルをデプロイします。この設定では、with を使用して作成された 1 つ以上のモデルを特定してCreateModel、Amazon SageMaker がプロビジョンするリソースをデプロイします。AsyncInferenceConfig オブジェクトを指定し、OutputConfig に対する出力 Amazon S3 ロケーションを指定します。オプションで、予測結果に関する通知を送信する Amazon SNS トピックを指定できます。Amazon SNS トピックの詳細については、「Amazon SNS を設定する」を参照してください。

次の例では、AWS SDK for Python (Boto3) を使用してエンドポイント設定を作成する方法を示します。

import datetime from time import gmtime, strftime # Create an endpoint config name. Here we create one based on the date # so it we can search endpoints based on creation time. endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}" # The name of the model that you want to host. This is the name that you specified when creating the model. model_name='<The_name_of_your_model>' create_endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request. # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.m5.xlarge", # Specify the compute instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ], AsyncInferenceConfig={ "OutputConfig": { # Location to upload response outputs when no location is provided in the request. "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output" # (Optional) specify Amazon SNS topics "NotificationConfig": { "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name", "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name", } }, "ClientConfig": { # (Optional) Specify the max number of inflight invocations per instance # If no value is provided, Amazon SageMaker will choose an optimal value for you "MaxConcurrentInvocationsPerInstance": 4 } } ) print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

前述の例では、次のキーを AsyncInferenceConfig フィールドの OutputConfig に指定します。

  • S3OutputPath: リクエストで場所が指定されていない場合に、レスポンスの出力をアップロードする場所。

  • NotificationConfig: (オプション) 推論リクエストが正常に終了した場合 (SuccessTopic) または失敗した場合 (ErrorTopic) に通知を投稿する SNS トピック。

AsyncInferenceConfig フィールドの ClientConfig に次のオプションの引数を指定することもできます。

  • MaxConcurrentInvocationsPerInstance: (オプション) SageMaker クライアントがモデルコンテナに送信する同時リクエストの最大数。

エンドポイントの作成

モデルとエンドポイントの設定が完了したら、CreateEndpoint API を使用してエンドポイントを作成します。エンドポイント名は、お使いの AWS アカウントの AWS リージョン内で一意である必要があります。

次が、リクエストで指定されたエンドポイント設定を使用してエンドポイントを作成します。Amazon SageMaker は、エンドポイントを使用してリソースをプロビジョニングし、モデルをデプロイします。

# The name of the endpoint.The name must be unique within an AWS Region in your AWS account. endpoint_name = '<endpoint-name>' # The name of the endpoint configuration associated with this endpoint. endpoint_config_name='<endpoint-config-name>' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)

CreateEndpointAPI を呼び出すと、Amazon SageMaker 非同期推論は、Amazon SNS トピックを設定したことをチェックするテスト通知を送信します。Amazon SageMaker 非同期推論では、UpdateEndpointWeightsAndCapacitiesとの呼び出し後にテスト通知も送信されます。UpdateEndpointこれにより、 SageMaker 必要な許可があることをチェックします。通知は無視できます。テスト通知は次の形式です。

{ "eventVersion":"1.0", "eventSource":"aws:sagemaker", "eventName":"TestNotification" }