配置并启动超参数调优作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

配置并启动超参数调优作业

重要

允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义IAM策略还必须授予向这些资源添加标签的权限。需要向资源添加标签的权限,因为 Studio 和 Studio Classic 会自动标记他们创建的任何资源。如果IAM策略允许 Studio 和 Studio Classic 创建资源但不允许标记,则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息,请参阅 提供标记 SageMaker资源的权限

Amazon Amazon 托管政策 SageMaker授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

超参数是在模型训练过程中影响学习过程的高级参数。要获得最佳模型预测,您可以优化超参数配置或设置超参数值。找到最佳配置的过程称为超参数调优。要配置并启动超参数调优作业,请完成本指南中的步骤。

设置超参数调优作业

要指定超参数调优作业的设置,请在创建调优作业时定义一个JSON对象。将此JSON对象作为HyperParameterTuningJobConfig参数值传递给CreateHyperParameterTuningJobAPI。

在此JSON对象中,指定以下内容:

在此JSON对象中,您可以指定:

  • HyperParameterTuningJobObjective – 用于评估超参数调优作业启动的训练作业性能的目标指标。

  • ParameterRanges – 可调超参数在优化期间可以使用的值范围。有关更多信息,请参阅 定义超参数范围

  • RandomSeed – 用于初始化伪随机数生成器的值。设置随机种子将允许超参数调优搜索策略为相同的调优作业生成更一致的配置(可选)。

  • ResourceLimits – 超参数调优作业可以使用的最大训练数和最大并行训练作业数。

注意

如果您使用自己的算法进行超参数调整,而不是使用 SageMaker 内置算法,则必须为算法定义指标。有关更多信息,请参阅 定义指标

以下代码示例显示了如何使用内置XGBoost算法配置超参数调整作业。此代码示例演示了如何定义 etaalphamin_child_weightmax_depth 超参数的范围。有关这些超参数和其他超参数的更多信息,请参阅XGBoost参数

在此代码示例中,超参数调整作业的目标指标会找到最大化的超参数配置。validation:auc SageMaker 内置算法会自动将目标指标写入 CloudWatch 日志。以下代码示例演示了如何设置 RandomSeed

tuning_job_config = { "ParameterRanges": { "CategoricalParameterRanges": [], "ContinuousParameterRanges": [ { "MaxValue": "1", "MinValue": "0", "Name": "eta" }, { "MaxValue": "2", "MinValue": "0", "Name": "alpha" }, { "MaxValue": "10", "MinValue": "1", "Name": "min_child_weight" } ], "IntegerParameterRanges": [ { "MaxValue": "10", "MinValue": "1", "Name": "max_depth" } ] }, "ResourceLimits": { "MaxNumberOfTrainingJobs": 20, "MaxParallelTrainingJobs": 3 }, "Strategy": "Bayesian", "HyperParameterTuningJobObjective": { "MetricName": "validation:auc", "Type": "Maximize" }, "RandomSeed" : 123 }

配置训练作业

超参数调优作业将启动训练作业,以找到超参数的最佳配置。应使用配置这些训练作业 SageMakerCreateHyperParameterTuningJobAPI。

要配置训练作业,请定义一个JSON对象并将其作为TrainingJobDefinition参数的值传递CreateHyperParameterTuningJob

在此JSON对象中,您可以指定以下内容:

  • AlgorithmSpecification – 包含训练算法和相关元数据的 Docker 映像的注册表路径。要指定算法,您可以在 Docker 容器中使用自己的自定义算法SageMaker 内置算法(必需)。

  • InputDataConfig – 输入配置,包括训练和测试数据的 ChannelNameContentType 和数据来源(必填)。

  • InputDataConfig – 输入配置,包括训练和测试数据的 ChannelNameContentType 和数据来源(必填)。

  • 算法输出的存储位置。指定存储训练作业输出的 S3 存储桶。

  • RoleArn— SageMaker 用于执行任务的 Amazon Identity and Access Management (ARNIAM) 角色的 Amazon 资源名称 ()。任务包括读取输入数据、下载 Docker 映像、将模型工件写入 S3 存储桶、将日志写入 Amazon CloudWatch Logs 以及将指标写入亚马逊 CloudWatch (必填)。

  • StoppingCondition – 训练作业在停止之前可以运行的最大运行时(以秒为单位)。该值应大于训练模型所需的时间(必填)。

  • MetricDefinitions – 用以定义训练作业发出的任何指标的名称和正则表达式。仅当使用自定义训练算法时才需要定义指标。以下代码中的示例使用内置算法,已经定义了指标。有关定义指标(可选)的信息,请参阅定义指标

  • TrainingImage – 指定训练算法的 Docker 容器映像(可选)。

  • StaticHyperParameters – 在调优作业中无需调整的超参数的名称和值(可选)。

以下代码示例为 XGBoost亚马逊算法 SageMaker内置算法的 eval_metricnum_roundobjectiverate_droptweedie_variance_power 参数设置了静态值。

SageMaker Python SDK v1
from sagemaker.amazon.amazon_estimator import get_image_uri training_image = get_image_uri(region, 'xgboost', repo_version='1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }
SageMaker Python SDK v2
training_image = sagemaker.image_uris.retrieve('xgboost', region, '1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }

命名并启动超参数调优作业

配置超参数调整作业后,您可以通过调用来启动它。CreateHyperParameterTuningJobAPI以下代码示例使用了 tuning_job_configtraining_job_definition。这两个对象是在之前的两个代码示例中定义的,用于创建超参数调优作业。

tuning_job_name = "MyTuningJob" smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = tuning_job_name, HyperParameterTuningJobConfig = tuning_job_config, TrainingJobDefinition = training_job_definition)

查看训练作业的状态

查看超参数调优作业启动的训练作业的状态
  1. 在超参数调优作业列表中,选择您启动的作业。

  2. 选择训练作业

    培训工作的地点.
  3. 查看各个训练作业的状态。要查看有关作业的详细信息,请在训练作业列表中选择该作业。要查看超参数调优作业启动的所有训练作业的状态摘要,请查看训练作业状态计数器

    训练作业可能处于以下状态:

    • Completed – 训练作业已成功完成。

    • InProgress – 训练作业正在进行中。

    • Stopped – 训练作业在完成之前被手动停止。

    • Failed (Retryable) – 训练作业失败,但可以重试。只有在训练作业由于出现内部服务错误而失败时,才能重试该训练作业。

    • Failed (Non-retryable) – 训练作业失败,并且无法重试。在出现客户端错误时,无法重试失败的训练作业。

    注意

    可以停止超参数调优作业并删除底层资源,但无法删除作业本身。

查看最佳训练作业

超参数调优作业使用各个训练作业返回的目标指标来评估训练作业。在超参数调优作业进行中时,最佳训练作业是迄今为止返回了最佳目标指标的作业。超参数调优作业完成后,最佳训练作业是返回了最佳目标指标的作业。

要查看最佳训练作业,可选择最佳训练作业

超参数调整作业控制台中最佳训练作业的位置。

要将最佳训练作业部署为可以在 SageMaker 端点托管的模型,请选择创建模型

下一个步骤

清理