使用 SageMaker 作业 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 SageMaker 作业

要使用适用于 Kubernetes 的 SageMaker 运算符运行作业,您可以应用 YAML 文件或使用提供的 Helm 图表。

以下教程中的所有运算符示例作业都使用从公有 MNIST 数据集中获取的示例数据。要运行这些示例,请将数据集下载到您的 Amazon S3 存储桶。您可以在下载 MNIST 数据集中找到该数据集。

TrainingJob 运算符

训练作业操作员在 SageMaker 中启动您指定的训练作业规范,以便将其与 SageMaker 进行协调。您可以在 SageMaker SageMaker API 文档CreateTrainingJob中了解有关 训练作业的更多信息。

使用简单 YAML 文件创建TrainingJob

  1. 使用以下命令下载用于训练的示例 YAML 文件:

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-trainingjob.yaml
  2. 编辑 xgboost-mnist-trainingjob.yaml 文件以将 roleArn 参数替换为您的 <sagemaker-execution-role>,并将 outputPath 替换为 Amazon S3 执行角色具有写入访问权限的 SageMaker 存储桶。必须具有权限,roleArn 才能代表您访问 SageMaker、Amazon Amazon S3 和其他服务。CloudWatch有关创建 SageMaker ExecutionRole 的更多信息,请参阅 SageMaker 角色。使用以下命令应用 YAML 文件:

    kubectl apply -f xgboost-mnist-trainingjob.yaml

使用 Helm 图表创建TrainingJob

您可以使用 Helm Charts 运行 TrainingJobs。

  1. 使用以下命令克隆 GitHub 存储库以获取源:

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. 导航到 amazon-sagemaker-operator-for-k8s/hack/charts/training-jobs/ 文件夹并编辑 values.yaml 文件,以将 rolearnoutputpath 等值替换为与您的账户对应的值。必须具有权限,RoleARN 才能代表您访问 SageMaker、Amazon S3 和其他服务。Amazon CloudWatch有关创建 SageMaker ExecutionRole 的更多信息,请参阅 SageMaker 角色

创建训练作业

在 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 图表

要验证 Helm Chart 是否已成功创建,请运行:

helm ls

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

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

helm install 创建 TrainingJob Kubernetes 资源。该运算符在 SageMaker 中启动实际训练作业并更新 TrainingJob Kubernetes 资源以反映 SageMaker 中作业的状态。对于在作业持续时间内使用的 SageMaker 资源,您需要支付费用。在您的任务完成或停止后,您不会产生任何费用。

注意:SageMaker 不允许您更新正在运行的训练作业。您无法编辑任何参数并重新应用文件/配置。更改元数据名称或删除现有作业并创建新作业。与 Kubeflow 中的 TFJob 等现有训练作业运算符类似,不支持 update

列出训练作业

使用以下命令列出使用 Kubernetes 运算符创建的所有作业:

kubectl get TrainingJob

列出所有作业的输出应与以下内容类似:

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

在作业完成或失败后,训练作业将继续列出。您可以按照“删除训练作业”步骤从列表中删除TrainingJob作业。已完成或已停止的作业不会产生 SageMaker 资源的任何费用。

训练作业状态值

字段可以是以下值之一:STATUS

  • Completed

  • InProgress

  • Failed

  • Stopped

  • Stopping

这些状态直接来自 SageMaker 官方 API 文档

除了官方 SageMaker 状态之外,STATUS 也可能为 SynchronizingK8sJobWithSageMaker。 这意味着,操作符尚未处理作业。

辅助状态值

辅助状态直接来自 SageMaker 官方 API 文档。它们包含有关任务状态的更详细信息。

描述训练作业

您可以使用 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/my-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/my-bucket/sagemaker/xgboost-mnist/validation/ Output Data Config: S 3 Output Path: s3://my-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>

查看训练作业中的日志

使用以下命令查看 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

删除训练作业

使用以下命令在 Amazon SageMaker 上停止训练任务:

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

此命令从 Kubernetes 删除 SageMaker 训练作业。此命令将返回以下输出:

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

如果任务仍在 SageMaker 上进行中,则任务将停止。在您的任务停止或完成后,您不会为 SageMaker 资源产生任何费用。

注意:SageMaker 不会删除训练作业。停止的作业将继续显示在 SageMaker 控制台上。命令需要大约 2 分钟来清除 delete 中的资源。SageMaker

HyperParameterTuningJobs 运算符

