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

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

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

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

超参数调整作业的设置

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

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

在此 JSON 对象中,您将指定:

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

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

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

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

注意

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

以下代码示例显示如何使用内置的 XGB oost 算法配置超参数调整作业。该代码示例说明如何为etaalphamin_child_weight、和max_depth超参数定义范围。有关这些超参数和其他超参数的更多信息,请参阅 XGBoost 参数。

在此代码示例中,超参数优化作业的目标指标找到最大化的超参配置。validation:aucSageMaker内置算法会自动将目标指标写入 CloudWatch Logs。以下代码示例还显示了如何设置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 }

配置训练作业

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

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

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

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

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

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

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

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

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

  • MetricDefinitions— 定义训练作业发出的任何指标的名称和正则表达式。只在使用自定义训练算法时定义指标。以下代码中的示例使用了内置算法,该算法已经定义了指标。有关定义指标(可选)的信息,请参阅定义指标 指定环境变量

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

  • StaticHyperParameters— 调整作业中未调整的超参数的名称和值(可选)。

以下代码示例为XGBoost 算法内置算法的eval_metricnum_roundobjectiverate_drop、和tweedie_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. 选择 Training jobs (训练作业)

  3. 查看各个训练作业的状态。要查看有关作业的详细信息,请在训练作业列表中选择该作业。要查看超参数优化作业启动的所有训练作业的状态摘要,请查看 Training job status counter (训练作业状态计数器)

    训练作业的状态可以为:

    • Completed—训练作业成功完成。

    • InProgress—训练工作正在进行中。

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

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

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

    注意

    可以停止超参数调整作业并删除底层资源,但不能删除作业本身。

查看最佳训练作业

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

要查看最佳训练作业,请选择 Best training job (最佳训练作业)

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

下一个步骤

清除