

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

# 使用 Amazon SageMaker AI 任務
<a name="kubernetes-sagemaker-jobs"></a>

本節以 [SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s) 的原始版本為基礎。

**重要**  
我們正在停止對 [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) 原始版本的開發和技術支援。  
如果您目前使用的是 [SageMaker Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) 的 `v1.2.2` 或以下版本，我們建議您將資源遷移到 [Amazon SageMaker 的 ACK 服務控制器](https://github.com/aws-controllers-k8s/sagemaker-controller)。ACK 服務控制器是新一代的 SageMaker Operators for Kubernetes，以 [AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/) 為基礎。  
如需與移轉步驟相關的資訊，請參閱[將資源遷移到最新的運算子](kubernetes-sagemaker-operators-migrate.md)。  
如需與終止支援 SageMaker Operators for Kubernetes 原始版本相關的常見問題的答案，請參閱[宣布終止支援 SageMaker AI Operators for Kubernetes 原始版本](kubernetes-sagemaker-operators-eos-announcement.md)

若要使用 Operators for Kubernetes 執行 Amazon SageMaker AI 任務，您可以套用 YAML 檔案或使用提供的 Helm Chart。

下列教學課程中的所有範例運算子工作都使用從公開 MNIST 資料集擷取的範例資料。若要執行這些範例，請將資料集下載到 Amazon S3 儲存貯體。您可以在[下載 MNIST 資料集](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-preprocess-data-pull-data.html)中找到資料集。

**Topics**
+ [TrainingJob 運算子](#trainingjob-operator)
+ [HyperParameterTuningJob 運算子](#hyperparametertuningjobs-operator)
+ [BatchTransformJob 運算子](#batchtransformjobs-operator)
+ [HostingDeployment 運算子](#hosting-deployment-operator)
+ [ProcessingJob 運算子](#kubernetes-processing-job-operator)
+ [HostingAutoscalingPolicy (HAP) 運算子](#kubernetes-hap-operator)

## TrainingJob 運算子
<a name="trainingjob-operator"></a>

訓練任務運算子會在 SageMaker AI 中為您啟動訓練任務，將您指定的訓練任務規格與 SageMaker AI 進行協調。您可以在 SageMaker AI [CreateTrainingJob API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html)中進一步了解 SageMaker 訓練任務。

**Topics**
+ [使用 YAML 檔案建立 TrainingJob](#create-a-trainingjob-using-a-simple-yaml-file)
+ [使用 Helm Chart 建立 TrainingJob](#create-a-trainingjob-using-a-helm-chart)
+ [列出 TrainingJobs](#list-training-jobs)
+ [描述 TrainingJob](#describe-a-training-job)
+ [檢視 TrainingJobs 的日誌](#view-logs-from-training-jobs)
+ [刪除 TrainingJobs](#delete-training-jobs)

### 使用 YAML 檔案建立 TrainingJob
<a name="create-a-trainingjob-using-a-simple-yaml-file"></a>

1. 使用下列命令下載範例 YAML 檔案以進行訓練：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-trainingjob.yaml
   ```

1. 編輯 `xgboost-mnist-trainingjob.yaml` 檔案，將 `roleArn` 參數取代為 `<sagemaker-execution-role>`，以及將 `outputPath` 取代為 SageMaker AI 執行角色具有寫入存取權的 Amazon S3 儲存貯體。`roleArn` 必須具有許可，這樣 SageMaker AI 才能代表您存取 Amazon S3、Amazon CloudWatch 和其他服務。如需建立 SageMaker AI 執行角色的詳細資訊，請參閱 [SageMaker AI 角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)。使用下列命令來套用 YAML 檔案：

   ```
   kubectl apply -f xgboost-mnist-trainingjob.yaml
   ```

### 使用 Helm Chart 建立 TrainingJob
<a name="create-a-trainingjob-using-a-helm-chart"></a>

您可以使用 Helm Chart 執行 TrainingJobs。

1. 使用以下命令複製 GitHub 儲存庫以取得來源代碼：

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

1. 導覽至 `amazon-sagemaker-operator-for-k8s/hack/charts/training-jobs/` 資料夾並編輯 `values.yaml` 檔案，以將 `rolearn` 和 `outputpath` 等值取代與您的帳戶相對應的值。RoleARN 必須具有許可，這樣 SageMaker AI 才能代表您存取 Amazon S3、Amazon CloudWatch 和其他服務。如需建立 SageMaker AI 執行角色的詳細資訊，請參閱 [SageMaker AI 角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)。

#### 建立 TrainingJob
<a name="create-the-training-job"></a>

將角色和 Amazon S3 儲存貯體取代為 `values.yaml` 中適當的值後，您可以使用下列命令建立訓練工作：

```
helm install . --generate-name
```

您的輸出看起來應如以下所示：

```
NAME: chart-12345678
LAST DEPLOYED: Wed Nov 20 23:35:49 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for installing the sagemaker-k8s-trainingjob.
```

#### 驗證您的訓練 Helm Chart
<a name="verify-your-training-helm-chart"></a>

要驗證 Helm Chart 是否成功建立，請執行以下命令：

```
helm ls
```

您的輸出看起來應如以下所示：

```
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
chart-12345678        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-trainingjob-0.1.0
rolebased-12345678    default         1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
```

`helm install` 會建立 `TrainingJob` Kubernetes 資源。運算子會在 SageMaker AI 中啟動實際的訓練任務，並更新 `TrainingJob` Kubernetes 資源以反映 SageMaker AI 中的任務狀態。您在工作期間使用的 SageMaker AI 資源會產生費用。工作完成或停止後，就不會再產生任何費用。

**注意**：SageMaker AI 不允許您更新執行中的訓練任務。您無法編輯任何參數並重新套用設定檔。變更中繼資料名稱或刪除現有工作，然後建立新工作。與 Kubeflow 中的 TFJob 等現有訓練工作運算子類似，`update` 不受支援。

### 列出 TrainingJobs
<a name="list-training-jobs"></a>

使用下列命令列出使用 Kubernetes 運算子建立的所有工作：

```
kubectl get TrainingJob
```

列出所有工作的輸出應與以下類似：

```
kubectl get trainingjobs
NAME                        STATUS       SECONDARY-STATUS   CREATION-TIME          SAGEMAKER-JOB-NAME
xgboost-mnist-from-for-s3   InProgress   Starting           2019-11-20T23:42:35Z   xgboost-mnist-from-for-s3-examplef11eab94e0ed4671d5a8f
```

訓練工作會在工作完成或失敗後繼續列出。您可以依照[刪除 TrainingJobs](#delete-training-jobs)步驟從清單中移除 `TrainingJob` 工作。對於已完成或停止的工作，SageMaker AI 資源不會產生任何費用。

#### TrainingJob 狀態值
<a name="training-job-status-values"></a>

`STATUS` 欄位可以是以下其中一個值：
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

這些狀態直接來自 SageMaker AI 官方 [API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeTrainingJob.html#SageMaker-DescribeTrainingJob-response-TrainingJobStatus)。

除了 SageMaker AI 的官方狀態之外，`STATUS` 還有可能是 `SynchronizingK8sJobWithSageMaker`。這表示運算子尚未處理工作。

#### 次要狀態值
<a name="secondary-status-values"></a>

次要狀態直接來自 SageMaker AI 官方 [API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeTrainingJob.html#SageMaker-DescribeTrainingJob-response-SecondaryStatus)。其中包含有關工作狀態的詳細資訊。

### 描述 TrainingJob
<a name="describe-a-training-job"></a>

您可以使用 `describe` `kubectl` 命令取得有關訓練工作的更多詳細資訊。這通常用於對問題進行偵錯或檢查訓練工作的參數。若要取得與訓練工作相關的資訊，請使用下列命令：

```
kubectl describe trainingjob xgboost-mnist-from-for-s3
```

訓練工作的輸出應與以下類似：

```
Name:         xgboost-mnist-from-for-s3
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  sagemaker.aws.amazon.com/v1
Kind:         TrainingJob
Metadata:
  Creation Timestamp:  2019-11-20T23:42:35Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  23119
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/trainingjobs/xgboost-mnist-from-for-s3
  UID:               6d7uiui-0bef-11ea-b94e-0ed467example
Spec:
  Algorithm Specification:
    Training Image:       8256416981234.dkr.ecr.us-east-2.amazonaws.com/xgboost:1
    Training Input Mode:  File
  Hyper Parameters:
    Name:   eta
    Value:  0.2
    Name:   gamma
    Value:  4
    Name:   max_depth
    Value:  5
    Name:   min_child_weight
    Value:  6
    Name:   num_class
    Value:  10
    Name:   num_round
    Value:  10
    Name:   objective
    Value:  multi:softmax
    Name:   silent
    Value:  0
  Input Data Config:
    Channel Name:      train
    Compression Type:  None
    Content Type:      text/csv
    Data Source:
      S 3 Data Source:
        S 3 Data Distribution Type:  FullyReplicated
        S 3 Data Type:               S3Prefix
        S 3 Uri:                     https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/train/
    Channel Name:                    validation
    Compression Type:                None
    Content Type:                    text/csv
    Data Source:
      S 3 Data Source:
        S 3 Data Distribution Type:  FullyReplicated
        S 3 Data Type:               S3Prefix
        S 3 Uri:                     https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/validation/
  Output Data Config:
    S 3 Output Path:  s3://amzn-s3-demo-bucket/sagemaker/xgboost-mnist/xgboost/
  Region:             us-east-2
  Resource Config:
    Instance Count:     1
    Instance Type:      ml.m4.xlarge
    Volume Size In GB:  5
  Role Arn:             arn:aws:iam::12345678910:role/service-role/AmazonSageMaker-ExecutionRole
  Stopping Condition:
    Max Runtime In Seconds:  86400
  Training Job Name:         xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0example
Status:
  Cloud Watch Log URL:           https://us-east-2.console.aws.amazon.com/cloudwatch/home?region=us-east-2#logStream:group=/aws/sagemaker/TrainingJobs;prefix=<example>;streamFilter=typeLogStreamPrefix
  Last Check Time:               2019-11-20T23:44:29Z
  Sage Maker Training Job Name:  xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94eexample
  Secondary Status:              Downloading
  Training Job Status:           InProgress
Events:                          <none>
```

### 檢視 TrainingJobs 的日誌
<a name="view-logs-from-training-jobs"></a>

使用下列命令查看 `kmeans-mnist` 訓練工作的日誌：

```
kubectl smlogs trainingjob xgboost-mnist-from-for-s3
```

您的輸出應該類似以下內容：執行個體的日誌會按時間順序排序。

```
"xgboost-mnist-from-for-s3" has SageMaker TrainingJobName "xgboost-mnist-from-for-s3-123456789" in region "us-east-2", status "InProgress" and secondary status "Starting"
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC Arguments: train
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] Running standalone xgboost training.
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] File size need to be processed in the node: 1122.95mb. Available memory size in the node: 8586.0mb
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [2019-11-20:23:45:22:INFO] Determined delimiter of CSV input is ','
xgboost-mnist-from-for-s3-6d7fa0af0bef11eab94e0ed46example/algo-1-1574293123 2019-11-20 23:45:24.7 +0000 UTC [23:45:22] S3DistributionType set as FullyReplicated
```

### 刪除 TrainingJobs
<a name="delete-training-jobs"></a>

使用下列命令停止 Amazon SageMaker AI 上的訓練任務：

```
kubectl delete trainingjob xgboost-mnist-from-for-s3
```

此命令會從 Kubernetes 移除 SageMaker 訓練工作。此命令會傳回下列輸出：

```
trainingjob.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted
```

如果任務在 SageMaker AI 上仍在進行中，任務將停止。您的任務完成或停止後，SageMaker AI 資源就不會對您產生任何費用。

**注意**：SageMaker AI 不會刪除訓練任務。已停止的工作會繼續在 SageMaker AI 主控台上展示。`delete` 命令大約需要 2 分鐘的時間來清除 SageMaker AI 中的資源。

## HyperParameterTuningJob 運算子
<a name="hyperparametertuningjobs-operator"></a>

超參數調校任務運算會在 SageMaker AI 中啟動您指定的超參數調校任務規格，以與 SageMaker AI 進行協調。您可以在 SageMaker AI [CreateHyperParameterTuningJob API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateHyperParameterTuningJob.html)中進一步了解 SageMaker AI 超參數調校任務。

**Topics**
+ [使用 YAML 檔案建立 HyperparameterTuningJob](#create-a-hyperparametertuningjob-using-a-simple-yaml-file)
+ [使用 Helm Chart 建立 HyperparameterTuningJob](#create-a-hyperparametertuningjob-using-a-helm-chart)
+ [列出 HyperparameterTuningJobs](#list-hyperparameter-tuning-jobs)
+ [描述 HyperparameterTuningJob](#describe-a-hyperparameter-tuning-job)
+ [檢視 HyperparameterTuningJobs 日誌](#view-logs-from-hyperparametertuning-jobs)
+ [刪除 HyperparameterTuningJob](#delete-hyperparametertuning-jobs)

### 使用 YAML 檔案建立 HyperparameterTuningJob
<a name="create-a-hyperparametertuningjob-using-a-simple-yaml-file"></a>

1. 使用下列命令，下載超參數調整工作的範例 YAML 檔案：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-hpo.yaml
   ```

1. 編輯 `xgboost-mnist-hpo.yaml` 檔案，以將 `roleArn` 參數取代為您的 `sagemaker-execution-role`。您必須將 `s3InputPath` 和 `s3OutputPath` 變更為與帳戶對應的值，超參數調校才能成功。使用下列命令來套用更新的 YAML 檔案：

   ```
   kubectl apply -f xgboost-mnist-hpo.yaml
   ```

### 使用 Helm Chart 建立 HyperparameterTuningJob
<a name="create-a-hyperparametertuningjob-using-a-helm-chart"></a>

您可以使用 Helm Chart 來執行超參數調校工作。

1. 使用以下命令複製 GitHub 儲存庫以取得來源代碼：

   ```
   git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
   ```

1. 導覽至 `amazon-sagemaker-operator-for-k8s/hack/charts/hyperparameter-tuning-jobs/` 資料夾。

1. 編輯 `values.yaml` 檔案，以將 `roleArn` 參數取代為您的 `sagemaker-execution-role`。您必須將 `s3InputPath` 和 `s3OutputPath` 變更為與您的帳戶對應的值，超參數調校才能成功。

#### 建立 HyperparameterTuningJob
<a name="create-the-hpo-job"></a>

將角色和 Amazon S3 路徑取代為 `values.yaml` 中適當的值後，您可以使用下列命令建立超參數調校工作：

```
helm install . --generate-name
```

您的輸出應該類似以下內容：

```
NAME: chart-1574292948
LAST DEPLOYED: Wed Nov 20 23:35:49 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for installing the sagemaker-k8s-hyperparametertuningjob.
```

#### 驗證圖表安裝
<a name="verify-chart-installation"></a>

要驗證 Helm Chart 是否已成功建立，請執行以下命令：

```
helm ls
```

您的輸出看起來應如以下所示：

```
NAME                    NAMESPACE       REVISION        UPDATED
chart-1474292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-hyperparametertuningjob-0.1.0                               STATUS          CHART                           APP VERSION
chart-1574292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-trainingjob-0.1.0
rolebased-1574291698    default         1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
```

`helm install` 會建立 `HyperParameterTuningJob` Kubernetes 資源。運算子會在 SageMaker AI 中啟動實際的超參數最佳化任務，並更新 `HyperParameterTuningJob` Kubernetes 資源以反映 SageMaker AI 中的任務狀態。您在工作期間使用的 SageMaker AI 資源會產生費用。工作完成或停止後，就不會再產生任何費用。

**注意**：SageMaker AI 不允許您更新執行中的超參數調校任務。您無法編輯任何參數並重新套用設定檔。您必須變更中繼資料名稱或刪除現有工作，然後建立新的工作。與 Kubeflow 中的 `TFJob` 等現有訓練工作運算子類似，`update` 不受支援。

### 列出 HyperparameterTuningJobs
<a name="list-hyperparameter-tuning-jobs"></a>

使用下列命令列出使用 Kubernetes 運算子建立的所有工作：

```
kubectl get hyperparametertuningjob
```

您的輸出看起來應如以下所示：

```
NAME         STATUS      CREATION-TIME          COMPLETED   INPROGRESS   ERRORS   STOPPED   BEST-TRAINING-JOB                               SAGEMAKER-JOB-NAME
xgboost-mnist-hpo   Completed   2019-10-17T01:15:52Z   10          0            0        0         xgboostha92f5e3cf07b11e9bf6c06d6-009-4c7a123   xgboostha92f5e3cf07b11e9bf6c123
```

超參數調校工作會在工作完成或失敗後繼續列出。您可以依照[刪除 HyperparameterTuningJob](#delete-hyperparametertuning-jobs) 步驟從清單中移除 `hyperparametertuningjob`。對於已完成或停止的工作，SageMaker AI 資源不會產生任何費用。

#### 超參數調校工作狀態值
<a name="hyperparameter-tuning-job-status-values"></a>

`STATUS` 欄位可以是以下其中一個值：
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

這些狀態直接來自 SageMaker AI 官方 [API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeHyperParameterTuningJob.html#SageMaker-DescribeHyperParameterTuningJob-response-HyperParameterTuningJobStatus)。

除了 SageMaker AI 的官方狀態之外，`STATUS` 還有可能是 `SynchronizingK8sJobWithSageMaker`。這表示運算子尚未處理工作。

#### 狀態計數器
<a name="status-counters"></a>

有多個輸出計數器，例如 `COMPLETED` 和 `INPROGRESS`。它們分別代表了已完成和正在進行的訓練工作的數量。如需與如何確定這些資訊相關的詳細資訊，請參閱 SageMaker API 文件中的[訓練工作狀態計數器](https://docs.aws.amazon.com/sagemaker/latest/dg/API_TrainingJobStatusCounters.html)。

#### 最佳 TrainingJob
<a name="best-training-job"></a>

此欄包含對選取的指標進行了最佳化的 `TrainingJob` 名稱。

若要查看調整過的超參數的摘要，請執行下列命令：

```
kubectl describe hyperparametertuningjob xgboost-mnist-hpo
```

若要查看與 `TrainingJob` 相關的詳細資訊，請執行下列命令：

```
kubectl describe trainingjobs <job name>
```

#### 產生的 TrainingJobs
<a name="spawned-training-jobs"></a>

您也可以執行下列命令，追蹤 `HyperparameterTuningJob` 在 Kubernetes 中啟動的所有 10 項訓練工作：

```
kubectl get trainingjobs
```

### 描述 HyperparameterTuningJob
<a name="describe-a-hyperparameter-tuning-job"></a>

您可以使用 `describe` `kubectl` 命令取得偵錯詳細資訊。

```
kubectl describe hyperparametertuningjob xgboost-mnist-hpo
```

除了與調校任務相關的資訊外，SageMaker AI Operator for Kubernetes 還會在 `describe` 輸出中公開超參數調校找到的[最佳訓練任務](https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-monitor.html#automatic-model-tuning-best-training-job)，如下所示：

```
Name:         xgboost-mnist-hpo
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"HyperparameterTuningJob","metadata":{"annotations":{},"name":"xgboost-mnist-hpo","namespace":...
API Version:  sagemaker.aws.amazon.com/v1
Kind:         HyperparameterTuningJob
Metadata:
  Creation Timestamp:  2019-10-17T01:15:52Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  8167
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/hyperparametertuningjobs/xgboost-mnist-hpo
  UID:               a92f5e3c-f07b-11e9-bf6c-06d6f303uidu
Spec:
  Hyper Parameter Tuning Job Config:
    Hyper Parameter Tuning Job Objective:
      Metric Name:  validation:error
      Type:         Minimize
    Parameter Ranges:
      Integer Parameter Ranges:
        Max Value:     20
        Min Value:     10
        Name:          num_round
        Scaling Type:  Linear
    Resource Limits:
      Max Number Of Training Jobs:     10
      Max Parallel Training Jobs:      10
    Strategy:                          Bayesian
    Training Job Early Stopping Type:  Off
  Hyper Parameter Tuning Job Name:     xgboostha92f5e3cf07b11e9bf6c06d6
  Region:                              us-east-2
  Training Job Definition:
    Algorithm Specification:
      Training Image:       12345678910.dkr.ecr.us-east-2.amazonaws.com/xgboost:1
      Training Input Mode:  File
    Input Data Config:
      Channel Name:  train
      Content Type:  text/csv
      Data Source:
        s3DataSource:
          s3DataDistributionType:  FullyReplicated
          s3DataType:              S3Prefix
          s3Uri:                   https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/train/
      Channel Name:                validation
      Content Type:                text/csv
      Data Source:
        s3DataSource:
          s3DataDistributionType:  FullyReplicated
          s3DataType:              S3Prefix
          s3Uri:                   https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/validation/
    Output Data Config:
      s3OutputPath:  https://s3-us-east-2.amazonaws.com/amzn-s3-demo-bucket/sagemaker/xgboost-mnist/xgboost
    Resource Config:
      Instance Count:     1
      Instance Type:      ml.m4.xlarge
      Volume Size In GB:  5
    Role Arn:             arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole
    Static Hyper Parameters:
      Name:   base_score
      Value:  0.5
      Name:   booster
      Value:  gbtree
      Name:   csv_weights
      Value:  0
      Name:   dsplit
      Value:  row
      Name:   grow_policy
      Value:  depthwise
      Name:   lambda_bias
      Value:  0.0
      Name:   max_bin
      Value:  256
      Name:   max_leaves
      Value:  0
      Name:   normalize_type
      Value:  tree
      Name:   objective
      Value:  reg:linear
      Name:   one_drop
      Value:  0
      Name:   prob_buffer_row
      Value:  1.0
      Name:   process_type
      Value:  default
      Name:   rate_drop
      Value:  0.0
      Name:   refresh_leaf
      Value:  1
      Name:   sample_type
      Value:  uniform
      Name:   scale_pos_weight
      Value:  1.0
      Name:   silent
      Value:  0
      Name:   sketch_eps
      Value:  0.03
      Name:   skip_drop
      Value:  0.0
      Name:   tree_method
      Value:  auto
      Name:   tweedie_variance_power
      Value:  1.5
    Stopping Condition:
      Max Runtime In Seconds:  86400
Status:
  Best Training Job:
    Creation Time:  2019-10-17T01:16:14Z
    Final Hyper Parameter Tuning Job Objective Metric:
      Metric Name:        validation:error
      Value:
    Objective Status:     Succeeded
    Training End Time:    2019-10-17T01:20:24Z
    Training Job Arn:     arn:aws:sagemaker:us-east-2:123456789012:training-job/xgboostha92f5e3cf07b11e9bf6c06d6-009-4sample
    Training Job Name:    xgboostha92f5e3cf07b11e9bf6c06d6-009-4c7a3059
    Training Job Status:  Completed
    Training Start Time:  2019-10-17T01:18:35Z
    Tuned Hyper Parameters:
      Name:                                    num_round
      Value:                                   18
  Hyper Parameter Tuning Job Status:           Completed
  Last Check Time:                             2019-10-17T01:21:01Z
  Sage Maker Hyper Parameter Tuning Job Name:  xgboostha92f5e3cf07b11e9bf6c06d6
  Training Job Status Counters:
    Completed:            10
    In Progress:          0
    Non Retryable Error:  0
    Retryable Error:      0
    Stopped:              0
    Total Error:          0
Events:                   <none>
```

### 檢視 HyperparameterTuningJobs 日誌
<a name="view-logs-from-hyperparametertuning-jobs"></a>

超參數調校工作沒有日誌，但它們啟動的所有訓練工作都有日誌。這些記錄檔可以存取，就像是一般訓練工作一樣。如需詳細資訊，請參閱[檢視 TrainingJobs 的日誌](#view-logs-from-training-jobs)。

### 刪除 HyperparameterTuningJob
<a name="delete-hyperparametertuning-jobs"></a>

使用下列命令停止 SageMaker AI 中的超參數任務。

```
kubectl delete hyperparametertuningjob xgboost-mnist-hpo
```

此命令會從您的 Kubernetes 叢集中移除超參數調校任務和相關聯的訓練任務，並在 SageMaker AI 中停止這些任務。對於已停止或完成的工作，SageMaker AI 資源不會產生任何費用。SageMaker AI 不會刪除超參數調校任務。已停止的工作會繼續在 SageMaker AI 主控台上展示。

您的輸出看起來應如以下所示：

```
hyperparametertuningjob.sagemaker.aws.amazon.com "xgboost-mnist-hpo" deleted
```

**注意**：刪除命令大約需要 2 分鐘的時間來清除 SageMaker AI 中的資源。

## BatchTransformJob 運算子
<a name="batchtransformjobs-operator"></a>

批次轉換任務運算子會在 SageMaker AI 中啟動批次轉換任務，將您指定的批次轉換任務規格與 SageMaker AI 進行協調。您可以在 SageMaker AI [CreateTransformJob API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTransformJob.html)中進一步了解 SageMaker AI 批次轉換任務。

**Topics**
+ [使用 YAML 檔案建立 BatchTransformJob](#create-a-batchtransformjob-using-a-simple-yaml-file)
+ [使用 Helm Chart 建立 BatchTransformJob](#create-a-batchtransformjob-using-a-helm-chart)
+ [列出 BatchTransformJobs](#list-batch-transform-jobs)
+ [描述 BatchTransformJob](#describe-a-batch-transform-job)
+ [檢視 BatchTransformJobs 日誌](#view-logs-from-batch-transform-jobs)
+ [刪除 BatchTransformJob](#delete-a-batch-transform-job)

### 使用 YAML 檔案建立 BatchTransformJob
<a name="create-a-batchtransformjob-using-a-simple-yaml-file"></a>

1. 使用下列命令下載批次轉換工作的範例 YAML 檔案：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-batchtransform.yaml
   ```

1. 編輯 `xgboost-mnist-batchtransform.yaml` 檔案，變更必要的參數，將 `inputdataconfig` 取代為您的輸入資料，以及將 `s3OutputPath` 取代為 SageMaker AI 執行角色具有寫入存取權的 Amazon S3 儲存貯體。

1. 使用下列命令來套用 YAML 檔案：

   ```
   kubectl apply -f xgboost-mnist-batchtransform.yaml
   ```

### 使用 Helm Chart 建立 BatchTransformJob
<a name="create-a-batchtransformjob-using-a-helm-chart"></a>

您可以使用 Helm Chart 執行批次轉換工作。

#### 取得 Ham 安裝程式目錄
<a name="get-the-helm-installer-directory"></a>

使用以下命令複製 GitHub 儲存庫以取得來源代碼：

```
git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
```

#### 設定 Helm Chart
<a name="configure-the-helm-chart"></a>

導覽至 `amazon-sagemaker-operator-for-k8s/hack/charts/batch-transform-jobs/` 資料夾。

編輯 `values.yaml` 檔案，將 `inputdataconfig` 取代為您的輸入資料，以及將 outputPath 取代為 SageMaker AI 執行角色具有寫入存取權的 S3 儲存貯體。

#### 建立 BatchTransformJob
<a name="create-a-batch-transform-job"></a>

1. 使用下列命令建立批次轉換工作：

   ```
   helm install . --generate-name
   ```

   您的輸出看起來應如以下所示：

   ```
   NAME: chart-1574292948
   LAST DEPLOYED: Wed Nov 20 23:35:49 2019
   NAMESPACE: default
   STATUS: deployed
   REVISION: 1
   TEST SUITE: None
   NOTES:
   Thanks for installing the sagemaker-k8s-batch-transform-job.
   ```

1. 要驗證 Helm Chart 是否已成功建立，請執行以下命令：

   ```
   helm ls
   NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
   chart-1474292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-batchtransformjob-0.1.0
   chart-1474292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-hyperparametertuningjob-0.1.0
   chart-1574292948        default         1               2019-11-20 23:35:49.9136092 +0000 UTC   deployed        sagemaker-k8s-trainingjob-0.1.0
   rolebased-1574291698    default         1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
   ```

   此命令會建立 `BatchTransformJob` Kubernetes 資源。運算子會在 SageMaker AI 中啟動實際的轉換任務，並更新 `BatchTransformJob` Kubernetes 資源以反映 SageMaker 中的任務狀態。您在工作期間使用的 SageMaker AI 資源會產生費用。工作完成或停止後，就不會再產生任何費用。

**注意**：SageMaker AI 不允許您更新執行中的批次轉換任務。您無法編輯任何參數並重新套用設定檔。您必須變更中繼資料名稱或刪除現有工作，然後建立新的工作。與 Kubeflow 中的 `TFJob` 等現有訓練工作運算子類似，`update` 不受支援。

### 列出 BatchTransformJobs
<a name="list-batch-transform-jobs"></a>

使用下列命令列出使用 Kubernetes 運算子建立的所有工作：

```
kubectl get batchtransformjob
```

您的輸出看起來應如以下所示：

```
NAME                                STATUS      CREATION-TIME          SAGEMAKER-JOB-NAME
xgboost-mnist-batch-transform       Completed   2019-11-18T03:44:00Z   xgboost-mnist-a88fb19809b511eaac440aa8axgboost
```

批次轉換工作會在工作完成或失敗後繼續列出。您可以依照[刪除 BatchTransformJob](#delete-a-batch-transform-job) 步驟從清單中移除 `hyperparametertuningjob`。對於已完成或停止的工作，SageMaker AI 資源不會產生任何費用。

#### 批次轉換狀態值
<a name="batch-transform-status-values"></a>

`STATUS` 欄位可以是以下其中一個值：
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

這些狀態直接來自 SageMaker AI 官方 [API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeHyperParameterTuningJob.html#SageMaker-DescribeHyperParameterTuningJob-response-HyperParameterTuningJobStatus)。

除了 SageMaker AI 的官方狀態之外，`STATUS` 還有可能是 `SynchronizingK8sJobWithSageMaker`。這表示運算子尚未處理工作。

### 描述 BatchTransformJob
<a name="describe-a-batch-transform-job"></a>

您可以使用 `describe` `kubectl` 命令取得偵錯詳細資訊。

```
kubectl describe batchtransformjob xgboost-mnist-batch-transform
```

您的輸出看起來應如以下所示：

```
Name:         xgboost-mnist-batch-transform
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"BatchTransformJob","metadata":{"annotations":{},"name":"xgboost-mnist","namespace"...
API Version:  sagemaker.aws.amazon.com/v1
Kind:         BatchTransformJob
Metadata:
  Creation Timestamp:  2019-11-18T03:44:00Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  21990924
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/batchtransformjobs/xgboost-mnist
  UID:               a88fb198-09b5-11ea-ac44-0aa8a9UIDNUM
Spec:
  Model Name:  TrainingJob-20190814SMJOb-IKEB
  Region:      us-east-1
  Transform Input:
    Content Type:  text/csv
    Data Source:
      S 3 Data Source:
        S 3 Data Type:  S3Prefix
        S 3 Uri:        s3://amzn-s3-demo-bucket/mnist_kmeans_example/input
  Transform Job Name:   xgboost-mnist-a88fb19809b511eaac440aa8a9SMJOB
  Transform Output:
    S 3 Output Path:  s3://amzn-s3-demo-bucket/mnist_kmeans_example/output
  Transform Resources:
    Instance Count:  1
    Instance Type:   ml.m4.xlarge
Status:
  Last Check Time:                2019-11-19T22:50:40Z
  Sage Maker Transform Job Name:  xgboost-mnist-a88fb19809b511eaac440aaSMJOB
  Transform Job Status:           Completed
Events:                           <none>
```

### 檢視 BatchTransformJobs 日誌
<a name="view-logs-from-batch-transform-jobs"></a>

使用下列命令查看 `xgboost-mnist` 批次轉換工作的日誌：

```
kubectl smlogs batchtransformjob xgboost-mnist-batch-transform
```

### 刪除 BatchTransformJob
<a name="delete-a-batch-transform-job"></a>

使用下列命令在 SageMaker AI 中停止批次轉換任務。

```
kubectl delete batchTransformJob xgboost-mnist-batch-transform
```

您的輸出看起來應如以下所示：

```
batchtransformjob.sagemaker.aws.amazon.com "xgboost-mnist" deleted
```

此命令會從您的 Kubernetes 叢集中移除批次轉換任務，並在 SageMaker AI 中停止這些任務。對於已停止或完成的工作，SageMaker AI 資源不會產生任何費用。刪除作業大約需要 2 分鐘的時間來清除 SageMaker AI 中的資源。

**注意**：SageMaker AI 不會刪除批次轉換工作。已停止的工作會繼續在 SageMaker AI 主控台上展示。

## HostingDeployment 運算子
<a name="hosting-deployment-operator"></a>

HostingDeployment 運算子支援建立和刪除端點，以及更新現有端點以進行即時推論。託管部署運算子透過在 SageMaker AI 中建立模型、端點配置和端點，將您指定的託管部署任務規格與 SageMaker AI 進行協調。您可以在 SageMaker AI [CreateEndpoint API 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html)中進一步了解 SageMaker AI 推論。

**Topics**
+ [設定 HostingDeployment 資源](#configure-a-hostingdeployment-resource)
+ [建立 HostingDeployment](#create-a-hostingdeployment)
+ [列出 HostingDeployments](#list-hostingdeployments)
+ [描述 HostingDeployment](#describe-a-hostingdeployment)
+ [調用端點](#invoking-the-endpoint)
+ [更新 HostingDeployment](#update-hostingdeployment)
+ [刪除 HostingDeployment](#delete-the-hostingdeployment)

### 設定 HostingDeployment 資源
<a name="configure-a-hostingdeployment-resource"></a>

使用下列命令下載託管部署工作的範例 YAML 檔案：

```
wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-hostingdeployment.yaml
```

`xgboost-mnist-hostingdeployment.yaml` 檔案具有下列可視需要進行編輯的元件：
+ *ProductionVariants*。生產變體是為單一模型提供服務的一組執行個體。SageMaker AI 根據設定的權重在所有生產變體之間進行負載平衡。
+ *模型*。模型是為模型提供服務所必需的容器和執行角色 ARN。它至少需要一個容器。
+ *容器*。容器用於指定資料集和提供映像。如果您使用的是自己的自訂演算法，而不是 SageMaker AI 所提供的演算法，則推論程式碼必須符合 SageMaker AI 要求。如需詳細資訊，請參閱[使用自已的演算法搭配 SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html)。

### 建立 HostingDeployment
<a name="create-a-hostingdeployment"></a>

若要建立 HostingDeployment，請使用以下命令，透過 `kubectl` 套用檔案 `hosting.yaml`：

```
kubectl apply -f hosting.yaml
```

SageMaker AI 會使用指定的組態建立端點。您在端點存留期內使用的 SageMaker AI 資源會產生費用。刪除端點後，就不會再產生任何費用。

完成建立過程約需 10 分鐘的時間。

### 列出 HostingDeployments
<a name="list-hostingdeployments"></a>

若要驗證已建立 HostingDeployment，請使用下列命令：

```
kubectl get hostingdeployments
```

您的輸出看起來應如以下所示：

```
NAME           STATUS     SAGEMAKER-ENDPOINT-NAME
host-xgboost   Creating   host-xgboost-def0e83e0d5f11eaaa450aSMLOGS
```

#### HostingDeployment 狀態值
<a name="hostingdeployment-status-values"></a>

狀態欄位可以是以下其中一個值：
+ `SynchronizingK8sJobWithSageMaker`：運算子正準備建立端點。
+ `ReconcilingEndpoint`：運算子正在建立、更新或刪除端點資源。如果 HostingDeployment 仍處於此狀態，請使用 `kubectl describe` 以在 `Additional` 欄位中查看原因。
+ `OutOfService`：端點無法接受傳入請求。
+ `Creating`：[CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html) 正在執行。
+ `Updating`：[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html) 或 [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) 正在執行。
+ `SystemUpdating`：端點正在維護，在完成之前無法更新、刪除或重新調整規模。此維護操作不會變更任何客戶指定的值，例如 VPC 組態、 AWS KMS 加密、模型、執行個體類型或執行個體計數。
+ `RollingBack`：端點無法縱向擴展、縮減規模或變更變體加權，且正在回復至之前的組態。回復完成後，端點會返回 `InService` 狀態。此過渡狀態僅適用於在 [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) 呼叫中，或在明確呼叫 [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpointWeightsAndCapacities.html) 作業時已開啟自動擴展，且正在進行變體加權或容量變更的端點。
+ `InService`：端點可以處理傳入請求。
+ `Deleting`：[DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DeleteEndpoint.html) 正在執行。
+ `Failed`：無法建立、更新端點或重新調整端點的規模。透過 [DescribeEndpoint:FailureReason](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeEndpoint.html#SageMaker-DescribeEndpoint-response-FailureReason) 取得與失敗原因相關的資訊。[DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DeleteEndpoint.html) 是唯一可以在失敗端點上執行的作業。

### 描述 HostingDeployment
<a name="describe-a-hostingdeployment"></a>

您可以使用 `describe` `kubectl` 命令取得偵錯詳細資訊。

```
kubectl describe hostingdeployment
```

您的輸出看起來應如以下所示：

```
Name:         host-xgboost
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"HostingDeployment","metadata":{"annotations":{},"name":"host-xgboost","namespace":"def..."
API Version:  sagemaker.aws.amazon.com/v1
Kind:         HostingDeployment
Metadata:
  Creation Timestamp:  2019-11-22T19:40:00Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        1
  Resource Version:  4258134
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/hostingdeployments/host-xgboost
  UID:               def0e83e-0d5f-11ea-aa45-0a3507uiduid
Spec:
  Containers:
    Container Hostname:  xgboost
    Image:               123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
    Model Data URL:      s3://amzn-s3-demo-bucket/inference/xgboost-mnist/model.tar.gz
  Models:
    Containers:
      xgboost
    Execution Role Arn:  arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole
    Name:                xgboost-model
    Primary Container:   xgboost
  Production Variants:
    Initial Instance Count:  1
    Instance Type:           ml.c5.large
    Model Name:              xgboost-model
    Variant Name:            all-traffic
  Region:                    us-east-2
Status:
  Creation Time:         2019-11-22T19:40:04Z
  Endpoint Arn:          arn:aws:sagemaker:us-east-2:123456789012:endpoint/host-xgboost-def0e83e0d5f11eaaaexample
  Endpoint Config Name:  host-xgboost-1-def0e83e0d5f11e-e08f6c510d5f11eaaa450aexample
  Endpoint Name:         host-xgboost-def0e83e0d5f11eaaa450a350733ba06
  Endpoint Status:       Creating
  Endpoint URL:          https://runtime.sagemaker.us-east-2.amazonaws.com/endpoints/host-xgboost-def0e83e0d5f11eaaaexample/invocations
  Last Check Time:       2019-11-22T19:43:57Z
  Last Modified Time:    2019-11-22T19:40:04Z
  Model Names:
    Name:   xgboost-model
    Value:  xgboost-model-1-def0e83e0d5f11-df5cc9fd0d5f11eaaa450aexample
Events:     <none>
```

狀態欄位使用下列欄位提供更多資訊：
+ `Additional`：與託管部署狀態相關的其他資訊。此欄位是選填的，只有在發生錯誤時才會填入。
+ `Creation Time`：在 SageMaker AI 中建立了端點時。
+ `Endpoint ARN`：SageMaker AI 端點 ARN。
+ `Endpoint Config Name`：端點組態的 SageMaker AI 名稱。
+ `Endpoint Name`：端點的 SageMaker AI 名稱。
+ `Endpoint Status`：端點的狀態。
+ `Endpoint URL`：可用來存取端點的 HTTPS URL。如需詳細資訊，請參閱[在 SageMaker AI 託管服務上部署模型](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)。
+ `FailureReason`：如果建立、更新或刪除命令失敗，原因會顯示於此處。
+ `Last Check Time`：運算子上次檢查端點狀態的時間。
+ `Last Modified Time`：上次修改端點的時間。
+ `Model Names`：HostingDeployment 模型名稱與 SageMaker AI 模型名稱的金鑰/值對。

### 調用端點
<a name="invoking-the-endpoint"></a>

一旦端點狀態為 `InService`，您可以透過兩種方式叫用端點：使用 AWS CLI，其會執行身分驗證和 URL 請求簽署，或使用類似 cURL 的 HTTP 用戶端。如果您使用自己的用戶端，則需要自行執行 AWS v4 URL 簽署和身分驗證。

若要使用 CLI AWS 叫用端點，請執行下列命令。確保將區域和端點名稱取代為端點的區域和 SageMaker AI 端點名稱。此資訊可從 `kubectl describe` 的輸出中取得。

```
# Invoke the endpoint with mock input data.
aws sagemaker-runtime invoke-endpoint \
  --region us-east-2 \
  --endpoint-name <endpoint name> \
  --body $(seq 784 | xargs echo | sed 's/ /,/g') \
  >(cat) \
  --content-type text/csv > /dev/null
```

例如，如果您的區域是 `us-east-2` 並且端點設定名稱為 `host-xgboost-f56b6b280d7511ea824b129926example`，則以下命令將調用端點：

```
aws sagemaker-runtime invoke-endpoint \
  --region us-east-2 \
  --endpoint-name host-xgboost-f56b6b280d7511ea824b1299example \
  --body $(seq 784 | xargs echo | sed 's/ /,/g') \
  >(cat) \
  --content-type text/csv > /dev/null
4.95847082138
```

在此處，`4.95847082138` 是模型對模擬資料的預測值。

### 更新 HostingDeployment
<a name="update-hostingdeployment"></a>

1. HostingDeployment 的狀態為 `InService` 後，就可以更新。HostingDeployment 可能需要大約 10 分鐘時間才能進入服務中狀態。。可使用以下命令來驗證狀態是否為 `InService`：

   ```
   kubectl get hostingdeployments
   ```

1. HostingDeployment 可在狀態為 `InService` 之前進行更新。運算子會等到 SageMaker AI 端點處於 `InService` 狀態再套用更新。

   若要套用更新，請修改 `hosting.yaml` 檔案。例如，將 `initialInstanceCount` 欄位從 1 變更為 2，如下所示：

   ```
   apiVersion: sagemaker.aws.amazon.com/v1
   kind: HostingDeployment
   metadata:
     name: host-xgboost
   spec:
       region: us-east-2
       productionVariants:
           - variantName: all-traffic
             modelName: xgboost-model
             initialInstanceCount: 2
             instanceType: ml.c5.large
       models:
           - name: xgboost-model
             executionRoleArn: arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole
             primaryContainer: xgboost
             containers:
               - xgboost
       containers:
           - containerHostname: xgboost
             modelDataUrl: s3://amzn-s3-demo-bucket/inference/xgboost-mnist/model.tar.gz
             image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
   ```

1. 儲存檔案，然後依如下所示，使用 `kubectl` 套用更新。您應該會看到狀態從 `InService` 變更為 `ReconcilingEndpoint`，然後變更為 `Updating`。

   ```
   $ kubectl apply -f hosting.yaml
   hostingdeployment.sagemaker.aws.amazon.com/host-xgboost configured
   
   $ kubectl get hostingdeployments
   NAME           STATUS                SAGEMAKER-ENDPOINT-NAME
   host-xgboost   ReconcilingEndpoint   host-xgboost-def0e83e0d5f11eaaa450a350abcdef
   
   $ kubectl get hostingdeployments
   NAME           STATUS     SAGEMAKER-ENDPOINT-NAME
   host-xgboost   Updating   host-xgboost-def0e83e0d5f11eaaa450a3507abcdef
   ```

SageMaker AI 會在您的模型中部署一組新的執行個體、切換流量以使用新執行個體，以及耗盡舊執行個體。這個過程序始後，狀態就會變成 `Updating`。更新完成後，端點狀態會變成 `InService`。完成此過程約需 10 分鐘的時間。

### 刪除 HostingDeployment
<a name="delete-the-hostingdeployment"></a>

1. 使用以下命令,透過 `kubectl` 刪除 HostingDeployment：

   ```
   kubectl delete hostingdeployments host-xgboost
   ```

   您的輸出看起來應如以下所示：

   ```
   hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
   ```

1. 若要驗證是否已刪除託管部署，請使用下列命令：

   ```
   kubectl get hostingdeployments
   No resources found.
   ```

刪除端點後，SageMaker AI 資源就不會再產生任何費用。

## ProcessingJob 運算子
<a name="kubernetes-processing-job-operator"></a>

ProcessingJob 運算子用來啟動 Amazon SageMaker 處理工作。如需 SageMaker Processing 任務的詳細資訊，請參閱 [CreateProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html)。

**Topics**
+ [使用 YAML 檔案建立 ProcessingJob](#kubernetes-processing-job-yaml)
+ [列出 ProcessingJobs](#kubernetes-processing-job-list)
+ [描述 ProcessingJob](#kubernetes-processing-job-description)
+ [刪除處理工作](#kubernetes-processing-job-delete)

### 使用 YAML 檔案建立 ProcessingJob
<a name="kubernetes-processing-job-yaml"></a>

請依照下列步驟使用 YAML 檔案建立 Amazon SageMaker 處理工作：

1. 下載 `kmeans_preprocessing.py` 預處理指令碼。

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/kmeans_preprocessing.py
   ```

1. 在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中，建立 `mnist_kmeans_example/processing_code` 資料夾，然後將指令碼上傳到此資料夾。

1. 下載 `kmeans-mnist-processingjob.yaml` 檔案。

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/kmeans-mnist-processingjob.yaml
   ```

1. 編輯 YAML 檔案以指定 `sagemaker-execution-role`，並將 `amzn-s3-demo-bucket` 的所有執行個體取代為您的 S3 儲存貯體。

   ```
   ...
   metadata:
     name: kmeans-mnist-processing
   ...
     roleArn: arn:aws:iam::<acct-id>:role/service-role/<sagemaker-execution-role>
     ...
     processingOutputConfig:
       outputs:
         ...
             s3Output:
               s3Uri: s3://<amzn-s3-demo-bucket>/mnist_kmeans_example/output/
     ...
     processingInputs:
       ...
           s3Input:
             s3Uri: s3://<amzn-s3-demo-bucket>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
   ```

   `sagemaker-execution-role` 必須具有許可，這樣 SageMaker AI 才能代表您存取您的 S3 儲存貯體、Amazon CloudWatch 和其他服務。如需建立執行角色的詳細資訊，請參閱 [SageMaker AI 角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html#sagemaker-roles-createtrainingjob-perms)。

1. 使用下列其中一個命令來套用 YAML 檔案。

   叢集範圍的安裝：

   ```
   kubectl apply -f kmeans-mnist-processingjob.yaml
   ```

   命名空間範圍的安裝：

   ```
   kubectl apply -f kmeans-mnist-processingjob.yaml -n <NAMESPACE>
   ```

### 列出 ProcessingJobs
<a name="kubernetes-processing-job-list"></a>

使用下列其中一個命令列出使用 ProcessingJob 運算子建立的所有任務。`SAGEMAKER-JOB-NAME ` 來自 YAML 檔案的 `metadata` 部分。

叢集範圍的安裝：

```
kubectl get ProcessingJob kmeans-mnist-processing
```

命名空間範圍的安裝：

```
kubectl get ProcessingJob -n <NAMESPACE> kmeans-mnist-processing
```

您的輸出應該類似以下內容：

```
NAME                    STATUS     CREATION-TIME        SAGEMAKER-JOB-NAME
kmeans-mnist-processing InProgress 2020-09-22T21:13:25Z kmeans-mnist-processing-7410ed52fd1811eab19a165ae9f9e385
```

輸出會列出所有工作，無論其狀態為何。要從清單中移除作業，請參閱[刪除處理任務](https://docs.aws.amazon.com/sagemaker/latest/dg/kubernetes-processing-job-operator.html#kubernetes-processing-job-delete)。

**ProcessingJob 狀態**
+ `SynchronizingK8sJobWithSageMaker` – 工作會先提交至叢集。運算子已收到請求並正準備建立處理工作。
+ `Reconciling` – 運算子正在初始化或從暫時性誤差以及其他錯誤中恢復。如果處理任務仍處於此狀態，請使用 `kubectl` `describe` 命令在 `Additional` 欄位中查看原因。
+ `InProgress | Completed | Failed | Stopping | Stopped` – SageMaker Processing 任務的狀態。有關詳細資訊，請參閱 [DescribeProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html#sagemaker-DescribeProcessingJob-response-ProcessingJobStatus)。
+ `Error` - 運算子無法透過調節來復原。

對於已完成、已停止或失敗的任務，SageMaker AI 資源未來不會產生任何費用。

### 描述 ProcessingJob
<a name="kubernetes-processing-job-description"></a>

使用下列其中一個命令可取得有關處理工作的詳細資訊。這些命令通常用於對問題進行偵錯或檢查處理工作的參數。

叢集範圍的安裝：

```
kubectl describe processingjob kmeans-mnist-processing
```

命名空間範圍的安裝：

```
kubectl describe processingjob kmeans-mnist-processing -n <NAMESPACE>
```

處理工作的輸出應該類似以下內容。

```
$ kubectl describe ProcessingJob kmeans-mnist-processing
Name:         kmeans-mnist-processing
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"ProcessingJob","metadata":{"annotations":{},"name":"kmeans-mnist-processing",...
API Version:  sagemaker.aws.amazon.com/v1
Kind:         ProcessingJob
Metadata:
  Creation Timestamp:  2020-09-22T21:13:25Z
  Finalizers:
    sagemaker-operator-finalizer
  Generation:        2
  Resource Version:  21746658
  Self Link:         /apis/sagemaker.aws.amazon.com/v1/namespaces/default/processingjobs/kmeans-mnist-processing
  UID:               7410ed52-fd18-11ea-b19a-165ae9f9e385
Spec:
  App Specification:
    Container Entrypoint:
      python
      /opt/ml/processing/code/kmeans_preprocessing.py
    Image Uri:  763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:1.5.0-cpu-py36-ubuntu16.04
  Environment:
    Name:   MYVAR
    Value:  my_value
    Name:   MYVAR2
    Value:  my_value2
  Network Config:
  Processing Inputs:
    Input Name:  mnist_tar
    s3Input:
      Local Path:   /opt/ml/processing/input
      s3DataType:   S3Prefix
      s3InputMode:  File
      s3Uri:        s3://<s3bucket>-us-west-2/algorithms/kmeans/mnist/mnist.pkl.gz
    Input Name:     source_code
    s3Input:
      Local Path:   /opt/ml/processing/code
      s3DataType:   S3Prefix
      s3InputMode:  File
      s3Uri:        s3://<s3bucket>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
  Processing Output Config:
    Outputs:
      Output Name:  train_data
      s3Output:
        Local Path:    /opt/ml/processing/output_train/
        s3UploadMode:  EndOfJob
        s3Uri:         s3://<s3bucket>/mnist_kmeans_example/output/
      Output Name:     test_data
      s3Output:
        Local Path:    /opt/ml/processing/output_test/
        s3UploadMode:  EndOfJob
        s3Uri:         s3://<s3bucket>/mnist_kmeans_example/output/
      Output Name:     valid_data
      s3Output:
        Local Path:    /opt/ml/processing/output_valid/
        s3UploadMode:  EndOfJob
        s3Uri:         s3://<s3bucket>/mnist_kmeans_example/output/
  Processing Resources:
    Cluster Config:
      Instance Count:     1
      Instance Type:      ml.m5.xlarge
      Volume Size In GB:  20
  Region:                 us-west-2
  Role Arn:               arn:aws:iam::<acct-id>:role/m-sagemaker-role
  Stopping Condition:
    Max Runtime In Seconds:  1800
  Tags:
    Key:    tagKey
    Value:  tagValue
Status:
  Cloud Watch Log URL:             https://us-west-2.console.aws.amazon.com/cloudwatch/home?region=us-west-2#logStream:group=/aws/sagemaker/ProcessingJobs;prefix=kmeans-mnist-processing-7410ed52fd1811eab19a165ae9f9e385;streamFilter=typeLogStreamPrefix
  Last Check Time:                 2020-09-22T21:14:29Z
  Processing Job Status:           InProgress
  Sage Maker Processing Job Name:  kmeans-mnist-processing-7410ed52fd1811eab19a165ae9f9e385
Events:                            <none>
```

### 刪除處理工作
<a name="kubernetes-processing-job-delete"></a>

當您刪除處理任務時，系統會從 Kubernetes 中移除 SageMaker Processing 任務，但不會從 SageMaker AI 中刪除該任務。如果 SageMaker AI 中的任務狀態為 `InProgress`，任務就會停止。已停止的處理任務不會對 SageMaker AI 資源產生任何費用。使用下列其中一個命令可刪除處理工作。

叢集範圍的安裝：

```
kubectl delete processingjob kmeans-mnist-processing
```

命名空間範圍的安裝：

```
kubectl delete processingjob kmeans-mnist-processing -n <NAMESPACE>
```

處理工作的輸出應該類似以下內容。

```
processingjob.sagemaker.aws.amazon.com "kmeans-mnist-processing" deleted
```



**注意**  
SageMaker AI 不會刪除處理任務。已停止的任務會繼續在 SageMaker AI 主控台中顯示。`delete` 命令需要幾分鐘的時間來清除 SageMaker AI 中的資源。

## HostingAutoscalingPolicy (HAP) 運算子
<a name="kubernetes-hap-operator"></a>

HostingAutoscalingPolicy (HAP) 運算子會接受一系列資源 ID 作為輸入，並將相同的政策套用至每個資源 ID。每個資源 ID 都是端點名稱和變體名稱的組合。HAP 運算子會執行兩個步驟：註冊資源 ID，然後將擴展政策套用至每個資源 ID。`Delete` 會復原這兩個動作。您可以將 HAP 套用至現有的 SageMaker AI 端點，也可以使用 [HostingDeployment 運算子](https://docs.aws.amazon.com/sagemaker/latest/dg/hosting-deployment-operator.html#create-a-hostingdeployment)建立新的 SageMaker AI 端點。您可以在[應用程式自動擴展政策文件](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html)中閱讀更多關於 SageMaker AI 自動擴展的資訊。

**注意**  
在 `kubectl` 命令中，您可以使用簡短格式 `hap` 來代替 `hostingautoscalingpolicy`。

**Topics**
+ [使用 YAML 檔案建立 HostingAutoscalingPolicy](#kubernetes-hap-job-yaml)
+ [列出 HostingAutoscalingPolicies](#kubernetes-hap-list)
+ [描述 HostingAutoscalingPolicy](#kubernetes-hap-describe)
+ [更新 HostingAutoscalingPolicy](#kubernetes-hap-update)
+ [刪除 HostingAutoscalingPolicy](#kubernetes-hap-delete)
+ [使用 HostingAutoscalingPolicy 更新或刪除端點](#kubernetes-hap-update-delete-endpoint)

### 使用 YAML 檔案建立 HostingAutoscalingPolicy
<a name="kubernetes-hap-job-yaml"></a>

使用 YAML 檔案建立 HostingAutoscalingPolicy (HAP)，將預先定義指標或自訂指標套用至一個或多個 SageMaker AI 端點。

Amazon SageMaker AI 需要特定值才能將自動擴展套用至您的變體。如果 YAML 規格中未指定這些值，HAP 運算子會套用下列預設值。

```
# Do not change
Namespace                    = "sagemaker"
# Do not change
ScalableDimension            = "sagemaker:variant:DesiredInstanceCount"
# Only one supported
PolicyType                   = "TargetTrackingScaling"
# This is the default policy name but can be changed to apply a custom policy
DefaultAutoscalingPolicyName = "SageMakerEndpointInvocationScalingPolicy"
```

使用下列範例建立 HAP，將預先定義的指標或自訂指標套用至一個或多個端點。

#### 範例 1：將預先定義的指標套用至單一端點變體
<a name="kubernetes-hap-predefined-metric"></a>

1. 使用下列命令，下載預先定義指標的範例 YAML 檔案：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/hap-predefined-metric.yaml
   ```

1. 編輯 YAML 檔案以指定 `endpointName`、`variantName`、和 `Region`。

1. 使用下列其中一個命令，將預先定義的指標套用至單一資源 ID (端點名稱和變體名稱組合)。

   叢集範圍的安裝：

   ```
   kubectl apply -f hap-predefined-metric.yaml
   ```

   命名空間範圍的安裝：

   ```
   kubectl apply -f hap-predefined-metric.yaml -n <NAMESPACE>
   ```

#### 範例 2：將自訂指標套用至單一端點變體
<a name="kubernetes-hap-custom-metric"></a>

1. 使用下列命令，下載自訂指標的範例 YAML 檔案：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/hap-custom-metric.yaml
   ```

1. 編輯 YAML 檔案以指定 `endpointName`、`variantName`、和 `Region`。

1. 使用下列其中一個命令，將自訂指標套用至單一資源 ID (端點名稱和變體名稱組合)，以取代建議的 `SageMakerVariantInvocationsPerInstance`。
**注意**  
Amazon SageMaker AI 不會檢查 YAML 規格的有效性。

   叢集範圍的安裝：

   ```
   kubectl apply -f hap-custom-metric.yaml
   ```

   命名空間範圍的安裝：

   ```
   kubectl apply -f hap-custom-metric.yaml -n <NAMESPACE>
   ```

#### 範例 3：將擴展政策套用至多個端點和變體
<a name="kubernetes-hap-scaling-policy"></a>

您可以使用 HAP 運算子將相同的資源調度政策套用至多個資源 ID。系統會針對每個資源 ID (端點名稱和變體名稱組合) 建立單獨的 `scaling_policy` 要求。

1. 使用下列命令，下載預先定義指標的範例 YAML 檔案：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/hap-predefined-metric.yaml
   ```

1. 編輯 YAML 檔案以指定`Region` 和多個 `endpointName` 與 `variantName`值。

1. 使用下列其中一個命令，將預先定義的指標套用至多個資源 ID (端點名稱和變體名稱組合)。

   叢集範圍的安裝：

   ```
   kubectl apply -f hap-predefined-metric.yaml
   ```

   命名空間範圍的安裝：

   ```
   kubectl apply -f hap-predefined-metric.yaml -n <NAMESPACE>
   ```

#### 針對多個端點和變體的 HostingAutoscalingPolicies 考量事項
<a name="kubernetes-hap-scaling-considerations"></a>

使用多個資源 ID 時有下列考量：
+ 如果您在多個資源 ID 上套用單一政策，則系統會針對每個資源 ID 建立一個 PolicyARN。五個端點有五個 PolicyARN。當您對政策執行 `describe` 命令時，回應會顯示為一項工作，並包含單一任務狀態。
+ 如果您將自訂指標套用至多個資源 ID，則所有資源 ID (變體) 值都會使用相同的維度或值。例如，如果您針對執行個體 1-5 套用自訂指標，且端點變體維度已對應到變體 1，則當變體 1 超過指標時，所有端點都會縱向擴展或縮減規模。
+ HAP 運算子支援更新資源 ID 清單。如果您修改、新增或刪除規格的資源 ID，則自動擴展資源政策會從先前一的變體清單中移除，並套用至新指定的資源 ID 組合。使用 [https://docs.aws.amazon.com/sagemaker/latest/dg/kubernetes-hap-operator.html#kubernetes-hap-describe](https://docs.aws.amazon.com/sagemaker/latest/dg/kubernetes-hap-operator.html#kubernetes-hap-describe) 命令列出目前套用政策的資源 ID。

### 列出 HostingAutoscalingPolicies
<a name="kubernetes-hap-list"></a>

使用下列其中一個命令來列出使用 HAP 運算子建立的所有 HostingAutoscalingPolicies (HAP)。

叢集範圍的安裝：

```
kubectl get hap
```

命名空間範圍的安裝：

```
kubectl get hap -n <NAMESPACE>
```

您的輸出應該類似以下內容：

```
NAME             STATUS   CREATION-TIME
hap-predefined   Created  2021-07-13T21:32:21Z
```

使用下列命令來檢查 HostingAutoscalingPolicy (HAP) 的狀態。

```
kubectl get hap <job-name>
```

系統會傳回下列其中一個值：
+ `Reconciling` – 某些類型的錯誤會將狀態顯示為 `Reconciling` 而非 `Error`。範例包括伺服器端錯誤和處於 `Creating` 或 `Updating` 狀態的端點。如需更多詳細資訊，請查看狀態或運算子日誌中的 `Additional` 欄位。
+ `Created`
+ `Error`

**檢視您套用政策的自動擴展端點**

1. 開啟 Amazon SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左側面板中，展開**推論**。

1. 選擇**端點**。

1. 選取感興趣的端點名稱。

1. 捲動至**端點執行期設定**區段。

### 描述 HostingAutoscalingPolicy
<a name="kubernetes-hap-describe"></a>

使用下列命令可取得與 HostingAutoscalingPolicy (HAP) 相關的詳細資料。這些命令通常用於對問題進行偵錯或檢查 HAP 的資源 ID (端點名稱和變體名稱組合)。

```
kubectl describe hap <job-name>
```

### 更新 HostingAutoscalingPolicy
<a name="kubernetes-hap-update"></a>

HostingAutoscalingPolicy (HAP) 運算子支援更新。您可以編輯 YAML 規格以變更值，然後重新套用政策。HAP 運算子會刪除現有政策並套用新政策。

### 刪除 HostingAutoscalingPolicy
<a name="kubernetes-hap-delete"></a>

使用下列其中一個命令來刪除 HostingAutoscalingPolicy (HAP) 政策。

叢集範圍的安裝：

```
kubectl delete hap hap-predefined
```

命名空間範圍的安裝：

```
kubectl delete hap hap-predefined -n <NAMESPACE>
```

此命令會刪除擴展政策，並從 Kubernetes 取消註冊擴展目標。此命令會傳回下列輸出：

```
hostingautoscalingpolicies.sagemaker.aws.amazon.com "hap-predefined" deleted
```

### 使用 HostingAutoscalingPolicy 更新或刪除端點
<a name="kubernetes-hap-update-delete-endpoint"></a>

若要更新具有 HostingAutoscalingPolicy (HAP) 的端點，請使用 `kubectl` `delete` 命令移除 HAP、更新端點，然後重新套用 HAP。

若要刪除具有 HAP 的端點，請先使用 `kubectl` `delete` 命令移除 HAP，然後再刪除端點。