超参数优化作业运算符通过在 SageMaker 中启动特定的超参数优化作业规范来将其与 SageMaker 进行协调。您可以在 SageMaker SageMaker API 文档中了解有关 CreateHyperParameterTuningJob 超参数优化作业的更多信息。

使用简单 YAML 文件创建超参数优化作业

  1. 使用以下命令下载超参数优化作业的示例 YAML 文件:

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-hpo.yaml
  2. 编辑 xgboost-mnist-hpo.yaml 文件以将 roleArn 参数替换为您的 sagemaker-execution-role。 要成功完成超参数优化作业,您还必须将 s3InputPaths3OutputPath 更改为与您的账户对应的值。使用以下命令应用更新 YAML 文件:

    kubectl apply -f xgboost-mnist-hpo.yaml

使用 Helm 图表创建超参数优化作业

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

  1. 使用以下命令克隆 GitHub 存储库以获取源:

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. 导航到 amazon-sagemaker-operator-for-k8s/hack/charts/hyperparameter-tuning-jobs/ 文件夹。

  3. 编辑 values.yaml 文件以将 roleArn 参数替换为您的 sagemaker-execution-role。 要成功完成超参数优化作业,您还必须将 s3InputPaths3OutputPath 更改为与您的账户对应的值。

创建超参数优化作业

在 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.

验证图表安装

要验证 Helm Chart 是否已成功创建,请运行以下命令:

helm ls

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

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

helm install 创建 HyperParameterTuningJob Kubernetes 资源。运算符在 SageMaker 中启动实际超参数优化作业并更新 HyperParameterTuningJob Kubernetes 资源以反映 SageMaker 中作业的状态。对于在作业持续时间内使用的 SageMaker 资源,您需要支付费用。在您的任务完成或停止后,您不会产生任何费用。

注意:SageMaker 不允许您更新正在运行的超参数优化作业。您无法编辑任何参数并重新应用文件/配置。您必须更改元数据名称或删除现有作业并创建新的作业。与 Kubeflow 中的 TFJob 等现有训练作业运算符类似,不支持 update

列出超参数优化作业

使用以下命令列出使用 Kubernetes 运算符创建的所有作业:

kubectl get hyperparametertuningjob

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

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

在作业完成或失败后,将继续列出超参数优化作业。您可以按照“删除超参数优化作业”中的步骤从列表中删除 hyperparametertuningjob。已完成或已停止的作业不会产生 SageMaker 资源的任何费用。

超参数优化作业状态值

字段可以是以下值之一:STATUS

  • Completed

  • InProgress

  • Failed

  • Stopped

  • Stopping

这些状态直接来自 SageMaker 官方 API 文档

除了官方 SageMaker 状态之外,STATUS 也可能为 SynchronizingK8sJobWithSageMaker。 这意味着,操作符尚未处理作业。

状态计数器

输出具有多个计数器,如 COMPLETEDINPROGRESS。 这些分别表示已完成和正在进行中的训练作业数。有关如何确定这些内容的更多信息,请参阅 API 文档中的 TrainingJobStatusCountersSageMaker。

最佳训练作业

此列包含最佳优化所选指标的 TrainingJob 的名称。

要查看经过优化的超参数的摘要,请运行:

kubectl describe hyperparametertuningjob xgboost-mnist-hpo

要查看有关 TrainingJob 的详细信息,请运行:

kubectl describe trainingjobs <job name>

生成的训练作业

您也可以通过运行以下命令来跟踪 HyperparameterTuningJob 启动的 Kubernetes 中的所有 10 个训练作业:

kubectl get trainingjobs

描述超参数优化作业

您可以通过运行以下命令,使用 describe kubectl 动词获取调试详细信息。

kubectl describe hyperparametertuningjob xgboost-mnist-hpo

除了有关优化作业的信息之外,Kubernetes 的 SageMaker 运算符还公开了 输出中的超参数优化作业找到的最佳训练作业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/my-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/my-bucket/sagemaker/xgboost-mnist/validation/ Output Data Config: s3OutputPath: https://s3-us-east-2.amazonaws.com/my-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>

查看超参数优化作业中的日志

超参数优化作业没有日志,但启动的所有训练作业都具有日志。可以访问这些日志,就像它们是正常的训练作业一样。有关更多信息,请参阅“查看训练作业中的日志”。

删除超参数优化作业

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

kubectl delete hyperparametertuningjob xgboost-mnist-hpo

