

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# SageMaker 适用于 Kubernetes 的人工智能运算符
<a name="kubernetes-sagemaker-operators"></a>

SageMaker Kubernetes 的人工智能运算符使使用 Kubernetes 的开发人员和数据科学家可以更轻松地在 AI 中训练、调整和部署机器学习 (ML) 模型。 SageMaker 你可以在 Amazon El SageMaker astic Kubernetes Service（Amazon EKS）的 Kubernetes 集群上安装这些 AI 运算符，以便使用 Kubernetes API 和命令行 Kubernetes 工具（例如 SageMaker ）在本地创建人工智能任务。`kubectl`本指南介绍如何设置和使用运算符从 Kubernetes 集群在 SageMaker AI 上运行模型训练、超参数调整或推理（实时和批量）。本章中的过程和指南假设您熟悉 Kubernetes 及其基本命令。

**重要**  
我们将停止对 [Kubernetes SageMaker 操作](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)员的原始版本的开发和技术支持。  
如果您当前使用的是 [Kubernetes SageMaker 操作员版本`v1.2.2`或更](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)低版本，我们建议您将资源迁移到适用于 Amazon 的 [ACK 服务控制](https://github.com/aws-controllers-k8s/sagemaker-controller)器。 SageMakerACK 服务控制器是基于 Kubernetes 控制[AWS 器 (ACK) 的新一代 Kuber](https://aws-controllers-k8s.github.io/community/) netes SageMaker 操作员。  
有关迁移步骤的信息，请参阅[将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)。  
有关终止对 Kubernetes SageMaker 操作员原始版本支持的常见问题解答，请参阅 [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

**注意**  
使用这些 Operator 无需额外付费。您通过这些运营商使用的任何 SageMaker AI 资源都会产生费用。

## 什么是 Operator？
<a name="kubernetes-sagemaker-operators-overview"></a>

Kubernetes Operator 是代表 Kubernetes 用户管理应用程序的应用程序控制器。控制面板的控制器包括各种控制回路，它们侦听中央状态管理器 (ETCD)，以调节其所控制的应用程序的状态。此类应用程序的示例包括 [C loud-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/)`。Operator 通常提供比原始 Kubernetes API 更高级别的抽象，使用户能够更轻松地部署和管理应用程序。要向 Kubernetes 添加新功能，开发人员可以通过创建**自定义资源**（包含其特定于应用程序或特定于域的逻辑和组件）来扩展 Kubernetes API。Kubernetes 中的 Operator 允许用户以原生方式调用这些自定义资源并自动执行关联的工作流。

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

Kubernetes SageMaker 的人工智能运算符允许你在 Kubernetes 集群中管理 SageMaker 人工智能中的作业。最新版本的 Kubernetes SageMaker 人工智能运算符基于适用于 Kubernetes 的 AWS 控制器 (ACK)。ACK 包括一个通用控制器运行时、一个代码生成器和一组 AWS 特定于服务的控制器，其中一个是 SageMaker AI 控制器。

下图说明了 ACK 的工作原理。

![\[基于 ACK 的 Kubernetes SageMaker 人工智能运算符解释道。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-ack-controller.png)


在这张图中，一个 Kubernetes 用户想要使用 Kubernetes AP SageMaker I 在 Kubernetes 集群内对 AI 运行模型训练。用户向发出调用`kubectl apply`，传入一个描述描述训练作业的 Kubernetes 自定义资源的文件。 SageMaker `kubectl apply`将这个名为清单的文件传递给在 Kubernetes 控制器节点中运行的 Kubernetes API 服务器（工作流程图中的步骤 *1*）。*Kubernetes API 服务器接收包含 SageMaker 训练作业规范的清单，并确定用户是否有权创建此类自定义资源`sageMaker.services.k8s.aws/TrainingJob`，以及自定义资源的格式是否正确（步骤 2）。*如果该用户已获授权且自定义资源有效，则 Kubernetes API 服务器会将自定义资源写入（步骤 *3*）其 etcd 数据存储，然后回复该用户（步骤 *4*），告知已创建自定义资源。在普通 Kubernetes Pod 环境下的 Kubernetes 工作节点上运行的 SageMaker AI 控制器会收到通知（步骤 *5*），告知已经创建了一个新的自定义资源。`sageMaker.services.k8s.aws/TrainingJob`然后， SageMaker AI 控制器与 SageMaker API 通信（步骤 *6*），调用 SageMaker AI `CreateTrainingJob` API 在中 AWS创建训练作业。与 SageMaker API 通信后， SageMaker AI 控制器调用 Kubernetes API 服务器，使用从 AI 收到的信息更新自定义资源的状态（步骤 *7*）。 SageMaker 因此， SageMaker AI 控制器向开发人员提供的信息与他们使用 AWS SDK 所获得的信息相同。

### 权限概述
<a name="kubernetes-sagemaker-operators-authentication"></a>

操作员代表您访问 SageMaker 人工智能资源。操作员扮演的与 AWS 资源交互的 IAM 角色与您用于访问 Kubernetes 集群的证书不同。该角色也不同于运行机器学习作业时所 AWS 扮演的角色。

下图说明了各种身份验证层。

![\[SageMaker 适用于 Kubernetes 的人工智能操作员各种身份验证层。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/k8s-orchestration/sagemaker-operators-for-kubernetes-authentication.png)


# 适用于 Kubernetes 的最新 SageMaker 人工智能运算符
<a name="kubernetes-sagemaker-operators-ack"></a>

本节基于使用适用于 Kubernetes 的 AWS 控制器 (ACK) 的 Kubernetes SageMaker 人工智能运算符的最新版本。

**重要**  
如果您当前使用的是 [Kubernetes SageMaker 操作员版本`v1.2.2`或更](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)低版本，我们建议您将资源迁移到适用于 Amazon 的 [ACK 服务控制](https://github.com/aws-controllers-k8s/sagemaker-controller)器。 SageMakerACK 服务控制器是基于 Kubernetes 控制[AWS 器 (ACK) 的新一代 Kuber](https://aws-controllers-k8s.github.io/community/) netes SageMaker 操作员。  
有关迁移步骤的信息，请参阅[将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)。  
有关终止对 Kubernetes SageMaker 操作员原始版本支持的常见问题解答，请参阅 [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

最新版本的 Kubernetes [SageMaker 人工智能运算符基于 Kubernetes AWS](https://github.com/aws-controllers-k8s/sagemaker-controller) [控制器 (ACK)，这是一个用于构建 Kubernetes](https://aws-controllers-k8s.github.io/community/ ) 自定义控制器的框架，其中每个控制器都与服务 API 通信。 AWS 这些控制器允许 Kubernetes 用户使用 Kubernetes API 预置数据库或消息队列等 AWS 资源。

使用以下步骤安装和使用 ACK 来训练、调整和部署带有 Amazon A SageMaker I 的机器学习模型。

**Topics**
+ [为 Kubernetes 安装 SageMaker 人工智能运算符](#kubernetes-sagemaker-operators-ack-install)
+ [为 Kubernetes 使用 SageMaker 人工智能运算符](#kubernetes-sagemaker-operators-ack-use)
+ [参考](#kubernetes-sagemaker-operators-ack-reference)

## 为 Kubernetes 安装 SageMaker 人工智能运算符
<a name="kubernetes-sagemaker-operators-ack-install"></a>

要设置适用于 Kubernetes 的 SageMaker AI Operators 的最新可用版本，请参阅使用 [ACK SageMaker 人工智能控制器进行机器学习](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)中的 “*设置*” 部分。

## 为 Kubernetes 使用 SageMaker 人工智能运算符
<a name="kubernetes-sagemaker-operators-ack-use"></a>

有关如何使用 Amazon EKS 使用适用于 Amazon A SageMaker I 的 ACK 服务控制器训练[机器学习模型的教程，请参阅使用 ACK SageMaker AI 控制器进行机器学习](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)。

有关自动缩放的示例，请参阅使用 App [lication Auto Scaling 扩展 SageMaker AI 工作负载](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)

## 参考
<a name="kubernetes-sagemaker-operators-ack-reference"></a>

另请参阅 [Amazon A SageMaker I GitHub 存储库的 ACK 服务控制器](https://github.com/aws-controllers-k8s/sagemaker-controller)或阅读 [Kubernetes AWS 控制器](https://aws-controllers-k8s.github.io/community/docs/community/overview/)文档。

# 适用于 Kubernetes 的老式 SageMaker AI 运算符
<a name="kubernetes-sagemaker-operators-end-of-support"></a>

本节基于适用于 [Kubernetes SageMaker 的人工智能运算符的原](https://github.com/aws/amazon-sagemaker-operator-for-k8s)始版本。

**重要**  
我们将停止对 [Kubernetes SageMaker 操作](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)员的原始版本的开发和技术支持。  
如果您当前使用的是 [Kubernetes SageMaker 操作员版本`v1.2.2`或更](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)低版本，我们建议您将资源迁移到适用于 Amazon 的 [ACK 服务控制](https://github.com/aws-controllers-k8s/sagemaker-controller)器。 SageMakerACK 服务控制器是基于 Kubernetes 控制[AWS 器 (ACK) 的新一代 Kuber](https://aws-controllers-k8s.github.io/community/) netes SageMaker 操作员。  
有关迁移步骤的信息，请参阅[将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)。  
有关终止对 Kubernetes SageMaker 操作员原始版本支持的常见问题解答，请参阅 [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

**Topics**
+ [为 Kubernetes 安装 SageMaker 人工智能运算符](#kubernetes-sagemaker-operators-eos-install)
+ [使用 Amazon A SageMaker I Jobs](kubernetes-sagemaker-jobs.md)
+ [将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)
+ [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

## 为 Kubernetes 安装 SageMaker 人工智能运算符
<a name="kubernetes-sagemaker-operators-eos-install"></a>

使用以下步骤安装和使用适用于 Kubernetes 的 SageMaker AI 运算符，通过 Amazon AI 训练、调整和部署机器学习模型。 SageMaker 

**Topics**
+ [基于 IAM 角色的设置和 Operator 部署](#iam-role-based-setup-and-operator-deployment)
+ [清理 资源](#cleanup-operator-resources)
+ [删除 Operator](#delete-operators)
+ [问题排查](#troubleshooting)
+ [每个区域 SMlogs 的图片和图片](#images-and-smlogs-in-each-region)

### 基于 IAM 角色的设置和 Operator 部署
<a name="iam-role-based-setup-and-operator-deployment"></a>

以下几节描述了设置和部署 Operator 原始版本的步骤。

**警告**  
**提醒：**以下步骤不会安装最新版本的 Kubernet SageMaker es 人工智能操作员。要安装基于 ACK 的全新 Kubernet SageMaker es 人工智能运算符，请参阅。[适用于 Kubernetes 的最新 SageMaker 人工智能运算符](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 或更高版本。使用您的 Amazon EKS 集群控制面板的一个次要版本内的 `kubectl` 版本。例如，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 权限。
+ 创建了一个用于运行 Operator 的 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>

请将 OpenID Connect (OIDC) 身份提供商 (IdP) 与您的角色关联，以便通过 IAM 服务进行身份验证，然后才能使用 IAM 角色部署 Operator。

##### 为集群创建 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 代入该角色的 ServiceAccount 权限。

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

要设置 ServiceAccount，请使用以下命令获取 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`；您将此值传递给您的 Operator。

##### 将 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)策略。如果您想限制 Operator 的权限，可以创建自己的自定义策略并附加该策略。

 要附加 `AmazonSageMakerFullAccess`，请运行以下命令：

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

Kubernetes ServiceAccount `sagemaker-k8s-operator-default` 应该拥有权限。`AmazonSageMakerFullAccess`安装 Operator 时请确认这一点。

##### 部署 Operator
<a name="deploy-the-operator"></a>

部署 Operator 时，您可以使用 YAML 文件或 Helm 图表。

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

这是部署 Operator 的最简单方法。流程如下：

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 资源名称 (ARN)。

1. 使用以下命令部署集群：

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

##### 使用 Helm 图表部署 Operator
<a name="deploy-the-operator-using-helm-charts"></a>

使用提供的 Helm 图表安装 Operator。

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 资源名称 (ARN)。

1. 使用以下命令安装 Helm 图表：

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

   如果您决定将 Operator 安装到指定的命名空间以外的命名空间，则需要调整 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
   ```

##### 验证 Operator 部署
<a name="verify-the-operator-deployment"></a>

1. 通过运行以下命令，您应该能够看到部署到集群的每个操作员的 SageMaker AI 自定义资源定义 (CRDs)：

   ```
   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. 确保 Operator 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 命名空间的范围内安装 Operator。在此模式下，如果资源是在该命名空间内创建的，则控制器仅监视和协调与 SageMaker AI 的资源。这样就能对哪个控制器管理哪个资源进行更精细的控制。这对于部署到多个 AWS 账户或控制哪些用户有权访问特定作业非常有用。

本指南概述了如何将 Operator 安装到特定的预定义命名空间中。要将控制器部署到第二个命名空间中，请从头到尾按照指南进行操作，并在每个步骤中更改命名空间。

##### 为 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 代入该角色的 ServiceAccount 权限。

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

要进行设置 ServiceAccount，请先使用以下命令获取 OpenID Connect 颁发者网址：

```
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 中，值 D48675832 CA65 BD10 A532F597OIDCID 是 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`。您将此值传递给您的 Operator。

##### 将 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)策略。如果您想限制 Operator 的权限，可以创建自己的自定义策略并附加该策略。

 要附加 `AmazonSageMakerFullAccess`，请运行以下命令：

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

Kubernetes ServiceAccount `sagemaker-k8s-operator-default` 应该拥有权限。`AmazonSageMakerFullAccess`安装 Operator 时请确认这一点。

##### 将 Operator 部署到您的命名空间
<a name="deploy-the-operator-to-your-namespace"></a>

部署 Operator 时，您可以使用 YAML 文件或 Helm 图表。

##### 使用 YAML 将 Operator 部署到您的命名空间
<a name="deploy-the-operator-to-your-namespace-using-yaml"></a>

在命名空间范围内部署 Operator 分为两个部分。第一个是在集群 CRDs 级别安装的一组。每个 Kubernetes 集群只需安装一次这些资源定义。第二部分是 Operator 权限和部署本身。

 如果您尚未将安装到集群 CRDs 中，请使用以下命令应用 CRD 安装程序 YAML：

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

要将 Operator 安装到集群上，请执行以下操作：

1. 使用以下命令下载 Operator 安装程序 YAML：

   ```
   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 资源名称 (ARN)。

1. 使用以下命令部署集群：

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

##### 使用 Helm 图表将 Operator 部署到您的命名空间
<a name="deploy-the-operator-to-your-namespace-using-helm-charts"></a>

在命名空间范围内部署 Operator 需要两个部分。第一个是在集群 CRDs 级别安装的一组。每个 Kubernetes 集群只需安装一次这些资源定义。第二部分是 Operator 权限和部署本身。使用 Helm 图表时，必须先使用 `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 资源名称 (ARN)。

1. 使用以下命令安装 Helm 图表：

   ```
   helm install crds crd_chart/
   ```

1. 使用以下命令创建所需的命名空间并安装 Operator：

   ```
   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
   ```

##### 验证 Operator 部署到您的命名空间
<a name="verify-the-operator-deployment-to-your-namespace"></a>

1. 通过运行以下命令，您应该能够看到部署到集群的每个操作员的 SageMaker AI 自定义资源定义 (CRDs)：

   ```
   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. 确保 Operator 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
   ```

#### 安装 A SageMaker I 日志`kubectl`插件
<a name="install-the-amazon-sagemaker-logs-kubectl-plugin"></a>

 [作为 Kubernetes SageMaker 人工智能运算符的一部分，你可以将该`smlogs`插件用于。](https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/) `kubectl`这允许使用 SageMaker AI CloudWatch 日志进行流式传输`kubectl`。 `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 资源。否则会导致 Operator 删除操作挂起。运行以下命令以停止所有作业：

```
# 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 作业后，请参阅[删除 Operator](#delete-operators)从集群中删除操作员。

### 删除 Operator
<a name="delete-operators"></a>

#### 删除基于集群的 Operator
<a name="delete-cluster-based-operators"></a>

##### 使用 YAML 安装的 Operator
<a name="operators-installed-using-yaml"></a>

要从集群中卸载操作员，请确保已从集群中删除所有 SageMaker AI 资源。否则会导致 Operator 删除操作挂起。

**注意**  
在删除集群之前，请务必从集群中删除所有 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 图表安装的 Operator
<a name="operators-installed-using-helm-charts"></a>

要删除操作员 CRDs，请先删除所有正在运行的作业。然后使用以下命令删除用于部署 Operator 的 Helm 图表：

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

#### 删除基于命名空间的 Operator
<a name="delete-namespace-based-operators"></a>

##### 使用 YAML 安装的 Operator
<a name="operators-installed-with-yaml"></a>

要从集群中卸载操作员，请先确保已从集群中删除所有 SageMaker AI 资源。否则会导致 Operator 删除操作挂起。

**注意**  
在删除集群之前，请务必从集群中删除所有 SageMaker AI 资源。请参阅[清理 资源](#cleanup-operator-resources)了解更多信息。

删除所有 SageMaker AI 作业后，使用`kubectl`先从命名空间中删除操作员，然后再从集群 CRDs 中删除运算符。运行以下命令以从集群中删除 Operator：

```
# 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 图表安装的 Operator
<a name="operators-installed-with-helm-charts"></a>

要删除操作员 CRDs，请先删除所有正在运行的作业。然后使用以下命令删除用于部署 Operator 的 Helm 图表：

```
# 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
  ```

#### 删除 Operator CRD
<a name="deleting-an-operator-crd"></a>

如果删除作业失败，请检查 Operator 是否正在运行。如果 Operator 未运行，则必须使用以下步骤删除终结器：

1. 在新终端中，使用 `kubectl edit` 在编辑器中打开作业，如下所示：

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

1. 编辑作业，通过从文件中删除以下两行来删除终结器。保存文件后，作业即被删除。

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

### 每个区域 SMlogs 的图片和图片
<a name="images-and-smlogs-in-each-region"></a>

下表列出了每个区域 SMLogs 中可用的操作员图像。


|  Region  |  控制器映像  |  Linu SMLogs  | 
| --- | --- | --- | 
|  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 A SageMaker I Jobs
<a name="kubernetes-sagemaker-jobs"></a>

本节基于适用于 [Kubernetes SageMaker 的人工智能运算符的原](https://github.com/aws/amazon-sagemaker-operator-for-k8s)始版本。

**重要**  
我们将停止对 [Kubernetes SageMaker 操作](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)员的原始版本的开发和技术支持。  
如果您当前使用的是 [Kubernetes SageMaker 操作员版本`v1.2.2`或更](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)低版本，我们建议您将资源迁移到适用于 Amazon 的 [ACK 服务控制](https://github.com/aws-controllers-k8s/sagemaker-controller)器。 SageMakerACK 服务控制器是基于 Kubernetes 控制[AWS 器 (ACK) 的新一代 Kuber](https://aws-controllers-k8s.github.io/community/) netes SageMaker 操作员。  
有关迁移步骤的信息，请参阅[将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)。  
有关终止对 Kubernetes SageMaker 操作员原始版本支持的常见问题解答，请参阅 [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

要使用 Kubernetes 的运算符运行 SageMaker Amazon AI 作业，你可以应用 YAML 文件或使用提供的 Helm Charts。

以下教程中的所有示例 Operator 作业都使用来自公共 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>

通过在 AI 中为你启动 SageMaker AI，训练作业操作员将你指定的训练作业规范与 SageMaker AI 进行协调。您可以在 SageMaker A [CreateTrainingJob I API 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTrainingJob.html)中了解有关 SageMaker 训练作业的更多信息。

**Topics**
+ [TrainingJob 使用 YAML 文件创建](#create-a-trainingjob-using-a-simple-yaml-file)
+ [TrainingJob 使用 Helm Chart 创建一个](#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)

### TrainingJob 使用 YAML 文件创建
<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>`和 A SageMaker I 执行角色`outputPath`具有写入权限的 Amazon S3 存储桶。`roleArn`必须拥有权限，这样 SageMaker AI 才能代表您访问 Amazon S3 CloudWatch、Amazon 和其他服务。有关创建 SageMaker AI 的更多信息 ExecutionRole，请参阅 [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
   ```

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

你可以使用 Helm Charts 来运行 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 才能代表您访问亚马逊 S3 CloudWatch、亚马逊和其他服务。有关创建 SageMaker AI 的更多信息 ExecutionRole，请参阅 [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 图表
<a name="verify-your-training-helm-chart"></a>

要验证 Helm 图表是否已成功创建，请运行：

```
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 资源以反映 AI 中作业的状态。 SageMaker 在工作期间使用的 SageMaker AI 资源会产生费用。作业完成或停止后，您无需支付任何费用。

**注意**： SageMaker AI 不允许你更新跑步训练作业。您不能编辑任何参数并重新应用配置文件。要么更改元数据名称，要么删除现有作业并创建新作业。与 Kubeflow TFJob 中现有的训练作业操作员类似，`update`不支持。

### 名单 TrainingJobs
<a name="list-training-jobs"></a>

使用以下命令列出使用 Kubernetes Operator 创建的所有作业：

```
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 人工智能资源产生任何费用。

#### TrainingJob 状态值
<a name="training-job-status-values"></a>

`STATUS` 字段可以是以下任一值：
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

这些状态直接来自 SageMaker A [I 官方 API 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeTrainingJob.html#SageMaker-DescribeTrainingJob-response-TrainingJobStatus)。

除了官方 SageMaker 的人工智能身份外，还有可能成`STATUS`为`SynchronizingK8sJobWithSageMaker`。这意味着 Operator 尚未处理该作业。

#### 次要状态值
<a name="secondary-status-values"></a>

次要状态直接来自 SageMaker A [I 官方 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 A SageMaker I 上的训练作业：

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

此命令会从 Kubernetes 中移除 SageMaker 训练作业。此命令将返回以下输出：

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

如果 SageMaker AI 上的作业仍在进行中，则该作业将停止。任务停止或完成后，您无需为 SageMaker 人工智能资源支付任何费用。

**注意**： SageMaker AI 不会删除训练作业。已停止的作业继续显示在 SageMaker AI 控制台上。该`delete`命令大约需要 2 分钟才能从 SageMaker AI 中清理资源。

## HyperParameterTuningJob 操作员
<a name="hyperparametertuningjobs-operator"></a>

超参数调优作业操作员通过在 AI 中启动您指定的超参数调整作业规范与 SageMaker AI 进行协调。 SageMaker 您可以在 AI [CreateHyperParameterTuningJob AP SageMaker I 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateHyperParameterTuningJob.html)中了解有关 A SageMaker I 超参数调整任务的更多信息。

**Topics**
+ [HyperparameterTuningJob 使用 YAML 文件创建](#create-a-hyperparametertuningjob-using-a-simple-yaml-file)
+ [HyperparameterTuningJob 使用 Helm Chart 创建](#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)

### HyperparameterTuningJob 使用 YAML 文件创建
<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
   ```

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

您可以使用 Helm 图表运行超参数优化作业。

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 图表，请运行以下命令：

```
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 资源以反映该任务在 AI 中的状态。 SageMaker 在工作期间使用的 SageMaker AI 资源会产生费用。作业完成或停止后，您无需支付任何费用。

**注意**： SageMaker AI 不允许您更新正在运行的超参数调整作业。您不能编辑任何参数并重新应用配置文件。您必须更改元数据名称，或删除现有作业并创建新作业。与 Kubeflow 中的 `TFJob` 等现有训练作业 Operator 类似，`update` 不受支持。

### 名单 HyperparameterTuningJobs
<a name="list-hyperparameter-tuning-jobs"></a>

使用以下命令列出使用 Kubernetes Operator 创建的所有作业：

```
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 人工智能资源产生任何费用。

#### 超参数优化作业状态值
<a name="hyperparameter-tuning-job-status-values"></a>

`STATUS` 字段可以是以下任一值：
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

这些状态直接来自 SageMaker A [I 官方 API 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeHyperParameterTuningJob.html#SageMaker-DescribeHyperParameterTuningJob-response-HyperParameterTuningJobStatus)。

除了官方 SageMaker 的人工智能身份外，还有可能成`STATUS`为`SynchronizingK8sJobWithSageMaker`。这意味着 Operator 尚未处理该作业。

#### 状态计数器
<a name="status-counters"></a>

输出有几个计数器，如 `COMPLETED` 和 `INPROGRESS`。它们分别表示已完成和正在进行的训练作业的数量。有关如何确定这些值的更多信息，请参阅 SageMaker API 文档[TrainingJobStatusCounters](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
```

除了有关调优作业的信息外，Kubernetes 的 SageMaker AI Operator 还会在输出中显示超参数调优[作业找到的最佳训练](https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-monitor.html#automatic-model-tuning-best-training-job)作业，如下所示：`describe`

```
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>

使用以下命令停止 A SageMaker I 中的超参数作业。

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

此命令从 Kubernetes 集群中移除超参数调整任务和相关的训练作业，并在 AI 中停止它们。 SageMaker 已停止或已完成的任务不会对 SageMaker 人工智能资源产生任何费用。 SageMaker AI 不会删除超参数调整作业。已停止的作业继续显示在 SageMaker AI 控制台上。

您的输出应与以下内容类似：

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

**注意**：删除命令需要大约 2 分钟才能从 SageMaker AI 中清理资源。

## BatchTransformJob 操作员
<a name="batchtransformjobs-operator"></a>

Batch transform 作业操作员通过在 SageMaker AI 中启动指定的批量转换作业规格来将其与 SageMaker AI 进行协调。您可以在 AI [CreateTransformJob AP SageMaker I 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateTransformJob.html)中了解有关 A SageMaker I 批量转换作业的更多信息。

**Topics**
+ [BatchTransformJob 使用 YAML 文件创建](#create-a-batchtransformjob-using-a-simple-yaml-file)
+ [BatchTransformJob 使用 Helm Chart 创建](#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)

### BatchTransformJob 使用 YAML 文件创建
<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`以更改必要的参数，将替换为您的输入数据和 A SageMaker I 执行角色`s3OutputPath`具有写入权限的 Amazon S3 存储桶。`inputdataconfig`

1. 使用以下命令应用 YAML 文件：

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

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

您可以使用 Helm 图表来运行批量转换作业。

#### 获取 Helm 安装程序目录
<a name="get-the-helm-installer-directory"></a>

使用以下命令克隆 GitHub 存储库以获取源代码：

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

#### 配置 Helm 图表
<a name="configure-the-helm-chart"></a>

导航到 `amazon-sagemaker-operator-for-k8s/hack/charts/batch-transform-jobs/`文件夹。

编辑`values.yaml`文件以`inputdataconfig`使用您的输入数据替换 OutputPath，将 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 图表，请运行以下命令：

   ```
   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` 等现有训练作业 Operator 类似，`update` 不受支持。

### 名单 BatchTransformJobs
<a name="list-batch-transform-jobs"></a>

使用以下命令列出使用 Kubernetes Operator 创建的所有作业：

```
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 人工智能资源产生任何费用。

#### 批量转换状态值
<a name="batch-transform-status-values"></a>

`STATUS` 字段可以是以下任一值：
+ `Completed` 
+ `InProgress` 
+ `Failed` 
+ `Stopped` 
+ `Stopping` 

这些状态直接来自 SageMaker A [I 官方 API 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/API_DescribeHyperParameterTuningJob.html#SageMaker-DescribeHyperParameterTuningJob-response-HyperParameterTuningJobStatus)。

除了官方 SageMaker 的人工智能身份外，还有可能成`STATUS`为`SynchronizingK8sJobWithSageMaker`。这意味着 Operator 尚未处理该作业。

### 描述一个 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>

使用以下命令停止 A SageMaker I 中的批量转换作业。

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

您的输出应与以下内容类似：

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

此命令将批量转换任务从 Kubernetes 集群中移除，并在 AI 中将其停止。 SageMaker 已停止或已完成的任务不会对 SageMaker 人工智能资源产生任何费用。删除大约需要 2 分钟才能清除 SageMaker AI 中的资源。

**注意**： SageMaker AI 不会删除批量转换作业。已停止的作业继续显示在 SageMaker AI 控制台上。

## HostingDeployment 操作员
<a name="hosting-deployment-operator"></a>

HostingDeployment 操作员支持创建和删除终端节点，以及更新现有端点，以便进行实时推理。托管部署操作员通过在 AI 中创建模型、端点配置和端点，将您指定的托管部署任务规范与 SageMaker AI 进行协调。 SageMaker 您可以在 AI [CreateEndpointAP SageMaker I 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpoint.html)中了解有关 A SageMaker I 推断的更多信息。

**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 人工智能根据设定的权重在所有生产变体之间进行负载平衡。
+ *模型*。模型是处理模型所必需的容器和执行角色 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`：Operator 正准备创建端点。
+ `ReconcilingEndpoint`：Operator 正在创建、更新或删除端点资源。如果 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 人工智能终端节点 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`：Operator 上次检查端点状态的时间。
+ `Last Modified Time`：上次修改端点的时间。
+ `Model Names`：模型名称与 SageMaker AI HostingDeployment 模型名称的键值对。

### 调用端点
<a name="invoking-the-endpoint"></a>

终端节点状态变为后`InService`，您可以通过两种方式调用终端节点：使用 AWS CLI（执行身份验证和 URL 请求签名），或者使用像 curl 这样的 HTTP 客户端。如果您使用自己的客户端，则需要自己进行 AWS v4 网址签名和身份验证。

要使用 AWS CLI 调用终端节点，请运行以下命令。请务必将区域和终端节点名称替换为终端节点的地区和 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`，就可以对其进行更新。可能需要大约 10 分钟 HostingDeployment 才能投入使用。要验证状态是否为 `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`使用以下命令删除 a HostingDeployment ：

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

   您的输出应与以下内容类似：

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

1. 要验证是否已删除托管部署，请使用以下命令：

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

已删除的终端节点不会对 SageMaker 人工智能资源产生任何费用。

## ProcessingJob 操作员
<a name="kubernetes-processing-job-operator"></a>

ProcessingJob 操作员用于启动 Amazon SageMaker 处理任务。有关 SageMaker 处理作业的更多信息，请参阅[CreateProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProcessingJob.html)。

**Topics**
+ [ProcessingJob 使用 YAML 文件创建](#kubernetes-processing-job-yaml)
+ [名单 ProcessingJobs](#kubernetes-processing-job-list)
+ [描述一个 ProcessingJob](#kubernetes-processing-job-description)
+ [删除一个 ProcessingJob](#kubernetes-processing-job-delete)

### ProcessingJob 使用 YAML 文件创建
<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 存储桶 CloudWatch、Amazon 和其他服务。有关创建执行角色的更多信息，请参阅 [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` - 作业首先提交到集群。Operator 已收到请求，正准备创建处理作业。
+ `Reconciling` - Operator 正在初始化或从暂时性错误中恢复，以及出现其他错误。如果处理作业仍处于此状态，请使用 `kubectl` `describe` 命令在 `Additional` 字段中查看原因。
+ `InProgress | Completed | Failed | Stopping | Stopped`— SageMaker 处理任务的状态。有关更多信息，请参阅 [DescribeProcessingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html#sagemaker-DescribeProcessingJob-response-ProcessingJobStatus)。
+ `Error` - Operator 无法通过协调进行恢复。

已完成、停止或失败的任务不会产生额外的 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>
```

### 删除一个 ProcessingJob
<a name="kubernetes-processing-job-delete"></a>

删除处理任务时，处理任务将 SageMaker 从 Kubernetes 中移除，但不会从 AI 中删除该作业。 SageMaker 如果 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) 运算符将资源列表 IDs 作为输入，并对每个资源应用相同的策略。每个资源 ID 都是端点名称和变体名称的组合。HAP 操作员执行两个步骤：注册资源， IDs 然后将扩展策略应用于每个资源 ID。 `Delete`撤消这两个动作。您可以将 HAP 应用于现有的 SageMaker AI 终端节点，也可以使用[HostingDeployment 运算符](https://docs.aws.amazon.com/sagemaker/latest/dg/hosting-deployment-operator.html#create-a-hostingdeployment)创建新的 SageMaker AI 终端节点。您可以在[应用程序自动缩放策略文档中阅读有关 SageMaker AI 自动缩放](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html)的更多信息。

**注意**  
在 `kubectl` 命令中，您可以使用简写形式 `hap` 代替 `hostingautoscalingpolicy`。

**Topics**
+ [HostingAutoscalingPolicy 使用 YAML 文件创建](#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)

### HostingAutoscalingPolicy 使用 YAML 文件创建
<a name="kubernetes-hap-job-yaml"></a>

使用 YAML 文件创建一个 HostingAutoscalingPolicy (HAP)，将预定义或自定义指标应用于一个或多个 SageMaker AI 端点。

Amazon SageMaker AI 需要特定的值才能将自动缩放应用于您的变体。如果未在 YAML 规范中指定这些值，HAP Operator 将应用以下默认值。

```
# 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 运算符将相同的扩展策略应用于多个资源 IDs。将为每个资源 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. 使用以下命令之一将预定义的指标应用于多个资源 IDs （端点名称和变体名称组合）。

   对于集群范围的安装：

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

   对于命名空间范围的安装：

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

#### 多个端点和变体的注意事项 HostingAutoscalingPolicies
<a name="kubernetes-hap-scaling-considerations"></a>

当您使用多个资源时，需要考虑以下注意事项 IDs：
+ 如果您对多个资源应用单个策略 IDs，则会为每个资源 ID 创建一个 PolicYarn。五个端点有五个策略ARNs。当您在策略上运行 `describe` 命令时，响应将显示为一项作业并包含单个作业状态。
+ 如果您将自定义指标应用于多个资源 IDs，则所有资源 ID（变体）值将使用相同的维度或值。例如，如果您对实例 1-5 应用客户指标，并且端点变体维度映射到变体 1，则当变体 1 超过指标时，所有端点都会扩展或缩减。
+ HAP 操作员支持更新资源 IDs列表。如果您在规范中修改、添加或删除资源 IDs ，则自动缩放策略将从之前的变体列表中删除，并应用于新指定的资源 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)命令列出当前应用策略的资源 IDs 。

### 名单 HostingAutoscalingPolicies
<a name="kubernetes-hap-list"></a>

使用以下命令之一列出使用 HAP 运算符创建的所有 HostingAutoscalingPolicies (HAPs)。

对于集群范围的安装：

```
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` 字段或 Operator 日志以了解更多详细信息。
+ `Created`
+ `Error`

**查看您应用策略的自动扩缩端点**

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左侧面板中，展开**推理**。

1. 选择**端点**。

1. 选择相关端点的名称。

1. 滚动到**端点运行时设置**部分。

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

使用以下命令获取有关 a HostingAutoscalingPolicy (HAP) 的更多详细信息。这些命令通常用于调试问题或检查 HAP 的资源 IDs （端点名称和变体名称组合）。

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

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

 HostingAutoscalingPolicy (HAP) 运算符支持更新。您可以编辑 YAML 规范以更改值，然后重新应用该策略。HAP Operator 会删除现有策略并应用新策略。

### 删除一个 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，然后再删除该端点。

# 将资源迁移到最新 Operator
<a name="kubernetes-sagemaker-operators-migrate"></a>

我们将停止对 [Kubernetes SageMaker 操作](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)员的原始版本的开发和技术支持。

如果您当前使用的是 [Kubernetes SageMaker 操作员版本`v1.2.2`或更](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)低版本，我们建议您将资源迁移到适用于 Amazon 的 [ACK 服务控制](https://github.com/aws-controllers-k8s/sagemaker-controller)器。 SageMakerACK 服务控制器是基于 Kubernetes 控制[AWS 器 (ACK) 的新一代 Kuber](https://aws-controllers-k8s.github.io/community/) netes SageMaker 操作员。

有关终止对 Kubernetes SageMaker 操作员原始版本支持的常见问题解答，请参阅 [宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持](kubernetes-sagemaker-operators-eos-announcement.md)

使用以下步骤迁移您的资源，并使用 ACK 通过 Amazon A SageMaker I 训练、调整和部署机器学习模型。

**注意**  
适用于 Kubernetes 的最新 SageMaker 人工智能运算符不向后兼容。

**Topics**
+ [前提条件](#migrate-resources-to-new-operators-prerequisites)
+ [采用资源](#migrate-resources-to-new-operators-steps)
+ [清理旧资源](#migrate-resources-to-new-operators-cleanup)
+ [使用适用于 Kubernetes 的全新 SageMaker AI 运算符](#migrate-resources-to-new-operators-tutorials)

## 前提条件
<a name="migrate-resources-to-new-operators-prerequisites"></a>

要成功将资源迁移到适用于 Kubernetes 的最新 SageMaker 人工智能操作员，您必须执行以下操作：

1. 安装适用于 Kubernet SageMaker es 的最新人工智能运算符。有关 step-by-step说明，请参阅*使用 ACK SageMaker AI 控制器在 Machine Learning* 中进行[设置](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)。

1. 如果您使用的是 [HostingAutoscalingPolicy 资源](#migrate-resources-to-new-operators-hap)，请安装新的 Application Auto Scaling Operator。有关 step-by-step说明，请参阅[使用 App *lication Auto Scaling 扩展 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>

适用于 Kubernetes 的全新 SageMaker AI 操作员能够采用最初不是由 ACK 服务控制器创建的资源。有关更多信息，请参阅 ACK 文档中的[采用现有 AWS 资源](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/)。

以下步骤展示了适用于 Kubernetes 的新 SageMaker 人工智能运营商如何采用现有 SageMaker 的人工智能终端节点。将以下示例代码另存为名为 `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) 资源由多个 Application Auto Scaling 资源组成：`ScalableTarget` 和 `ScalingPolicy`。在 ACK 中采用 HAP 资源时，请先安装 [Application Auto Scaling controller 控制器](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 中采用 A SageMaker I 端点，则需要`Model`分别采用`Endpoint``EndpointConfig`、和。可在 `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>

在适用于 Kubernetes 的新 SageMaker AI 操作员采用您的资源后，您可以卸载旧的运算符并清理旧资源。

### 步骤 1：卸载旧 Operator
<a name="migrate-resources-to-new-operators-uninstall"></a>

要卸载旧 Operator，请参阅[删除 Operator](kubernetes-sagemaker-operators-end-of-support.md#delete-operators)。

**警告**  
删除任何旧资源之前，请先卸载旧 Operator。

### 第 2 步：删除终结器并删除旧资源
<a name="migrate-resources-to-new-operators-delete-resources"></a>

**警告**  
删除旧资源之前，请确保已卸载旧 Operator。

卸载旧 Operator 后，必须明确删除终结器才能删除旧 Operator 资源。以下示例脚本显示如何删除给定命名空间中由旧 Operator 管理的所有训练作业。新 Operator 采用其他资源后，您可以使用类似的模式删除这些资源。

**注意**  
必须使用完整的资源名称才能获取资源。例如，使用 `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
```

## 使用适用于 Kubernetes 的全新 SageMaker AI 运算符
<a name="migrate-resources-to-new-operators-tutorials"></a>

有关使用适用于 Kubernetes 的全新 SageMaker AI 运算符的深入指南，请参阅 [为 Kubernetes 使用 SageMaker 人工智能运算符](kubernetes-sagemaker-operators-ack.md#kubernetes-sagemaker-operators-ack-use)

# 宣布终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持
<a name="kubernetes-sagemaker-operators-eos-announcement"></a>

本页面宣布终止对适用于 [Kubernetes 的 SageMaker AI Oper](https://github.com/aws/amazon-sagemaker-operator-for-k8s) ators 原始版本的支持，并提供了常见问题的答案以及有关 Amazon A [ SageMaker I 的 ACK 服务控制器的迁移信息，Amazon A](https://github.com/aws-controllers-k8s/sagemaker-controller) I 是新一代完全支持的 Kubernetes SageMaker 人工智能运营商。有关适用于 Kubernetes 的新 SageMaker AI 运算符的一般信息，请参阅。[适用于 Kubernetes 的最新 SageMaker 人工智能运算符](kubernetes-sagemaker-operators-ack.md)

## 终止支持常见问题
<a name="kubernetes-sagemaker-operators-eos-faq"></a>

**Topics**
+ [为什么我们要终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持？](#kubernetes-sagemaker-operators-eos-faq-why)
+ [在哪里可以找到有关适用于 Kubernetes 和 ACK 的全新 SageMaker AI 运算符的更多信息？](#kubernetes-sagemaker-operators-eos-faq-more)
+ [终止支持 (EOS) 是什么意思？](#kubernetes-sagemaker-operators-eos-faq-definition)
+ [如何将我的工作负载迁移到适用于 Kubernetes 的全新 SageMaker AI 操作员进行训练和推理？](#kubernetes-sagemaker-operators-eos-faq-how)
+ [我应该迁移到哪个版本的 ACK？](#kubernetes-sagemaker-operators-eos-faq-version)
+ [Kubernetes 的初始 SageMaker 人工智能运算符和新的运营商（Amazon A SageMaker I 的 ACK 服务控制器）在功能上是否相同？](#kubernetes-sagemaker-operators-eos-faq-parity)

### 为什么我们要终止对 Kubernetes SageMaker 人工智能运算符原始版本的支持？
<a name="kubernetes-sagemaker-operators-eos-faq-why"></a>

用户现在可以利用[适用于 Amazon A SageMaker I 的 ACK 服务控制器](https://github.com/aws-controllers-k8s/sagemaker-controller)。ACK 服务控制器是新一代适用于 Kubernetes SageMaker 的人工智能操作员，基于 Kubernetes [AWS 控制器 (ACK)，这是一个针对生产进行了优化的社区驱动项目，它标准化了通过 Kubernetes](https://aws-controllers-k8s.github.io/community/) 运营商公开服务的方式。 AWS 因此，我们宣布终止对 Kubernetes [ SageMaker 人工智能运算符](https://github.com/aws/amazon-sagemaker-operator-for-k8s)原始版本（非基于 ACK）的支持 (EOS)。该支持将于 **2023 年 2 月 15 日**连同 [Amazon Elastic Kubernetes Service Kubernetes 1.21](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html#kubernetes-release-calendar) 一起终止。

有关 ACK 的更多信息，请参阅 [ACK 历史和原则](https://aws-controllers-k8s.github.io/community/docs/community/background/)。

### 在哪里可以找到有关适用于 Kubernetes 和 ACK 的全新 SageMaker AI 运算符的更多信息？
<a name="kubernetes-sagemaker-operators-eos-faq-more"></a>
+ 有关适用于 Kubernetes 的全新 SageMaker AI 运算符的更多信息，请参阅适用于 A [mazon A SageMaker I GitHub 存储库的 ACK 服务控制器或阅读适用于](https://github.com/aws-controllers-k8s/sagemaker-controller) Kubernetes [的AWS 控制器文档](https://aws-controllers-k8s.github.io/community/docs/community/overview/)。
+ 有关如何使用 Amazon EKS 使用适用于 Amazon A SageMaker I 的 ACK 服务控制器训练机器学习模型的教程，请参阅此 [SageMaker AI 示例](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/)。

  有关自动缩放的示例，请参阅[使用 Application Auto Scaling 扩展 SageMaker AI 工作负载](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)。
+ 有关 AWS Controller for Kubernetes (ACK) 的信息，请参阅 [AWS Controllers for 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`是 [Kubernetes SageMaker 人工智能运算符的最后](https://github.com/aws/amazon-sagemaker-operator-for-k8s/tree/master)一个版本。用户应将其工作负载迁移到使用[适用于 Amazon A SageMaker I 的 ACK 服务控制器](https://github.com/aws-controllers-k8s/sagemaker-controller)。

### 如何将我的工作负载迁移到适用于 Kubernetes 的全新 SageMaker AI 操作员进行训练和推理？
<a name="kubernetes-sagemaker-operators-eos-faq-how"></a>

有关将资源从旧版迁移到新版 Kubernetes SageMaker 人工智能运算符的信息，请访问。[将资源迁移到最新 Operator](kubernetes-sagemaker-operators-migrate.md)

### 我应该迁移到哪个版本的 ACK？
<a name="kubernetes-sagemaker-operators-eos-faq-version"></a>

用户应迁移到最新发布的[适用于 Amazon A SageMaker I 的 ACK 服务控制器](https://github.com/aws-controllers-k8s/sagemaker-controller/tags)版本。

### Kubernetes 的初始 SageMaker 人工智能运算符和新的运营商（Amazon A SageMaker I 的 ACK 服务控制器）在功能上是否相同？
<a name="kubernetes-sagemaker-operators-eos-faq-parity"></a>

是，它们具有同等的功能。

两个版本之间一些主要显著差异包括：
+ 基于 ACK 的 SageMaker AI 运营商在 Kubernetes 上使用的自定义资源定义 (CRD) 遵循 AWS API 定义，因此它与 Kubernetes SageMaker 人工智能运营商在原始版本中的自定义资源规范不兼容。请参阅新控制器[CRDs](https://github.com/aws-controllers-k8s/sagemaker-controller/tree/main/helm/crds)中的或使用迁移指南来采用资源并使用新控制器。
+ 该`Hosting Autoscaling`策略不再是适用于 Kubernetes 的新 SageMaker AI Operators 的一部分，并且已迁移到[应用程序自动](https://github.com/aws-controllers-k8s/applicationautoscaling-controller)缩放 ACK 控制器中。要了解如何使用应用程序自动缩放控制器在 A SageMaker I 端点上配置自动缩放，请按照此[自动](https://aws-controllers-k8s.github.io/community/docs/tutorials/autoscaling-example/)缩放示例进行操作。
+ `HostingDeployment` 资源用于在一个 CRD 中创建模型、端点配置和端点。适用于 Kubernetes 的全新 SageMaker AI 操作员每种资源都有单独的 CRD。