

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

# 推論パイプラインでリアルタイム予測を実行する
<a name="inference-pipeline-real-time"></a>

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

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

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

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

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

**注記**  
[SageMaker AI 組み込みアルゴリズム](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)を含むパイプラインでカスタム Docker イメージを使う場合は、[Amazon Elastic Container Registry (Amazon ECR) ポリシー](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)が必要です。Amazon ECR リポジトリは、イメージをプルする許可を SageMaker AI に付与する必要があります。詳細については、「[推論パイプラインの Amazon ECR アクセス許可のトラブルシューティングを行う](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions)」を参照してください。

## 推論パイプラインエンドポイントの作成とデプロイ
<a name="inference-pipeline-real-time-sdk"></a>

次のコードは、SageMaker AI 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)
```

## 推論パイプラインエンドポイントからのリアルタイムの推論リクエスト
<a name="inference-pipeline-endpoint-request"></a>

次のコード例は、推論エンドポイントを呼び出して 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)` から得るレスポンスは、モデルの推論結果です。

## リアルタイム推論パイプラインの例
<a name="inference-pipeline-example"></a>

エンドポイントをデプロイし、推論リクエストを実行し、レスポンスを逆シリアル化する方法を示す [SKLearn 予測子を使用して、この例のノートブック](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_randomforest/Sklearn_on_SageMaker_end2end.ipynb)を実行できます。このノートブックやその他の例は、[Amazon SageMaker サンプル GitHub リポジトリ](https://github.com/awslabs/amazon-sagemaker-examples)にあります。