

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

# モデルを Amazon EC2 にデプロイする
<a name="ex1-model-deployment"></a>

予測を取得するには、Amazon SageMaker AI を使用して Amazon EC2 にモデルをデプロイします。

**Topics**
+ [SageMaker AI ホスティングサービスにモデルをデプロイする](#ex1-deploy-model)
+ [(オプション) SageMaker AI 予測を使用して、ホストされたエンドポイントを再利用する](#ex1-deploy-model-sdk-use-endpoint)
+ [(オプション) バッチ変換を使用して予測を行う](#ex1-batch-transform)

## SageMaker AI ホスティングサービスにモデルをデプロイする
<a name="ex1-deploy-model"></a>

Amazon SageMaker AI を使用して Amazon EC2 経由でモデルをホストするには、`xgb_model` 推定ツールの `deploy` メソッドを呼び出して、「[トレーニングジョブを作成して実行する](ex1-train-model.md#ex1-train-model-sdk)」でトレーニングしたモデルをデプロイします。`deploy` メソッドを呼び出すときに、エンドポイントをホストするのに使用する EC2 機械学習インスタンスの数とタイプを指定します。

```
import sagemaker
from sagemaker.serializers import CSVSerializer
xgb_predictor=xgb_model.deploy(
    initial_instance_count=1,
    instance_type='ml.t2.medium',
    serializer=CSVSerializer()
)
```
+ `initial_instance_count` (int) - モデルをデプロイするインスタンスの数。
+ `instance_type` (str) - デプロイされたモデルを操作するインスタンスのタイプ。
+ `serializer` (int) - さまざまな形式 (NumPy 配列、リスト、ファイル、バッファ) の入力データを CSV 形式の文字列にシリアル化します。XGBoost アルゴリズムでは CSV 形式の入力ファイルを使用できるため、このファイルを使用します。

この `deploy` メソッドは、デプロイ可能なモデルを作成し、SageMaker AI ホスティングサービスエンドポイントを設定して、モデルをホストするエンドポイントを起動します。詳細については、「[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)」の「[SageMaker AI 汎用推定ツールのデプロイクラスメソッド](https://sagemaker.readthedocs.io/en/stable/estimators.html#sagemaker.estimator.Estimator.deploy)」を参照してください。`deploy` メソッドで生成されたエンドポイントの名前を取得するには、次のコードを実行します。

```
xgb_predictor.endpoint_name
```

これにより `xgb_predictor` のエンドポイント名が返されます。エンドポイント名の形式は `"sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS"` になります。このエンドポイントは機械学習インスタンスでアクティブなままとなるため、後でシャットダウンしない限り、いつでも瞬時に予測を行うことができます。このエンドポイント名をコピーして保存しておけば、再利用して、SageMaker Studio または SageMaker AI ノートブックインスタンスの他の場所でリアルタイム予測を行うことができます。

**ヒント**  
Amazon EC2 インスタンスやエッジデバイスにデプロイするのためのモデルのコンパイルと最適化の詳細については、「[Neo でモデルをコンパイルしてデプロイする](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)」を参照してください。

## (オプション) SageMaker AI 予測を使用して、ホストされたエンドポイントを再利用する
<a name="ex1-deploy-model-sdk-use-endpoint"></a>

モデルをエンドポイントにデプロイしたら、エンドポイントをペアリングして新しい SageMaker AI 予測を設定すると、他の任意のノートブックでリアルタイム予測を継続的に行うことができます。次のサンプルコードは、SageMaker AI Predictor クラスを使用して、同じエンドポイントを使用した新しい予測子オブジェクトを設定する方法を説明しています。`xgb_predictor` に使用したエンドポイント名を再利用します。

```
import sagemaker
xgb_predictor_reuse=sagemaker.predictor.Predictor(
    endpoint_name="{{sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS}}",
    sagemaker_session=sagemaker.Session(),
    serializer=sagemaker.serializers.CSVSerializer()
)
```

`xgb_predictor_reuse` 予測子はオリジナルの `xgb_predictor` とまったく同じ動作をします。詳細については、「[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)」の「[SageMaker AI Predictor](https://sagemaker.readthedocs.io/en/stable/predictors.html#sagemaker.predictor.RealTimePredictor)」クラスを参照してください。

## (オプション) バッチ変換を使用して予測を行う
<a name="ex1-batch-transform"></a>

本番環境でエンドポイントをホストする代わりに、SageMaker AI バッチ変換を使用して、テストデータセットで予測を行うための 1 回限りのバッチ推論ジョブを実行できます。モデルのトレーニングが完了したら、推定ツールを [SageMaker Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html) クラスをベースにした `transformer` オブジェクトに拡張できます。バッチトランスフォーマーは、指定された S3 バケットの入力データを読み込み、予測を行います。

**バッチ変換ジョブを実行するには**

1. 次のコードを実行して、テストデータセットの特徴列を CSV ファイルに変換し、S3 バケットにアップロードします。

   ```
   X_test.to_csv('test.csv', index=False, header=False)
   
   boto3.Session().resource('s3').Bucket(bucket).Object(
   os.path.join(prefix, 'test/test.csv')).upload_file('test.csv')
   ```

1. バッチ変換ジョブの入力および出力の S3 バケット URI を、次に示すように指定します。

   ```
   # The location of the test dataset
   batch_input = 's3://{}/{}/test'.format(bucket, prefix)
   
   # The location to store the results of the batch transform job
   batch_output = 's3://{}/{}/batch-prediction'.format(bucket, prefix)
   ```

1. パラメータの最小数を指定する transformer オブジェクトを作成します。次に示すように、`instance_count` と `instance_type` のパラメータはバッチ変換ジョブを実行するためのパラメータであり、`output_path` は予測データを保存するためのパラメータです。

   ```
   transformer = xgb_model.transformer(
       instance_count=1, 
       instance_type='ml.m4.xlarge', 
       output_path=batch_output
   )
   ```

1. 次に示すように、`transformer` オブジェクトの `transform()` メソッドを実行して、バッチ変換ジョブを開始します。

   ```
   transformer.transform(
       data=batch_input, 
       data_type='S3Prefix',
       content_type='text/csv', 
       split_type='Line'
   )
   transformer.wait()
   ```

1. バッチ変換ジョブが完了すると、SageMaker AI は `test.csv.out` 予測データを作成し、`batch_output` パスに保存します。このデータは、`s3://sagemaker-<region>-111122223333/demo-sagemaker-xgboost-adult-income-prediction/batch-prediction` という形式になります。バッチ変換ジョブの出力データをダウンロードする AWS CLI には、以下を実行します。

   ```
   ! aws s3 cp {batch_output} ./ --recursive
   ```

   これにより、現在の作業ディレクトリの下に `test.csv.out` ファイルが作成されます。XGBoost トレーニングジョブのロジスティック回帰に基づいて予測される浮動値を確認できます。