亚马逊SageMaker自动模型调整现在会自动选择调整配置,以提高可用性和成本效率
Amazon SageMaker自动模型调整引入了Autotune,这是一项新功能,可以自动为您选择超参数。这提供了一种加速和更有效的方法来查找超参数范围,并可以为您的自动模型调整作业提供显着的优化预算和时间管理。
在本文中,我们将讨论这个新功能及其带来的一些好处。
超参数概述
在训练任何机器学习(ML)模型时,通常需要处理三种类型的数据:输入数据(也称为训练数据)、模型参数和超参数。您使用输入数据来训练您的模型,这实际上学习了您的模型参数。在训练过程中,您的ML算法试图基于数据找到最佳的模型参数,同时满足您的目标函数的目标。例如,当训练神经网络时,网络节点的权重从训练中学习,并表示它对最终预测的影响程度。这些权重是模型参数。
另一方面,超参数是学习算法的参数,而不是模型本身的参数。隐藏层数和节点数是为神经网络设置的超参数的一些示例。模型参数和超参数之间的区别在于,模型参数是在训练过程中学习的,而超参数是在训练之前设置的,并且在训练过程中保持不变。
痛点
SageMaker自动模型调整,也称为超参数调整,使用您指定的一系列超参数在数据集上运行许多训练作业。它可以通过尝试模型的许多变化来加速您的生产力。它通过专注于您指定范围内最有前途的超参数值的最佳模型自动查找最佳模型。但是,为了获得良好的结果,您必须选择正确的范围进行探索。
但是,您如何知道从一开始就选择正确的范围是什么?对于超参数调整作业,我们假设最佳的超参数集合位于我们指定的范围内。如果选择的范围不正确,最优超参数实际上落在范围之外会发生什么?
选择正确的超参数需要具有您正在使用的ML技术的经验,并且了解其超参数的行为方式。了解超参数的含义很重要,因为您选择调整的每个超参数都有可能增加成功调整作业所需的试验次数。您需要在为调整作业分配的资源和实现您设定的目标之间达到最佳的权衡。
SageMaker自动模型调整团队在不断创新,为我们的客户优化他们的ML工作负载。 AWS最近宣布支持超参数优化的新完成条件:max runtime criteria,这是一种可以用于限制成本和运行时间的预算控制完成条件。期望的目标度量、改进监控和收敛检测监控模型的性能,并在训练作业的固定数量后帮助进行早期停止。 Autotune是自动模型调整的新功能,可帮助您节省时间,并减少在查找最佳超参数范围时浪费的资源。
Autotune的好处以及自动模型调整如何缓解这些痛点
Autotune是CreateHyperParameterTuningJob
API和HyperparameterTuner
SageMaker Python SDK中的新配置,可消除指定超参数范围、调整策略、目标度量或作业定义的所需。 Autotune会自动选择调整作业的最佳配置,有助于防止浪费资源,并提高生产力。
以下示例展示了使用Autotune时许多参数是不必要的。
以下代码使用SageMaker Python SDK创建了一个没有Autotune的超参数调整器:
estimator = PyTorch(
entry_point="mnist.py",
instance_type="ml.p4d.24xlarge",
hyperparameters={
"epochs": 1, "backend": "gloo"
},
)
tuner = HyperparameterTuner(
estimator,
objective_metric_name='validation:rmse',
objective_type='Minimize',
hyperparameter_ranges = {
"lr": ContinuousParameter(0.001, 0.1),
"batch-size": CategoricalParameter([32, 64, 128, 256, 512])
},
metric_definitions=[{...}],
max_jobs=10,
strategy="Random"
)
tuner.fit(...)
以下示例展示了在使用Autotune时许多参数是不必要的:
estimator = PyTorch(
entry_point="mnist.py",
instance_type="ml.p4d.24xlarge",
hyperparameters={
"epochs": 1, "backend": "gloo", "lr": 0.01, "batch-size": 32
},
)
tuner = HyperparameterTuner(
estimator,
objective_metric_name='validation:rmse',
objective_type='Minimize',
autotune=True
)
如果您使用API,则等效代码如下:
create_hyper_parameter_tuning_job(
HyperParameterTuningJobName=tuning_job_name,
HyperParameterTuningJobConfig=tuning_job_config,
TrainingJobDefinition=training_job_definition,
Autotune={'Mode': 'Enabled'},
)
该代码示例说明了Autotune的一些关键优点:
- 调整作业的关键选择之一是要调整哪些超参数以及它们的范围。 Autotune基于您提供的超参数列表为您做出选择。使用前面的示例,Autotune可以选择可调整的超参数是
lr
和batch-size
。 - Autotune将自动为您选择超参数范围。 Autotune使用最佳实践以及内部基准来选择适当的范围。
- Autotune自动选择选择用于训练作业的超参数值的组合的策略。
- 使用Autotune时,默认启用了早期停止。使用早期停止时,SageMaker停止由超参数调整作业启动的训练作业,当它们不太可能比先前完成的训练作业表现更好时,以避免额外的资源利用。
- 调整作业预计使用的最大资源(并行作业,最大运行时间等)将在创建调整作业记录时计算并设置。此类保留资源不会在调整作业过程中增加;这将为用户维护成本和持续时间的上限。默认将使用48小时的最大运行时间。
您可以覆盖Autotune自动选择的任何设置。例如,如果您指定自己的超参数范围,则将使用与推断范围相同的超参数范围。任何用户指定的超参数范围将优先于同名的推断范围:
estimator = PyTorch(
...
hyperparameters={
"epochs": 100, "backend": "gloo", "lr": 0.01, "beta1": 0.8
}
tuner = HyperparameterTuner(
...
hyperparameter_ranges = {
"lr": ContinuousParameter(0.001, 0.01) # takes precedence over inferred "lr"
}
Autotune作为调整作业的一部分生成一组设置。任何具有相同名称的客户指定设置都将覆盖Autotune选择的设置。除了命名的Autotune设置之外的任何客户提供的设置都将添加到Autotune选择的设置中。
检查Autotune选择的参数
Autotune减少了您通常需要花费的时间来决定要调整的初始超参数集。但是,您如何获取有关Autotune最终选择的超参数值的见解?您可以在运行调整作业的描述中获取有关为您做出的决策的信息(在DescribeHyperParameterTuningJob操作的响应中)。在提交创建调整作业的请求之后,请求将被处理,并且Autotune将设置所有缺失的字段。所有设置的字段都在DescribeHyperParameterTuningJob
操作中报告。
或者,您可以检查HyperparameterTuner
类字段以查看Autotune选择的设置。
以下是一个XGBoost示例,演示了如何使用DescribeHyperParameterTuningJob
来检查Autotune选择的超参数。
首先,我们使用自动模型调整创建调整作业:
hyperparameters = {
"objective": "reg:squarederror",
"num_round": "50",
"verbosity": "2",
"max_depth": "5", # 与范围重叠时启用Autotune
}
estimator = XGBoost(hyperparameters=hyperparameters, ...)
hp_tuner = HyperparameterTuner(estimator, autotune=True)
hp_tuner.fit(wait=False)
成功创建调整作业后,我们可以发现Autotune选择了哪些设置。例如,我们可以通过hp_tuner
给定的名称来描述调整作业:
import boto3
sm = boto3.client('sagemaker')
response = sm.describe_hyper_parameter_tuning_job(
HyperParameterTuningJobName=hp_tuner.latest_tuning_job.name
)
print(response)
然后,我们可以检查生成的响应以审查Autotune代表我们选择的设置。
如果当前的调整作业设置不令人满意,您可以停止调整作业:
hp_tuner.stop()
结论
SageMaker自动模型调整可让您通过自动搜索指定范围内的最佳超参数配置来减少调整模型所需的时间。但是,选择正确的超参数范围可能需要耗费大量时间,并且可能直接影响您的训练成本和持续时间。
在本文中,我们讨论了如何使用Autotune作为自动模型调整的一部分引入的新功能,自动为您选择初始超参数范围。这可以缩短您启动模型调整过程所需的时间。此外,您可以评估Autotune选择的范围并根据需要进行调整。
我们还展示了Autotune如何代表您自动选择最优参数设置,例如训练作业的数量、选择超参数组合的策略以及默认启用提前停止。这可以显着优化可预测的预算和时间边界。
要了解更多信息,请参阅使用SageMaker进行自动模型调整。