此命令将从 Kubernetes 集群中删除超参数优化作业和关联的训练作业,并在 SageMaker 中停止它们。已停止或已完成的作业对于 SageMaker 资源不会产生任何费用。SageMaker 不会删除超参数优化作业。停止的作业将继续显示在 SageMaker 控制台上。

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

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

注意:删除命令大约需要 2 分钟来清除 SageMaker 中的资源。

BatchTransformJobs 运算符

批量转换作业运算符通过在 SageMaker 中启动指定的批量转换作业规范来将其与 SageMaker 进行协调。您可以在 SageMaker SageMaker API 文档中了解有关 CreateTransformJob 批量转换作业的更多信息。

使用简单 YAML 文件创建BatchTransformJob

  1. 使用以下命令下载批量转换作业的示例 YAML 文件:

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-batchtransform.yaml
  2. 编辑文件 xgboost-mnist-batchtransform.yaml 以更改必要参数,以将 inputdataconfig 替换为输入数据,并将 s3OutputPath 替换为 Amazon S3 执行角色具有写入访问权限的 SageMaker 存储桶。

  3. 使用以下命令应用 YAML 文件:

    kubectl apply -f xgboost-mnist-batchtransform.yaml

使用 Helm 图表创建BatchTransformJob

您可以使用 Helm Charts 运行批量转换作业。

获取 Helm 安装程序目录

使用以下命令克隆 GitHub 存储库以获取源:

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

配置 Helm 图表

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

编辑 values.yaml 文件以将 inputdataconfig 替换为输入数据,将 outputPath 替换为 SageMaker 执行角色具有写入访问权限的 S3 存储桶。

创建批量转换任务

  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.
  2. 要验证 Helm Chart 是否已成功创建,请运行以下命令:

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

    此命令创建一个 BatchTransformJob Kubernetes 资源。该运算符会在 SageMaker 中启动实际的转换作业,并更新 BatchTransformJob Kubernetes 资源以反映该作业在 SageMaker 中的状态。对于在作业持续时间内使用的 SageMaker 资源,您需要支付费用。在您的任务完成或停止后,您不会产生任何费用。

注意:SageMaker 不允许您更新正在运行的批量转换作业。您无法编辑任何参数并重新应用文件/配置。您必须更改元数据名称或删除现有作业并创建新的作业。与 Kubeflow 中的 TFJob 等现有训练作业运算符类似,不支持 update

列出批量转换作业

使用以下命令列出使用 Kubernetes 运算符创建的所有作业:

kubectl get batchtransformjob

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

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

批处理转换作业完成或失败后,将继续列出该作业。您可以按照“删除批量转换任务”步骤从列表中删除 hyperparametertuningjob。已完成或已停止的作业不会产生 SageMaker 资源的任何费用。

批量转换状态值

字段可以是以下值之一:STATUS

  • Completed

  • InProgress

  • Failed

  • Stopped

  • Stopping

这些状态直接来自 SageMaker 官方 API 文档

除了官方 SageMaker 状态之外,STATUS 也可能为 SynchronizingK8sJobWithSageMaker。 这意味着,操作符尚未处理作业。

描述批量转换作业

您可以通过运行以下命令,使用 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://my-bucket/mnist_kmeans_example/input Transform Job Name: xgboost-mnist-a88fb19809b511eaac440aa8a9SMJOB Transform Output: S 3 Output Path: s3://my-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>

查看批量转换作业中的日志

使用以下命令查看 xgboost-mnist 批量转换作业中的日志:

kubectl smlogs batchtransformjob xgboost-mnist-batch-transform

删除批量转换任务

在 SageMaker 中使用以下命令停止批量转换任务。

kubectl delete batchTransformJob xgboost-mnist-batch-transform

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

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

此命令将从 Kubernetes 集群中删除批量转换作业,并在 SageMaker 中停止它们。已停止或已完成的作业对于 SageMaker 资源不会产生任何费用。从 SageMaker 中清除资源大约需要 2 分钟。

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

实时推理

HostingDeployments 支持创建和删除终端节点,以及更新现有终端节点。托管部署运算符通过在 SageMaker 中创建模型、终端节点配置和终端节点,将指定的托管部署作业规范与 SageMaker 保持一致。您可以在 SageMaker SageMaker API 文档中了解有关 CreateEndpoint 推理的更多信息。

配置 HostingDeployment 资源

