

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將模型部署至 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 機器學習 (ML) 執行個體數目和類型。

```
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"`。此端點在機器學習 (ML) 執行個體中保持作用中狀態，而且您可以隨時進行即時預測，除非您稍後將其關閉。複製此端點名稱並儲存，以便在 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 預測器類別，使用相同的端點設定新的預測器物件。重新使用您用於 `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` Predictor 的行為與原始 `xgb_predictor` 完全相同。如需詳細資料，請參閱 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 中的 [SageMaker AI 預測器](https://sagemaker.readthedocs.io/en/stable/predictors.html#sagemaker.predictor.RealTimePredictor)類別。

## (選用) 使用批次轉換進行預測
<a name="ex1-batch-transform"></a>

您可以執行一次性批次推論任務，使用 SageMaker AI 批次轉換對測試資料集進行預測，而不是在生產環境中託管端點。完成模型訓練後，您可以將估算器延伸至以 [SageMaker AI 轉換器](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. 建立指定最少參數數目的轉換器物件：執行批次轉換工作的 `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 會建立 `batch_output` 路徑中儲存的 `test.csv.out` 預測資料，該預測資料應採用下列格式：`s3://sagemaker-<region>-111122223333/demo-sagemaker-xgboost-adult-income-prediction/batch-prediction`。執行下列 AWS CLI 動作來下載批次轉換任務的輸出資料：

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

   這應該在當前工作目錄下建立 `test.csv.out` 檔案。您將能夠看到根據 XGBoost 訓練工作的邏輯迴歸預測的浮點值。