Amazon SageMaker 自动模型调整现在会自动选择调整配置,以提高可用性和成本效率

亚马逊 SageMaker 自动模型 调整引入了自动调谐功能,这是一项代表您自动选择超参数的新功能。这为查找超参数范围提供了一种更快、更有效的方法,并且可以为您的自动模型调整工作提供显著的优化预算和时间管理。

在这篇文章中,我们将讨论这项新功能及其带来的一些好处。

超参数概述

训练任何机器学习 (ML) 模型时,通常要处理三种类型的数据:输入数据(也称为训练数据)、模型参数和超参数。您使用输入数据来训练模型,这实际上会学习您的模型参数。在训练过程中,您的机器学习算法会尝试根据数据找到最佳模型参数,同时满足目标函数的目标。例如,训练神经网络时,会从训练中得知网络节点的权重,并表明它对最终预测的影响程度。这些权重是模型参数。

另一方面,超参数是学习算法的参数,而不是模型本身。隐藏层的数量和节点的数量是您可以为神经网络设置的超参数的一些示例。模型参数和超参数的区别在于,模型参数是在训练过程中学习的,而超参数是在训练之前设置的,在训练过程中保持不变。

痛点

SageMaker 自动模型调整(也称为超参数调整)使用您指定的一系列超参数在您的数据集上运行许多训练作业。它可以通过尝试模型的多种变体来提高您的工作效率。它通过聚焦您指定范围内最有希望的超参数值组合来自动寻找最佳模型。但是,为了获得良好的结果,你必须选择正确的范围进行探索。

但是,一开始你怎么知道正确的范围是什么?在超参数调整作业中,我们假设最佳的超参数集位于我们指定的范围内。如果所选范围不正确,而最优超参数实际上不在范围之内,会发生什么?

选择正确的超参数需要您对正在使用的 ML 技术有经验并了解其超参数的行为方式。了解超参数的含义很重要,因为你选择调整的每个超参数都有可能增加成功调优工作所需的试验次数。你需要在分配给调优工作的资源和实现你设定的目标之间做出最佳的权衡。

SageMaker 自动模型调整团队不断代表我们的客户进行创新,以优化他们的 ML 工作负载。亚马逊云科技 最近 宣布 支持超参数优化的新完成标准:最大运行时标准,这是一种可用于限制成本和运行时间的预算控制完成标准。所需的目标指标、改进监控和收敛检测可监控模型的性能,如果模型在完成一定数量的训练作业后仍未改善,则有助于提早停止。Autotune 是自动模型调整的一项新功能,可帮助您节省时间并减少在寻找最佳超参数范围时浪费的资源。

自动调谐的好处以及自动模型调整如何缓解这些痛点

Autotune 是 createHyperParameterTuningJob API 和 HyperParameterTuner SageMaker Python SDK 中的一项新配置,它无需指定超参数范围、调整策略、目标指标或作业 定义中所需的作业数量。Autotune 会自动为您的调优工作选择最佳配置,有助于防止浪费资源并提高工作效率。

以下示例显示了使用 Autotune 时有多少参数不是必需的。

以下代码使用不带自动调谐的 SageMaker Python SDK 创建超参数调谐器:

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 和批处理大小。
  • 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最终选择了哪些超参数值呢?你可以在正在运行的调整作业的描述中(在 desc ribeHyperParameter TuningJob 操作的响应中)中获得有关为你做出的决策的信息。在您提交创建调整任务的请求后,请求将得到处理,所有缺失的字段均由 Autotune 设置。所有设置的字段都在 describeHyperParam eterTuningJob 操作 中报告。

或者,你可以检查 HyperParameterTuner 类字段以查看 Autotune 选择的设置。

以下是 XgBoost 的示例, 说明如何使用 describeHyperParameterTuningJob 来检查 Autotune 选择的超参数

首先,我们使用自动模型调整来创建调优作业:

hyperparameters = {
    "objective": "reg:squarederror",
    "num_round": "50",
    "verbosity": "2",
    "max_depth": "5",  # overlap with ranges is ok when Autotune is enabled
}
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 如何自动代表你选择最佳参数设置,例如训练作业的数量、选择超参数组合的策略以及默认情况下启用提前停止。这可以显著优化预算和时间范围,易于预测。

要了解更多信息,请参阅 使用 Sage Maker 执行自动模型调整


作者简介

Jas Singh 是一名高级解决方案架构师,通过大规模设计和实施创新和弹性解决方案,帮助公共部门客户实现业务成果。Jas 在设计和实施关键任务应用程序方面拥有 20 多年的经验,并拥有贝勒大学的计算机科学硕士学位。

Gopi Mudiyala 是 亚马逊云科技 的高级技术客户经理。他帮助金融服务行业的客户在 亚马逊云科技 中开展业务。作为机器学习爱好者,Gopi 致力于帮助客户在机器学习之旅中取得成功。在业余时间,他喜欢打羽毛球、与家人共度时光和旅行。

Raviteja Yelamanchili 是亚马逊网络服务的一名企业解决方案架构师,总部设在纽约。他与大型金融服务企业客户合作,在云上设计和部署高度安全、可扩展、可靠和具有成本效益的应用程序。他拥有超过11年的风险管理、技术咨询、数据分析和机器学习经验。当他不帮助客户时,他喜欢旅行和玩PS5。

亚罗斯拉夫·谢尔巴蒂 是 亚马逊云科技 的机器学习 工程师。他主要致力于改进亚马逊 SageMaker 平台并帮助客户最好地使用其功能。在业余时间,他喜欢去健身房,做户外运动,例如滑冰或徒步旅行,以及赶上新的人工智能研究。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。