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

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

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

要配置和启动超参数优化作业,请完成以下步骤。

指定超参数优化作业设置

要指定超参数优化作业的设置,您需要定义 JSON 对象。创建优化作业时,将对象作为 HyperParameterTuningJobConfig 参数的值传递给 CreateHyperParameterTuningJob

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

  • 要优化的超参数的范围。有关更多信息,请参阅 定义超参数范围

  • 超参数优化作业可以使用的资源限制。

  • 超参数优化作业的目标指标。目标指标是超级参数优化作业用于评估所启动训练作业的指标。

    注意

    要使用自己的算法来实现超参数优化,您需要为您的算法定义指标。有关信息,请参阅定义指标

超级参数优化作业定义 内置算法的 etaalphamin_child_weightmax_depth 和 超级参数XGBoost 算法的范围。超级参数优化作业的目标指标最大化算法发送到 validation:auc 的 CloudWatch Logs 指标。

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" } }

配置训练作业

要配置优化作业启动的训练作业,请定义作为 TrainingJobDefinition 调用的 参数值CreateHyperParameterTuningJob传递的 JSON 对象。

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

  • 可选 — 训练作业发出的指标。

    注意

    只在使用自定义训练算法时定义指标。因为此示例使用内置算法,您无需指定指标。有关定义指标的信息,请参阅定义指标

  • 指定训练算法的容器镜像。

  • 您的训练和测试数据的输入配置。

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

  • 未在优化作业中进行优化的算法超级参数的值。

  • 用于训练作业的实例的类型。

  • 训练作业的停止条件。这是各个训练作业的最长持续时间。

在本示例中,我们设置内置算法的 eval_metric num_roundobjectiverate_droptweedie_variance_powerXGBoost 算法 参数的静态值。

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 } }

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

现在,您可为超参数优化作业提供名称,然后通过调用 CreateHyperParameterTuningJob API 来启动它。传递您在之前步骤中创建的 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)

下一步

监控超参数优化作业的进度