使用以下命令下载托管部署作业的示例 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 提供的算法,则推理代码必须满足 SageMaker 要求。有关更多信息,请参阅将您自己的算法与 SageMaker 结合使用

创建HostingDeployment

要创建 HostingDeployment,请使用以下命令通过 kubectl 应用文件 hosting.yaml

kubectl apply -f hosting.yaml

SageMaker 使用指定配置创建终端节点。您的终端节点的生命周期内使用的 SageMaker 资源会产生费用。删除终端节点后,您不会产生任何费用。

创建过程需要大约 10 分钟。

列出HostingDeployments

要验证是否已创建 HostingDeployment,请使用以下命令:

kubectl get hostingdeployments

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

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

HostingDeployment 状态值

状态字段可以是以下几个值之一:

  • SynchronizingK8sJobWithSageMaker:运算符正在准备创建终端节点。

  • ReconcilingEndpoint:操作符正在创建、更新或删除终端节点资源。如果 HostingDeployment 保持此状态,请使用 kubectl describe 查看 Additional 字段中的原因。

  • OutOfService:终端节点不可用于接收传入请求。

  • CreatingCreateEndpoint 正在执行。

  • UpdatingUpdateEndpoint 或 UpdateEndpointWeightsAndCapacities 正在执行。

  • SystemUpdating:终端节点正在维护,并且无法更新、删除或重新扩展,直到完成。此维护操作不会更改任何客户指定的值,例如 VPC 配置、KMS 加密、模型、实例类型或实例计数。

  • RollingBack:终端节点无法向上扩展或向下扩展或更改其变体权重,并且正在回滚到其之前的配置。回滚完成后,终端节点将恢复为 InService 状态。此过渡状态仅适用于启用了自动伸缩且变体权重或容量正在作为 UpdateEndpointWeightsAndCapacities 调用的一部分发生更改或显式调用 UpdateEndpointWeightsAndCapacities 操作时的终端节点。

  • InService:终端节点可用于处理传入请求。

  • DeletingDeleteEndpoint 正在执行。

  • Failed:无法创建、更新或重新扩展终端节点。有关失败的信息,请使用 DescribeEndpoint:FailureReasonDeleteEndpoint 是可在失败的终端节点上执行的唯一操作。

描述托管部署

您可以通过运行以下命令,使用 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://my-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 中创建终端节点的时间。

  • Endpoint ARN:终端节点 ARN。SageMaker

  • Endpoint Config Name:终端节点配置的 SageMaker 名称。

  • Endpoint Name:终端节点的 SageMaker 名称。

  • Endpoint Status:终端节点的状态。

  • Endpoint URL:可用于访问终端节点的 HTTPS URL。有关更多信息,请参阅在 SageMaker 托管服务上部署模型

  • FailureReason:如果创建、更新或删除命令失败,原因如下所示。

  • Last Check Time:操作符上次检查终端节点的状态的时间。

  • Last Modified Time:上次修改终端节点的时间。

  • Model Names:模型名称与 HostingDeployment 模型名称之间的键值对。SageMaker

调用终端节点

终端节点状态为 InService 后,您可以通过两种方式调用终端节点:使用 AWS CLI (执行身份验证和 URL 请求签名) 或使用 HTTP 客户端 (如 cURL)。如果您使用自己的客户端,则需要自行执行 AWSv4 URL 签名和身份验证。

要使用 AWS CLI 调用终端节点,请运行以下命令。确保将区域和终端节点名称替换为终端节点的区域和 SageMaker 终端节点名称。此信息可从 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

  1. 一旦 HostingDeployment 的状态为 InService,即可对其进行更新。可能需要大约 10 分钟才能投入使用。HostingDeployment要验证状态是否为 InService,请使用以下命令:

    kubectl get hostingdeployments
  2. 可在状态为 HostingDeployment 之前更新 InService。 运算符将一直等到 SageMaker 终端节点为 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://my-bucket/inference/xgboost-mnist/model.tar.gz image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
  3. 保存文件,然后使用 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 使用模型部署一组新的实例,切换流量以使用新实例,并耗尽旧实例。一旦此过程开始,状态将变为 Updating。 更新完成后,您的终端节点将变为 InService。 此过程大约需要 10 分钟。

删除HostingDeployment

  1. 使用 kubectl 通过以下命令删除 HostingDeployment:

    kubectl delete hostingdeployments host-xgboost

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

    hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
  2. 要验证托管部署是否已删除,请使用以下命令:

    kubectl get hostingdeployments No resources found.

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