

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

# SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators"></a>

SageMaker AI Operators for Kubernetes 可讓使用 Kubernetes 的開發人員和資料科學家更輕鬆地在 SageMaker AI 中訓練、調整和部署機器學習 (ML) 模型。您可以在 Amazon Elastic Kubernetes Service (Amazon EKS) 的 Kubernetes 叢集上安裝這些 SageMaker AI Operators，以使用 Kubernetes API 和命令列 Kubernetes 工具 (例如 `kubectl`) 原生建立 SageMaker AI 任務。本指南展示如何設定和使用運算子，以透過 Kubernetes 叢集在 SageMaker AI 上執行模型訓練、超參數調整或推論 (即時和批次)。本章中的程序和準則假設您熟悉 Kubernetes 及其基本命令。

**重要**  
我們正在停止對 [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)

**注意**  
使用這些運算子無須額外收費。透過這些運算子使用的任何 SageMaker AI 資源都會產生費用。

## 什麼是運算子？
<a name="kubernetes-sagemaker-operators-overview"></a>

Kubernetes 運算子是一種應用程式控制器，代表 Kubernetes 使用者管理應用程式。控制平面的控制器包括各種控制迴圈，這些迴圈監聽中央狀態管理器 (ETCD) 的指令來調節它們控制的應用程式的狀態。這類應用程式的範例包含 [Cloud-controller-manager](https://kubernetes.io/docs/concepts/architecture/cloud-controller/) 和 `[kube-controller-manager](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/)`。運算子通常提供比原始 Kubernetes API 更高層級的抽象，方便使用者更輕鬆地部署和管理應用程式。若要將新功能新增至 Kubernetes，開發人員可以建立包含其應用程式特定或網域特定邏輯和元件的**自訂資源**來擴充 Kubernetes API。Kubernetes 中的運算子可讓使用者以原生方式調用這些自訂資源，並自動執行相關聯的工作流程。

### Kubernetes (ACK) 的 AWS 控制器如何運作？
<a name="kubernetes-sagemaker-operators-explained"></a>

SageMaker AI Operators for Kubernetes 讓您可以透過 Kubernetes 叢集管理 SageMaker AI 中的任務。SageMaker AI Operators for Kubernetes 的最新版本是以 AWS Controllers for Kubernetes (ACK) 為基礎。ACK 包含常見的控制器執行時間、程式碼產生器，以及一組 AWS 服務特定的控制器，其中一個是 SageMaker AI 控制器。

下圖說明 ACK 的工作原理。

![\[解釋 ACK 型 SageMaker AI Operator for Kubernetes。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-ack-controller.png)


在此圖中，Kubernetes 使用者想要使用 Kubernetes API，透過 Kubernetes 叢集在 SageMaker AI 上執行模型訓練。使用者呼叫 `kubectl apply`，並傳入用於描述 SageMaker 訓練工作之 Kubernetes 自訂資源的一個檔案。`kubectl apply` 將此檔案 (稱為資訊清單) 傳遞至 Kubernetes 控制器節點 (工作流程圖表中的第 *1* 步) 中執行的 Kubernetes API 伺服器。Kubernetes API 伺服器會接收具有 SageMaker 訓練工作規格的資訊清單，並決定使用者是否具有建立 `sageMaker.services.k8s.aws/TrainingJob` 類型自訂資源的許可，以及自訂資源是否已正確格式化 (第 *2* 步)。如果使用者獲得授權且自訂資源有效，Kubernetes API 伺服器會將自訂資源寫入 (第 *3* 步) 至其 etcd 資料存放區，然後回應 (第 *4* 步) 建立自訂資源的使用者。SageMaker AI 控制器 (在一般 Kubernetes Pod 上下文中的 Kubernetes 工作節點上執行) 會收到通知 (步驟 *5*)，告知已建立 `sageMaker.services.k8s.aws/TrainingJob` 類型的新自訂資源。接著，SageMaker AI 控制器會與 SageMaker API 進行通訊 (第 *6* 步)，呼叫 SageMaker AI `CreateTrainingJob` API 以在 AWS中建立訓練任務。與 SageMaker API 通訊後，SageMaker AI 控制器會呼叫 Kubernetes API 伺服器，以使用從 SageMaker 接收到的資訊更新 (步驟 *7*) 自訂資源的狀態。因此，SageMaker AI 控制器會向開發人員提供與使用 AWS SDK 時相同的資訊。

### 權限概觀
<a name="kubernetes-sagemaker-operators-authentication"></a>

運算子代表您存取 SageMaker AI 資源。運算子擔任與 AWS 資源互動的 IAM 角色與您用來存取 Kubernetes 叢集的登入資料不同。該角色也與執行機器學習任務時 AWS 擔任的角色不同。

下列影像說明了各種驗證層。

![\[SageMaker AI Operator for Kubernetes 的各種驗證層。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-authentication.png)


# 最新 SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-ack"></a>

本節以使用 AWS Controllers for Kubernetes (ACK) 的最新版本 SageMaker AI Operators for Kubernetes 為基礎。

**重要**  
如果您目前使用的是 [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)

[SageMaker AI Operators for Kubernetes ](https://github.com/aws-controllers-k8s/sagemaker-controller)的最新版本是以 [AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/ ) 為基礎，這是用於建置 Kubernetes 自訂控制器的架構，其中每個控制器都會與服務 AWS API 通訊。這些控制器可讓 Kubernetes 使用者使用 Kubernetes API 佈建 AWS 資源，例如資料庫或訊息佇列。

使用下列步驟安裝和使用 ACK，透過 Amazon SageMaker AI 訓練、調整和部署機器學習模型。

**Topics**
+ [

## 安裝 SageMaker AI Operators for Kubernetes
](#kubernetes-sagemaker-operators-ack-install)
+ [

## 使用 SageMaker AI Operators for Kubernetes
](#kubernetes-sagemaker-operators-ack-use)
+ [

## 參考資料
](#kubernetes-sagemaker-operators-ack-reference)

## 安裝 SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-ack-install"></a>

若要設定 SageMaker AI Operators for Kubernetes 的最新可用版本，請參閱[使用 ACK SageMaker AI 控制器進行機器學習](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)中的*設定*章節。

## 使用 SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-ack-use"></a>

如需有關如何透過 Amazon EKS 使用適用於 Amazon SageMaker AI 的 ACK 服務控制器訓練機器學習模型的教學課程，請參閱[使用 ACK SageMaker AI 控制器進行機器學習](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)。

如需自動擴展範例，請參閱[使用應用程式自動擴展來擴展 SageMaker AI 工作負載](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)

## 參考資料
<a name="kubernetes-sagemaker-operators-ack-reference"></a>

另請參閱[適用於 Amazon SageMaker AI 的 ACK 服務控制器 GitHub 儲存庫](https://github.com/aws-controllers-k8s/sagemaker-controller)或閱讀[適用於 Kubernetes 的AWS 控制器文件](https://aws-controllers-k8s.github.io/community/docs/community/overview/)。

# 舊版 SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-end-of-support"></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)

**Topics**
+ [

## 安裝 SageMaker AI Operators for Kubernetes
](#kubernetes-sagemaker-operators-eos-install)
+ [

# 使用 Amazon SageMaker AI 任務
](kubernetes-sagemaker-jobs.md)
+ [

# 將資源遷移到最新的運算子
](kubernetes-sagemaker-operators-migrate.md)
+ [

# 宣布終止支援 SageMaker AI Operators for Kubernetes 原始版本
](kubernetes-sagemaker-operators-eos-announcement.md)

## 安裝 SageMaker AI Operators for Kubernetes
<a name="kubernetes-sagemaker-operators-eos-install"></a>

使用下列步驟安裝和使用 SageMaker AI Operators for Kubernetes，透過 Amazon SageMaker AI 訓練、調整和部署機器學習模型。

**Topics**
+ [

### IAM 角色型設定和運算子部署
](#iam-role-based-setup-and-operator-deployment)
+ [

### 清除資源
](#cleanup-operator-resources)
+ [

### 刪除運算子
](#delete-operators)
+ [

### 故障診斷
](#troubleshooting)
+ [

### 每個區域的映像和 SMLog
](#images-and-smlogs-in-each-region)

### IAM 角色型設定和運算子部署
<a name="iam-role-based-setup-and-operator-deployment"></a>

以下各節說明設定和部署原始版本運算子的步驟。

**警告**  
**提醒：**下列步驟不會安裝 SageMaker AI Operators for Kubernetes 的最新版本。若要安裝新 ACK 型 SageMaker AI Operators for Kubernetes，請參閱[最新 SageMaker AI Operators for Kubernetes](kubernetes-sagemaker-operators-ack.md)。

#### 先決條件
<a name="prerequisites"></a>

本指南假設已完成下列先決條件：
+ 在用來存取 Kubernetes 叢集的用戶端電腦上安裝下列工具：
  + [https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) 1.13 版本或更新版本。使用 `kubectl` 版本，必須與 Amazon EKS 叢集控制平面的版本差距在一個版本以內。例如，1.13 `kubectl` 用戶端可搭配使用 Kubernetes 1.13 和 1.14 版叢集。早於 1.13 的版本不支援 OpenID Connect (OIDC)。
  + [https://github.com/weaveworks/eksctl](https://github.com/weaveworks/eksctl) 0.7.0 版本或更新版本 
  + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) 1.16.232 版或更新版本 
  + (可選) [Helm](https://helm.sh/docs/intro/install/) 3.0 版本或更新版本 
  + [aws-iam-authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html) 
+ 擁有建立角色並將政策附加至角色的 IAM 許可。
+ 已建立要在其上執行運算子的 Kubernetes 叢集。應該是 Kubernetes 版本 1.13 或 1.14。對於使用 `eksctl` 自動建立的叢集，請參閱[eksctl 入門](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)。佈建叢集需要 20–30 分鐘才能完成。

#### 叢集範圍部署
<a name="cluster-scoped-deployment"></a>

使用 IAM 角色部署運算子之前，請先將 OpenID Connect (OIDC) 身分提供者 (IdP) 與您的角色建立關聯，以便透過 IAM 服務進行驗證。

##### 為您的叢集建立 OIDC 身分提供者
<a name="create-an-openid-connect-provider-for-your-cluster"></a>

下列指示展示如何建立 OIDC 提供者，並將其與您的 Amazon EKS 叢集相關聯。

1. 設定本機 `CLUSTER_NAME` 和 `AWS_REGION` 環境變數，如下所示：

   ```
   # Set the Region and cluster
   export CLUSTER_NAME="<your cluster name>"
   export AWS_REGION="<your region>"
   ```

1. 使用下列命令將 OIDC 提供者與叢集相關聯。如需詳細資訊，請參閱[為叢集上的服務帳戶啟用 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)。

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
         --region ${AWS_REGION} --approve
   ```

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

   ```
   [_]  eksctl version 0.10.1
     [_]  using region us-east-1
     [_]  IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"
   ```

現在叢集具有 OIDC 身分提供者，您可以建立角色，並授與 Kubernetes 服務帳戶許可來擔任該角色。

##### 取得 OIDC ID
<a name="get-the-oidc-id"></a>

若要設定服務帳戶，請使用下列命令取得 OIDC 發行者 URL：

```
aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \
      --query cluster.identity.oidc.issuer --output text
```

此命令會傳回類似以下內容的 URL：

```
https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

在此 URL 中，值 `D48675832CA65BD10A532F597OIDCID` 為 OIDC ID。叢集的 OIDC ID 與此不同。您需要此 OIDC ID 值才能建立角色。

 如果您的輸出是 `None`，則意味著你的用戶端版本是舊的。若要解決此問題，請執行下列命令：

```
aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC
```

傳回的 OIDC URL 如下：

```
OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

##### 建立 IAM 角色
<a name="create-an-iam-role"></a>

1. 建立一個名為 `trust.json` 的檔案，並將以下信任關係代碼塊插入其中。請務必使用與叢集對應的值取代所有 `<OIDC ID>`、`<AWS account number>`和 `<EKS Cluster region>` 預留位置。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
               "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

1. 執行下列命令，以建立具有 `trust.json` 中定義的信任關係的角色。此角色可讓 Amazon EKS 叢集從 IAM 取得和重新整理登入資料。

   ```
   aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text
   ```

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

   ```
   ROLE    arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z    /       ABCDEFSFODNN7EXAMPLE   my-role
   ASSUMEROLEPOLICYDOCUMENT        2012-10-17		 	 	 
   STATEMENT       sts:AssumeRoleWithWebIdentity   Allow
   STRINGEQUALS    sts.amazonaws.com       system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default
   PRINCIPAL       arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/
   ```

    請注意 `ROLE ARN`；您會將此值傳遞給運算子。

##### 將 AmazonSageMakerFullAccess 政策附加到此角色
<a name="attach-the-amazonsagemakerfullaccess-policy-to-the-role"></a>

若要授予角色 SageMaker AI 的存取權，請附加 [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) 政策。如果想要限制運算子的權限，您可以建立並附加自訂政策。

 若要附加 `AmazonSageMakerFullAccess`，請執行下列命令：

```
aws iam attach-role-policy --role-name <role name>  --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
```

Kubernetes 服務帳戶 `sagemaker-k8s-operator-default` 應該具有 `AmazonSageMakerFullAccess` 許可。當您安裝運算子時，請確認這一點。

##### 部署運算子
<a name="deploy-the-operator"></a>

部署運算子時，您可以使用 YAML 檔案或 Helm Chart。

##### 使用 YAML 部署運算子
<a name="deploy-the-operator-using-yaml"></a>

這是部署運算子的最簡單方法。程序如下：

1. 使用以下命令下載安裝程式指令碼：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/installer.yaml
   ```

1. 編輯 `installer.yaml` 檔案以取代 `eks.amazonaws.com/role-arn`。將此處的 ARN 取代為您建立的 OIDC 型角色的 Amazon Resource Name (ARN)。

1. 使用下列命令部署叢集：

   ```
   kubectl apply -f installer.yaml
   ```

##### 使用 Helm Chart 部署運算子
<a name="deploy-the-operator-using-helm-charts"></a>

使用提供的 Helm Chart 安裝運算子。

1. 使用以下命令複製 Helm 安裝程式目錄：

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

1. 導覽至 `amazon-sagemaker-operator-for-k8s/hack/charts/installer` 資料夾。編輯 `rolebased/values.yaml` 檔案，其中包含圖表的高階參數。將此處的角色 ARN 取代為您建立的 OIDC 型角色的 Amazon Resource Name (ARN)。

1. 使用以下命令安裝 Helm Chart：

   ```
   kubectl create namespace sagemaker-k8s-operator-system
     helm install --namespace sagemaker-k8s-operator-system sagemaker-operator rolebased/
   ```

   如果您決定將運算子安裝到指定命名空間以外的其他命名空間，則需要調整 IAM 角色 `trust.json` 檔案中定義的命名空間，以確保命名空間相符。

1. 片刻之後，圖表會以隨機產生的名稱安裝。執行下列命令來驗證是否安裝成功：

   ```
   helm ls
   ```

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

   ```
   NAME                    NAMESPACE                       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
     sagemaker-operator      sagemaker-k8s-operator-system   1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
   ```

##### 驗證運算子部署
<a name="verify-the-operator-deployment"></a>

1. 您應該可以透過執行下列命令，查看部署至叢集的每個運算子的 SageMaker AI 自訂資源定義 (CRD)：

   ```
   kubectl get crd | grep sagemaker
   ```

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

   ```
   batchtransformjobs.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   endpointconfigs.sagemaker.aws.amazon.com            2019-11-20T17:12:34Z
   hostingdeployments.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   hyperparametertuningjobs.sagemaker.aws.amazon.com   2019-11-20T17:12:34Z
   models.sagemaker.aws.amazon.com                     2019-11-20T17:12:34Z
   trainingjobs.sagemaker.aws.amazon.com               2019-11-20T17:12:34Z
   ```

1. 確定運算子 pod 已成功執行。使用下列命令列出所有 pod：

   ```
   kubectl -n sagemaker-k8s-operator-system get pods
   ```

   您應該會看到命名空間 `sagemaker-k8s-operator-system` 中名為 `sagemaker-k8s-operator-controller-manager-*****` 的 pod，如下所示：

   ```
   NAME                                                         READY   STATUS    RESTARTS   AGE
   sagemaker-k8s-operator-controller-manager-12345678-r8abc     2/2     Running   0          23s
   ```

#### 命名空間範圍部署
<a name="namespace-scoped-deployment"></a>

您可以選擇在個別 Kubernetes 命名空間的範圍內安裝操作員。在此模式下，只有當資源是在該 SageMaker AI 命名空間內建立時，控制器才會監視並協調資源。這樣可以更好地控制由哪個控制器管理哪些資源。這對於部署到多個 AWS 帳戶或控制哪些使用者可以存取特定任務非常有用。

本指南概述如何將運算子安裝到預先定義的特定命名空間。若要將控制器部署到第二個命名空間，請從頭到尾遵循指南進行操作，並在每個步驟中變更命名空間。

##### 為您的 Amazon EKS 叢集建立 OIDC 身分提供者
<a name="create-an-openid-connect-provider-for-your-eks-cluster"></a>

下列指示展示如何建立 OIDC 提供者，並將其與您的 Amazon EKS 叢集相關聯。

1. 設定本機 `CLUSTER_NAME` 和 `AWS_REGION` 環境變數，如下所示：

   ```
   # Set the Region and cluster
   export CLUSTER_NAME="<your cluster name>"
   export AWS_REGION="<your region>"
   ```

1. 使用下列命令將 OIDC 提供者與叢集相關聯。如需詳細資訊，請參閱[為叢集上的服務帳戶啟用 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)。

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
         --region ${AWS_REGION} --approve
   ```

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

   ```
   [_]  eksctl version 0.10.1
     [_]  using region us-east-1
     [_]  IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"
   ```

現在叢集具有 OIDC 身分提供者，接下來建立角色，並授與 Kubernetes 服務帳戶許可來擔任該角色。

##### 取得 OIDC ID
<a name="get-your-oidc-id"></a>

若要設定服務帳戶，首先請使用下列命令取得 OpenID Connect 發行者 URL：

```
aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \
      --query cluster.identity.oidc.issuer --output text
```

此命令會傳回類似以下內容的 URL：

```
https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

在此 URL 中，值 D48675832CA65BD10A532F597OIDCID 為 OIDC ID。叢集的 OIDC ID 與此不同。您需要此 OIDC ID 值才能建立角色。

 如果您的輸出是 `None`，則意味著你的用戶端版本是舊的。若要解決此問題，請執行下列命令：

```
aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC
```

傳回的 OIDC URL 如下：

```
OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID
```

##### 建立 IAM 角色
<a name="create-your-iam-role"></a>

1. 建立一個名為 `trust.json` 的檔案，並將以下信任關係代碼塊插入其中。請務必使用與叢集對應的值取代所有 `<OIDC ID>`、`<AWS account number>`、`<EKS Cluster region>` 和 `<Namespace>` 預留位置。在本指南中，使用 `my-namespace` 作為 `<Namespace>` 的值。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
           "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:<Namespace>:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Federated": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"
           },
           "Action": "sts:AssumeRoleWithWebIdentity",
           "Condition": {
             "StringEquals": {
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",
                 "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:<Namespace>:sagemaker-k8s-operator-default"
             }
           }
         }
       ]
     }
   ```

------

1. 執行下列命令，以建立具有 `trust.json` 中定義的信任關係的角色。此角色可讓 Amazon EKS 叢集從 IAM 取得和重新整理登入資料。

   ```
   aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text
   ```

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

   ```
   ROLE    arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z    /       ABCDEFSFODNN7EXAMPLE   my-role
     ASSUMEROLEPOLICYDOCUMENT        2012-10-17		 	 	 
     STATEMENT       sts:AssumeRoleWithWebIdentity   Allow
     STRINGEQUALS    sts.amazonaws.com       system:serviceaccount:my-namespace:sagemaker-k8s-operator-default
     PRINCIPAL       arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/
   ```

請注意 `ROLE ARN`。您會將此值傳遞給運算子。

##### 將 AmazonSageMakerFullAccess 政策附加到您的角色
<a name="attach-the-amazonsagemakerfullaccess-policy-to-your-role"></a>

若要授予角色 SageMaker AI 的存取權，請附加 [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) 政策。如果想要限制運算子的權限，您可以建立並附加自訂政策。

 若要附加 `AmazonSageMakerFullAccess`，請執行下列命令：

```
aws iam attach-role-policy --role-name <role name>  --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
```

Kubernetes 服務帳戶 `sagemaker-k8s-operator-default` 應該具有 `AmazonSageMakerFullAccess` 許可。當您安裝運算子時，請確認這一點。

##### 將運算子部署到命名空間
<a name="deploy-the-operator-to-your-namespace"></a>

部署運算子時，您可以使用 YAML 檔案或 Helm Chart。

##### 使用 YAML 將運算子部署到命名空間
<a name="deploy-the-operator-to-your-namespace-using-yaml"></a>

在命名空間範圍內部署運算子分為兩個部分。第一部分是在叢集層級安裝的一組 CRD。每個 Kubernetes 叢集只需安裝一次這些資源定義。第二部分是運算子許可和部署本身。

 如果您尚未將 CRD 安裝到叢集中，請使用下列命令套用 CRD 安裝程式 YAML：

```
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml
```

將運算子安裝到叢集：

1. 使用以下命令下載運算子安裝程式：

   ```
   wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/operator.yaml
   ```

1. 使用下列命令更新安裝程式 YAML，以將資源放入指定的命名空間中：

   ```
   sed -i -e 's/PLACEHOLDER-NAMESPACE/<YOUR NAMESPACE>/g' operator.yaml
   ```

1. 編輯 `operator.yaml` 檔案以將資源放入您的 `eks.amazonaws.com/role-arn`。將此處的 ARN 取代為您建立的 OIDC 型角色的 Amazon Resource Name (ARN)。

1. 使用下列命令部署叢集：

   ```
   kubectl apply -f operator.yaml
   ```

##### 使用 Helm Chart 將運算子部署到命名空間
<a name="deploy-the-operator-to-your-namespace-using-helm-charts"></a>

在命名空間範圍內部署運算子需要分為兩個部分。第一部分是在叢集層級安裝的一組 CRD。每個 Kubernetes 叢集只需安裝一次這些資源定義。第二部分是運算子許可和部署本身。使用 Helm Chart 時，您必須首先使用 `kubectl` 建立命名空間。

1. 使用以下命令複製 Helm 安裝程式目錄：

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

1. 導覽至 `amazon-sagemaker-operator-for-k8s/hack/charts/installer/namespaced` 資料夾。編輯 `rolebased/values.yaml` 檔案，其中包含圖表的高階參數。將此處的角色 ARN 取代為您建立的 OIDC 型角色的 Amazon Resource Name (ARN)。

1. 使用以下命令安裝 Helm Chart：

   ```
   helm install crds crd_chart/
   ```

1. 建立必要的命名空間並使用下列命令安裝運算子：

   ```
   kubectl create namespace <namespace>
   helm install --n <namespace> op operator_chart/
   ```

1. 片刻之後，系統會以 `sagemaker-operator` 名稱安裝圖表。執行下列命令來驗證是否安裝成功：

   ```
   helm ls
   ```

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

   ```
   NAME                    NAMESPACE                       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
   sagemaker-operator      my-namespace                    1               2019-11-20 23:14:59.6777082 +0000 UTC   deployed        sagemaker-k8s-operator-0.1.0
   ```

##### 驗證運算子已部署到命名空間
<a name="verify-the-operator-deployment-to-your-namespace"></a>

1. 您應該可以透過執行下列命令，查看部署至叢集的每個運算子的 SageMaker AI 自訂資源定義 (CRD)：

   ```
   kubectl get crd | grep sagemaker
   ```

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

   ```
   batchtransformjobs.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   endpointconfigs.sagemaker.aws.amazon.com            2019-11-20T17:12:34Z
   hostingdeployments.sagemaker.aws.amazon.com         2019-11-20T17:12:34Z
   hyperparametertuningjobs.sagemaker.aws.amazon.com   2019-11-20T17:12:34Z
   models.sagemaker.aws.amazon.com                     2019-11-20T17:12:34Z
   trainingjobs.sagemaker.aws.amazon.com               2019-11-20T17:12:34Z
   ```

1. 確定運算子 pod 已成功執行。使用下列命令列出所有 pod：

   ```
   kubectl -n my-namespace get pods
   ```

   您應該會看到命名空間 `my-namespace` 中名為 `sagemaker-k8s-operator-controller-manager-*****` 的 pod，如下所示：

   ```
   NAME                                                         READY   STATUS    RESTARTS   AGE
   sagemaker-k8s-operator-controller-manager-12345678-r8abc     2/2     Running   0          23s
   ```

#### 安裝 SageMaker AI 日誌 `kubectl` 外掛程式
<a name="install-the-amazon-sagemaker-logs-kubectl-plugin"></a>

 作為 SageMaker AI Operators for Kubernetes 的一部分，您可以針對 `kubectl` 使用 `smlogs` [外掛程式](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/)。這允許使用 `kubectl` 串流 SageMaker AI CloudWatch 日誌。`kubectl` 必須安裝到您的 [PATH](http://www.linfo.org/path_env_var.html) 上。以下命令將二進位文件放置在主目錄中的 `sagemaker-k8s-bin` 目錄中，並將該目錄新增到您的 `PATH`。

```
export os="linux"
  
wget https://amazon-sagemaker-operator-for-k8s-us-east-1.s3.amazonaws.com/kubectl-smlogs-plugin/v1/${os}.amd64.tar.gz
tar xvzf ${os}.amd64.tar.gz
  
# Move binaries to a directory in your homedir.
mkdir ~/sagemaker-k8s-bin
cp ./kubectl-smlogs.${os}.amd64/kubectl-smlogs ~/sagemaker-k8s-bin/.
  
# This line adds the binaries to your PATH in your .bashrc.
  
echo 'export PATH=$PATH:~/sagemaker-k8s-bin' >> ~/.bashrc
  
# Source your .bashrc to update environment variables:
source ~/.bashrc
```

請使用下列命令驗證 `kubectl` 外掛程式的安裝是否正確：

```
kubectl smlogs
```

如果 `kubectl` 外掛程式已正確安裝，則輸出應與以下類似：

```
View SageMaker AI logs via Kubernetes
  
Usage:
  smlogs [command]
  
Aliases:
  smlogs, SMLogs, Smlogs
  
Available Commands:
  BatchTransformJob       View BatchTransformJob logs via Kubernetes
  TrainingJob             View TrainingJob logs via Kubernetes
  help                    Help about any command
  
Flags:
   -h, --help   help for smlogs
  
Use "smlogs [command] --help" for more information about a command.
```

### 清除資源
<a name="cleanup-operator-resources"></a>

若要從叢集中解除安裝運算子，您必須先確定從叢集中刪除所有 SageMaker AI 資源。不這樣做會導致運算子刪除操作掛起。執行下列命令來停止所有工作：

```
# Delete all SageMaker AI jobs from Kubernetes
kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com
kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com
kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com
kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com
```

您應該會看到類似下列的輸出：

```
$ kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com
trainingjobs.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted
  
$ kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com
hyperparametertuningjob.sagemaker.aws.amazon.com "xgboost-mnist-hpo" deleted
  
$ kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com
batchtransformjob.sagemaker.aws.amazon.com "xgboost-mnist" deleted
  
$ kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com
hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
```

刪除所有 SageMaker AI 任務後，請參閱[刪除運算子](#delete-operators)，以從叢集中刪除運算子。

### 刪除運算子
<a name="delete-operators"></a>

#### 刪除叢集型運算子
<a name="delete-cluster-based-operators"></a>

##### 使用 YAML 安裝的運算子
<a name="operators-installed-using-yaml"></a>

若要從叢集中解除安裝運算子，請確保已從叢集中刪除所有 SageMaker AI 資源。不這樣做會導致運算子刪除操作掛起。

**注意**  
刪除叢集之前，請務必刪除叢集中的所有 SageMaker AI 資源。如需詳細資訊，請參閱[清除資源](#cleanup-operator-resources)。

刪除所有 SageMaker AI 任務後，請使用 `kubectl`，以從叢集中刪除運算子：

```
# Delete the operator and its resources
kubectl delete -f /installer.yaml
```

您應該會看到類似下列的輸出：

```
$ kubectl delete -f raw-yaml/installer.yaml
namespace "sagemaker-k8s-operator-system" deleted
customresourcedefinition.apiextensions.k8s.io "batchtransformjobs.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "endpointconfigs.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "hostingdeployments.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "hyperparametertuningjobs.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "models.sagemaker.aws.amazon.com" deleted
customresourcedefinition.apiextensions.k8s.io "trainingjobs.sagemaker.aws.amazon.com" deleted
role.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-role" deleted
clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-role" deleted
clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-role" deleted
rolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-rolebinding" deleted
clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-rolebinding" deleted
clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-rolebinding" deleted
service "sagemaker-k8s-operator-controller-manager-metrics-service" deleted
deployment.apps "sagemaker-k8s-operator-controller-manager" deleted
secrets "sagemaker-k8s-operator-abcde" deleted
```

##### 使用 Helm Chart 安裝的運算子
<a name="operators-installed-using-helm-charts"></a>

若要刪除運算子 CRD，請先刪除所有執行中的工作。然後使用以下命令刪除用於部署運算子的 Helm Chart：

```
# get the helm charts
helm ls
  
# delete the charts
helm delete <chart_name>
```

#### 刪除命名空間型運算子
<a name="delete-namespace-based-operators"></a>

##### 使用 YAML 安裝的運算子
<a name="operators-installed-with-yaml"></a>

若要從叢集中解除安裝運算子，首先請確保已從叢集中刪除所有 SageMaker AI 資源。不這樣做會導致運算子刪除操作掛起。

**注意**  
刪除叢集之前，請務必刪除叢集中的所有 SageMaker AI 資源。如需詳細資訊，請參閱[清除資源](#cleanup-operator-resources)。

刪除所有 SageMaker AI 任務後，請首先使用 `kubectl` 從命名空間刪除運算子，然後從叢集中刪除 CRD。執行下列命令以從叢集中刪除運算子：

```
# Delete the operator using the same yaml file that was used to install the operator
kubectl delete -f operator.yaml
  
# Now delete the CRDs using the CRD installer yaml
kubectl delete -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml
  
# Now you can delete the namespace if you want
kubectl delete namespace <namespace>
```

##### 使用 Helm Chart 安裝的運算子
<a name="operators-installed-with-helm-charts"></a>

若要刪除運算子 CRD，請先刪除所有執行中的工作。然後使用以下命令刪除用於部署運算子的 Helm Chart：

```
# Delete the operator
helm delete <chart_name>
  
# delete the crds
helm delete crds
  
# optionally delete the namespace
kubectl delete namespace <namespace>
```

### 故障診斷
<a name="troubleshooting"></a>

#### 對失敗的工作進行偵錯
<a name="debugging-a-failed-job"></a>

請使用這些步驟來對失敗的工作進行偵錯。
+ 以執行下列命令來檢查工作狀態：

  ```
  kubectl get <CRD Type> <job name>
  ```
+ 如果任務是在 SageMaker AI 中建立的，您可以使用下列命令來查看 `STATUS` 和 `SageMaker Job Name`：

  ```
  kubectl get <crd type> <job name>
  ```
+ 您可以使用以下命令，透過 `smlogs` 來查找問題的原因：

  ```
  kubectl smlogs <crd type> <job name>
  ```
+  您也可以使用下列命令，透過 `describe` 來取得與作業相關的詳細資料。輸出中有一個 `additional` 欄位，其中包含有關工作狀態的詳細資訊。

  ```
  kubectl describe <crd type> <job name>
  ```
+ 如果未在 SageMaker AI 中建立任務，請使用運算子 Pod 的日誌來尋找問題的原因，如下所示：

  ```
  $ kubectl get pods -A | grep sagemaker
  # Output:
  sagemaker-k8s-operator-system   sagemaker-k8s-operator-controller-manager-5cd7df4d74-wh22z   2/2     Running   0          3h33m
    
  $ kubectl logs -p <pod name> -c manager -n sagemaker-k8s-operator-system
  ```

#### 刪除運算子 CRD
<a name="deleting-an-operator-crd"></a>

如果刪除工作失敗，請檢查運算子是否正在執行。如果運算子沒有執行，則您必須執行以下步驟刪除終結器：

1. 在新的終端機中，使用 `kubectl edit` 在編輯器中打開工作，如下所示：

   ```
   kubectl edit <crd type> <job name>
   ```

1. 透過從檔案中移除以下兩行來編輯工作，以刪除終結器。儲存檔案，該作業將被刪除。

   ```
   finalizers:
     - sagemaker-operator-finalizer
   ```

### 每個區域的映像和 SMLog
<a name="images-and-smlogs-in-each-region"></a>

下表列出每個區域中可用的運算子映像和 SMlog。


|  區域  |  控制器映像  |  Linux Smlog  | 
| --- | --- | --- | 
|  us-east-1  |  957583890962.dkr.ecr.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 
|  us-east-2  |  922499468684.dkr.ecr.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 
|  us-west-2  |  640106867763.dkr.ecr.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-west-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-west-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 
|  eu-west-1  |  613661167059.dkr.ecr.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1  |  [https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz](https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz)  | 

# 使用 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，然後再刪除端點。

# 將資源遷移到最新的運算子
<a name="kubernetes-sagemaker-operators-migrate"></a>

我們正在停止對 [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 Kubernetes 專用控制器 (ACK)](https://aws-controllers-k8s.github.io/community/) 為基礎。

如需與終止支援 SageMaker Operators for Kubernetes 原始版本相關的常見問題的答案，請參閱[宣布終止支援 SageMaker AI Operators for Kubernetes 原始版本](kubernetes-sagemaker-operators-eos-announcement.md)

使用下列步驟遷移您的資源，並使用 ACK 搭配 Amazon SageMaker AI 訓練、調整和部署機器學習模型。

**注意**  
最新版本的 SageMaker AI Operators for Kubernetes 不具回溯相容性。

**Topics**
+ [

## 先決條件
](#migrate-resources-to-new-operators-prerequisites)
+ [

## 採用資源
](#migrate-resources-to-new-operators-steps)
+ [

## 清除舊資源
](#migrate-resources-to-new-operators-cleanup)
+ [

## 使用新版 SageMaker AI Operators for Kubernetes
](#migrate-resources-to-new-operators-tutorials)

## 先決條件
<a name="migrate-resources-to-new-operators-prerequisites"></a>

若要成功將資源遷移至最新版本的 SageMaker AI Operators for Kubernetes，您必須執行下列操作：

1. 安裝最新的 SageMaker AI Operators for Kubernetes。如需逐步指示，請參閱 *使用 ACK SageMaker AI 控制器進行機器學習*中的[設定](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)。

1. 如果您正在使用 [HostingAutoscalingPolicy 資源](#migrate-resources-to-new-operators-hap)，請安裝新的應用程式自動擴展運算子。如需逐步指示，請參閱*使用應用程式自動擴展來擴展 SageMaker AI 工作負載*中的[設定](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/#setup)。如果您不使用 HostingAutoScalingPolicy 資源，則此步驟為選用步驟。

如果許可設定正確，則 ACK SageMaker AI 服務控制器可以判斷 AWS 資源的規格和狀態，並協調資源，就像 ACK 控制器最初建立它一樣。

## 採用資源
<a name="migrate-resources-to-new-operators-steps"></a>

新版 SageMaker AI Operators for Kubernetes 能夠採用原本不是由 ACK 服務控制器建立的資源。如需詳細資訊，請參閱 ACK 文件中的[採用現有 AWS 資源](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/)。

下列步驟展示新版 SageMaker AI Operators for Kubernetes 如何採用現有的 SageMaker AI 端點。將下列範例儲存為名為 `adopt-endpoint-sample.yaml` 的檔案。

```
apiVersion: services.k8s.aws/v1alpha1
kind: AdoptedResource
metadata:
  name: adopt-endpoint-sample
spec:  
  aws:
    # resource to adopt, not created by ACK
    nameOrID: xgboost-endpoint
  kubernetes:
    group: sagemaker.services.k8s.aws
    kind: Endpoint
    metadata:
      # target K8s CR name
      name: xgboost-endpoint
```

使用 `kubectl apply` 提交自訂資源 (CR)：

```
kubectl apply -f adopt-endpoint-sample.yaml
```

使用 `kubectl describe` 檢查所採用資源的狀態條件。

```
kubectl describe adoptedresource adopt-endpoint-sample
```

確認 `ACK.Adopted` 條件為 `True`。輸出應類似以下範例：

```
---
kind: AdoptedResource
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: '{"apiVersion":"services.k8s.aws/v1alpha1","kind":"AdoptedResource","metadata":{"annotations":{},"name":"xgboost-endpoint","namespace":"default"},"spec":{"aws":{"nameOrID":"xgboost-endpoint"},"kubernetes":{"group":"sagemaker.services.k8s.aws","kind":"Endpoint","metadata":{"name":"xgboost-endpoint"}}}}'
  creationTimestamp: '2021-04-27T02:49:14Z'
  finalizers:
  - finalizers.services.k8s.aws/AdoptedResource
  generation: 1
  name: adopt-endpoint-sample
  namespace: default
  resourceVersion: '12669876'
  selfLink: "/apis/services.k8s.aws/v1alpha1/namespaces/default/adoptedresources/adopt-endpoint-sample"
  uid: 35f8fa92-29dd-4040-9d0d-0b07bbd7ca0b
spec:
  aws:
    nameOrID: xgboost-endpoint
  kubernetes:
    group: sagemaker.services.k8s.aws
    kind: Endpoint
    metadata:
      name: xgboost-endpoint
status:
  conditions:
  - status: 'True'
    type: ACK.Adopted
```

檢查您的資源是否存在於叢集中：

```
kubectl describe endpoints.sagemaker xgboost-endpoint
```

### HostingAutoscalingPolicy 資源
<a name="migrate-resources-to-new-operators-hap"></a>

`HostingAutoscalingPolicy` (HAP) 資源由多個應用程式自動擴展資源組成：`ScalableTarget` 和 `ScalingPolicy`。採用使用 ACK 的 HAP 資源時，請先安裝 [應用程式自動擴展控制器](https://github.com/aws-controllers-k8s/applicationautoscaling-controller)。要採用 HAP 資源，您需要採用 `ScalableTarget` 和 `ScalingPolicy` 資源。您可以在 `HostingAutoscalingPolicy` 資源 (`status.ResourceIDList`) 的狀態中找到這些資源的資源識別碼。

### HostingDeployment 資源
<a name="migrate-resources-to-new-operators-hosting-deployment"></a>

`HostingDeployment` 資源包含多個 SageMaker AI 資源：`Endpoint`、`EndpointConfig` 和每個 `Model`。如果您在 ACK 中採用 SageMaker AI 端點，則需要分別採用 `Endpoint`、`EndpointConfig` 和每個 `Model`。您可以在 `HostingDeployment` 資源 (`status.endpointName`、`status.endpointConfigName` 和 `status.modelNames`) 的狀態中找到 `Endpoint`、`EndpointConfig` 和 `Model` 名稱。

如需所有受支援 SageMaker AI 資源的清單，請參閱 [ACK API 參考](https://aws-controllers-k8s.github.io/community/reference/)。

## 清除舊資源
<a name="migrate-resources-to-new-operators-cleanup"></a>

新版 SageMaker AI Operators for Kubernetes 採用您的資源後，您可以解除安裝舊的運算子並清除舊資源。

### 第 1 步：解除安裝舊運算子
<a name="migrate-resources-to-new-operators-uninstall"></a>

若要解除安裝舊運算子，請參閱[刪除運算子](kubernetes-sagemaker-operators-end-of-support.md#delete-operators)。

**警告**  
刪除任何舊資源之前，請先解除安裝舊運算子。

### 第 2 步：移除終結器並刪除舊資源
<a name="migrate-resources-to-new-operators-delete-resources"></a>

**警告**  
刪除舊資源之前，請確定您已解除安裝舊運算子。

解除安裝舊操作符後，您必須明確移除終結器以刪除舊運算子資源。下列範例指令碼展示如何刪除指定命名空間中由舊運算子所管理的所有訓練工作。當新運算子採用其他資源時，您可以使用類似的模式來刪除其他資源。

**注意**  
您必須使用完整的資源名稱才能取得資源。例如，使用 `kubectl get trainingjobs.sagemaker.aws.amazon.com` 代替 `kubectl get trainingjob`。

```
namespace=sagemaker_namespace
training_jobs=$(kubectl get trainingjobs.sagemaker.aws.amazon.com -n $namespace -ojson | jq -r '.items | .[] | .metadata.name')
 
for job in $training_jobs
do
    echo "Deleting $job resource in $namespace namespace"
    kubectl patch trainingjobs.sagemaker.aws.amazon.com $job -n $namespace -p '{"metadata":{"finalizers":null}}' --type=merge
    kubectl delete trainingjobs.sagemaker.aws.amazon.com $job -n $namespace
done
```

## 使用新版 SageMaker AI Operators for Kubernetes
<a name="migrate-resources-to-new-operators-tutorials"></a>

如需使用新版 SageMaker AI Operators for Kubernetes 的深度指南，請參閱[使用 SageMaker AI Operators for Kubernetes](kubernetes-sagemaker-operators-ack.md#kubernetes-sagemaker-operators-ack-use)

# 宣布終止支援 SageMaker AI Operators for Kubernetes 原始版本
<a name="kubernetes-sagemaker-operators-eos-announcement"></a>

本頁宣布終止支援 [SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s) 的原始版本，並提供常見問題的解答，以及有關 [Amazon SageMaker AI 專用 ACK 服務控制器](https://github.com/aws-controllers-k8s/sagemaker-controller) (完全受支援的新一代 SageMaker AI Operators for Kubernetes) 的遷移資訊。如需新版 SageMaker AI Operators for Kubernetes 的一般資訊，請參閱[最新 SageMaker AI Operators for Kubernetes](kubernetes-sagemaker-operators-ack.md)。

## 終止支援常見問答集
<a name="kubernetes-sagemaker-operators-eos-faq"></a>

**Topics**
+ [

### 我們為什麼要終止支援 SageMaker AI Operators for Kubernetes 的原始版本？
](#kubernetes-sagemaker-operators-eos-faq-why)
+ [

### 我可以在哪裡找到新版 SageMaker AI Operators for Kubernetes 和 ACK 的詳細資訊？
](#kubernetes-sagemaker-operators-eos-faq-more)
+ [

### 終止支援 (EOS) 是什麼意思？
](#kubernetes-sagemaker-operators-eos-faq-definition)
+ [

### 如何將工作負載遷移至新版 SageMaker AI Operators for Kubernetes，以進行訓練和推論？
](#kubernetes-sagemaker-operators-eos-faq-how)
+ [

### 我應該遷移至哪個版本的 ACK？
](#kubernetes-sagemaker-operators-eos-faq-version)
+ [

### 初始版本的 SageMaker AI Operators for Kubernetes 和新版運算子 (Amazon SageMaker AI 專用 ACK 服務控制器) 在功能上是否相同？
](#kubernetes-sagemaker-operators-eos-faq-parity)

### 我們為什麼要終止支援 SageMaker AI Operators for Kubernetes 的原始版本？
<a name="kubernetes-sagemaker-operators-eos-faq-why"></a>

使用者現在可以利用 [Amazon SageMaker AI 專用 ACK 服務控制器](https://github.com/aws-controllers-k8s/sagemaker-controller)。ACK 服務控制器是新一代 SageMaker AI Operators for Kubernetes，以 [AWS Controllers for Kubernetes ](https://aws-controllers-k8s.github.io/community/)(ACK) 為基礎，這是針對生產最佳化的社群驅動專案，標準化透過 Kubernetes Operator 公開 AWS 服務的方式。因此，我們宣布終止支援 (EOS) [SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s) 的原始版本 (非 ACK 型)。[Amazon Elastic Kubernetes Service Kubernetes 1.21](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html#kubernetes-release-calendar) 於 **2023 年 2 月 15 日**終止支援。

如需與 ACK 相關的更多資訊，請參閱 [ACK 歷史記錄和原則](https://aws-controllers-k8s.github.io/community/docs/community/background/)。

### 我可以在哪裡找到新版 SageMaker AI Operators for Kubernetes 和 ACK 的詳細資訊？
<a name="kubernetes-sagemaker-operators-eos-faq-more"></a>
+ 如需新版 SageMaker AI Operators for Kubernetes 的詳細資訊，請參閱 Amazon SageMaker AI 專用 [ACK 服務控制器 ](https://github.com/aws-controllers-k8s/sagemaker-controller)GitHub 儲存庫或閱讀 [Kubernetes 專用AWS 控制器文件](https://aws-controllers-k8s.github.io/community/docs/community/overview/)。
+ 如需有關如何使用 Amazon EKS 搭配 Amazon SageMaker AI 專用 ACK 服務控制器訓練機器學習模型的教學課程，請參閱此 [SageMaker AI 範例](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)。

  如需自動擴展範例，請參閱[使用應用程式自動擴展來擴展 SageMaker AI 工作負載](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)。
+ 如需與 AWS Kubernetes 專用控制器 (ACK) 相關的資訊，請參閱 [AWS Kubernetes 專用控制器](https://aws-controllers-k8s.github.io/community/) (ACK) 文件。
+ 如需受支援 SageMaker AI 資源的清單，請參閱 [ACK API 參考](https://aws-controllers-k8s.github.io/community/reference/)。

### 終止支援 (EOS) 是什麼意思？
<a name="kubernetes-sagemaker-operators-eos-faq-definition"></a>

雖然使用者可以繼續使用其當前的運算子，但我們不再為運算子開發新功能，也不會針對發現的任何問題發布任何修補程式或安全性更新。`v1.2.2` 是 [SageMaker AI Operators for Kubernetes](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master) 的最新版本。使用者應遷移其工作負載，以使用 [Amazon SageMaker AI 專用 ACK 服務控制器](https://github.com/aws-controllers-k8s/sagemaker-controller)。

### 如何將工作負載遷移至新版 SageMaker AI Operators for Kubernetes，以進行訓練和推論？
<a name="kubernetes-sagemaker-operators-eos-faq-how"></a>

如需將資源從舊版遷移至新版 SageMaker AI Operators for Kubernetes 的相關資訊，請遵循[將資源遷移到最新的運算子](kubernetes-sagemaker-operators-migrate.md)操作。

### 我應該遷移至哪個版本的 ACK？
<a name="kubernetes-sagemaker-operators-eos-faq-version"></a>

使用者應遷移至 [Amazon SageMaker AI 專用 ACK 服務控制器](https://github.com/aws-controllers-k8s/sagemaker-controller/tags)的最新版本。

### 初始版本的 SageMaker AI Operators for Kubernetes 和新版運算子 (Amazon SageMaker AI 專用 ACK 服務控制器) 在功能上是否相同？
<a name="kubernetes-sagemaker-operators-eos-faq-parity"></a>

是的，功能相同。

兩個版本之間的主要顯著差異包括：
+ ACK 型 SageMaker AI Operators for Kubernetes 使用的自訂資源定義 (CRD) 遵循 AWS API 定義，使其與原始版本中 SageMaker AI Operators for Kubernetes 的自訂資源規格不相容。請參閱新控制器中的 [CRD](https://github.com/aws-controllers-k8s/sagemaker-controller/tree/main/helm/crds)，或使用遷移指南來採用資源並使用新的控制器。
+ `Hosting Autoscaling` 政策不再是新版 SageMaker AI Operators for Kubernetes 中的一部分，而且已遷移至[應用程式自動擴展](https://github.com/aws-controllers-k8s/applicationautoscaling-controller) ACK 控制器。若要了解如何使用應用程式自動擴展控制器在 SageMaker AI 端點上設定自動擴展，請遵循此[自動擴展範例](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)。
+ `HostingDeployment` 資源用於在一個 CRD 中建立模型、端點組態和端點。新版 SageMaker AI Operators for Kubernetes 為每種資源提供個別的 CRD。