

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

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