推論パイプラインでリアルタイム予測を実行する - Amazon SageMaker

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

推論パイプラインでリアルタイム予測を実行する

トレーニングされたモデルは、外部の事前処理なしに直接リアルタイム予測を行うための推論パイプラインで使用することができます。パイプラインを設定するときに、Amazon で既に利用可能な組み込みの特徴量トランスフォーマーを使用することを選択できます SageMaker。または、数行の scikit-learn または Spark コードのみを使用して、独自の変換ロジックを実装できます。

機械学習パイプラインのシリアル化形式および実行エンジンである MLeap は、Spark、scikit-learn、および をサポートしています。これは、パイプラインをトレーニングし、MLeap バンドルと呼ばれるシリアル化されたパイプラインにエクスポートするため TensorFlow です。バンドルは、バッチモードスコアリングのために Spark に逆シリアル化したり、リアルタイム API サービスに使用するために MLeap ランタイムに逆シリアル化したりできます。

パイプラインのコンテナは、(8080 ではなく) SAGEMAKER_BIND_TO_PORT 環境変数で指定されたポートでリッスンします。推論パイプラインで実行する場合、 はコンテナにこの環境変数 SageMaker を自動的に提供します。この環境変数が存在しない場合、コンテナではデフォルトでポート 8080 が使用されます。コンテナがこの要件に準拠していることを示すには、次のコマンドを使用して Dockerfile にラベルを追加します。

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

コンテナが 2 番目のポートをリッスンする必要がある場合は、SAGEMAKER_SAFE_PORT_RANGE 環境変数で指定された範囲内のポートを選択してください。値を 形式の包括的な範囲として指定します。ここで"XXXX-YYYY"XXXXYYYYは複数桁の integers です。 は、複数コンテナパイプラインでコンテナを実行するときに、この値を自動的に SageMaker 提供します。

注記

SageMaker 組み込みアルゴリズム を含むパイプラインでカスタム Docker イメージを使用するには、Amazon Elastic Container Registry (Amazon ECR) ポリシー が必要です。Amazon ECR リポジトリは、イメージをプルするアクセス許可を付与 SageMakerする必要があります。詳細については、「推論パイプラインの Amazon ECR アクセス許可のトラブルシューティングを行う」を参照してください。

推論パイプラインエンドポイントの作成とデプロイ

次のコードは、 SageMaker SDK を使用して、SparkML モデルと XGBoost モデルで時系列にリアルタイム推論パイプラインモデルを作成してデプロイします。

from sagemaker.model import Model from sagemaker.pipeline_model import PipelineModel from sagemaker.sparkml.model import SparkMLModel sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz') sparkml_model = SparkMLModel(model_data=sparkml_data) xgb_model = Model(model_data=xgb_model.model_data, image=training_image) model_name = 'serial-inference-' + timestamp_prefix endpoint_name = 'serial-inference-ep-' + timestamp_prefix sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model]) sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)

推論パイプラインエンドポイントからのリアルタイムの推論リクエスト

次のコード例は、推論エンドポイントを呼び出して JSON 形式のリクエストペイロードを渡すことによって、リアルタイムの予測を行う方法を示しています。

import sagemaker from sagemaker.predictor import json_serializer, json_deserializer, Predictor payload = { "input": [ { "name": "Pclass", "type": "float", "val": "1.0" }, { "name": "Embarked", "type": "string", "val": "Q" }, { "name": "Age", "type": "double", "val": "48.0" }, { "name": "Fare", "type": "double", "val": "100.67" }, { "name": "SibSp", "type": "double", "val": "1.0" }, { "name": "Sex", "type": "string", "val": "male" } ], "output": { "name": "features", "type": "double", "struct": "vector" } } predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer, content_type='text/csv', accept='application/json' print(predictor.predict(payload))

predictor.predict(payload) から得るレスポンスは、モデルの推論結果です。

リアルタイム推論パイプラインの例

エンドポイントをデプロイし、推論リクエストを実行し、レスポンスを逆シリアル化する方法を示す SKLearn 予測子を使用して、この例のノートブックを実行できます。このノートブックとその他の例は、Amazon SageMaker サンプル GitHub リポジトリ にあります。