超参数调整作业运算符 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

超参数调整作业运算符

超参数调整作业运算符可通过在 SageMaker 中启动指定的超参数调整作业规范与 SageMaker 协调。您可以在 SageMaker 中了解有关 SageMaker 超参数调整作业的详细信息CreateHyperParameterTuningJob API 文档.

使用 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 图表运行超参数优化作业。

  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 图是否已成功创建,请运行以下命令:

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创建一个HyperParameterTuningJobKubernetes 资源。运算符在 SageMaker 中启动实际的超参数优化作业,并更新HyperParameterTuningJob库贝内特斯资源来反映 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 资源产生任何费用。

超参数优化 Job 状态值

这些区域有:STATUS字段可以是以下值之一:

  • Completed

  • InProgress

  • Failed

  • Stopped

  • Stopping

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

除了正式的 SageMaker 身份之外,还可以STATUS要成为SynchronizingK8sJobWithSageMaker. 这意味着操作员尚未处理任务。

状态计数器

输出有几个计数器,如COMPLETEDINPROGRESS. 这些数据分别表示已完成和正在进行的培训工作的数量。有关如何确定这些数据的更多信息,请参阅培训作业状态计数器在 SageMaker API 文档中。

最佳培训

此列包含TrainingJob最好地优化了选定量度。

要查看调整后的超参数的摘要,请运行:

kubectl describe hyperparametertuningjob xgboost-mnist-hpo

要查看有关TrainingJob,运行:

kubectl describe trainingjobs <job name>

生成 TrainingJobs

您还可以追踪所有 10 个在库贝内特斯的培训职位HyperparameterTuningJob通过运行以下命令:

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 中的资源。