亚马逊云科技精选博客
我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
使用 Amazon SageMaker Hyperband 自动模型调整有效解决分布式训练融合问题
近年来,深度学习神经网络 (DNN) 取得了惊人的发展。这种增长可以从更精确的模型中看出,甚至可以通过生成式人工智能开辟新的可能性:合成自然语言的大型语言模型 (LLM)、文本到图像生成器等等。DNN 能力的增强伴随着大规模模型的成本,这些模型需要大量的计算资源才能进行训练。分布式训练通过两种技术解决了这个问题:数据并行性和模型并行性。数据并行性用于在多个节点和工作节点上扩展训练过程,模型并行性会拆分模型并将其拟合到指定的基础架构上。 借助
在分布式环境中进行高效训练需要调整超参数。在多个 GPU 上训练时,一个常见的良好做法示例是将批处理(或小批量)大小乘以 GPU 数量,以保持每个 GPU 的批次大小相同。但是,调整超参数通常会影响模型的收敛性。因此,分布式训练需要平衡三个因素:分布、超参数和模型精度。
在这篇文章中,我们探讨了分布式训练对收敛的影响,以及如何使用
这篇文章中提到的源代码可以在
将训练从单一环境扩展到分布式环境
数据并行化是一种将训练过程扩展到多种计算资源并缩短训练时间的方法。使用数据并行性,数据在计算节点之间进行分区,每个节点根据其分区计算梯度并更新模型。这些更新可以使用一个或多个参数服务器以异步、一对多或全对所有的方式完成。另一种方法是使用 AllReduce 算法。例如,在 ring-allreduce 算法中,每个节点仅与两个相邻节点通信,从而减少了总体数据传输。要了解有关参数服务器和 ring-allreduce 的更多信息,请参阅
为了演示横向扩展训练对模型收敛的影响,我们进行了两个简单的实验:
- 使用 MxNet 和 Gluon 框架,使用具有 ReLU 激活功能的全连接层 DNN 训练图像分类模型。对于训练数据,我们使用了手写数字的
MNIST 数据集 。我们使用了SageMaker 示例存储库 中提供的源代码。 - 使用
SageMaker 内置 XgBoost 算法训练二进制 分类模型。 我们使用直销数据集 来预测可能以特定报价做出回应的银行客户。重现实验的源代码和步骤可以在GitHub存储库 中找到。
每个模型训练运行两次:在单个实例上,分布在多个实例上。对于 DNN 分布式训练,为了充分利用分布式处理器,我们将小批量大小乘以实例数(四个)。下表汇总了设置和结果。
Problem type | Image classification | Binary classification | ||
Model | DNN | XGBoost | ||
Instance | ml.c4.xlarge | ml.m5.2xlarge | ||
Data set |
(带标签的图片) |
(tabular, numeric and vectorized categories) |
||
Validation metric | Accuracy | AUC | ||
Epocs/Rounds | 20 | 150 | ||
Number of Instances | 1 | 4 | 1 | 3 |
Distribution type | N/A | Parameter server | N/A | AllReduce |
Training time (minutes) | 8 | 3 | 3 | 1 |
Final Validation score | 0.97 | 0.11 | 0.78 | 0.63 |
对于这两个模型,分布因子几乎线性地缩短了训练时间。但是,模型收敛性大幅下降。对于两种不同的模型、不同的计算实例、不同的分配方法和不同的数据类型,这种行为是一致的。那么,为什么分布训练过程会影响模型的准确性呢?
有许多理论试图解释这种影响:
- 当张量更新规模较大时,工作人员和参数服务器之间的流量可能会变得拥塞。因此,由于权重更新的延迟,异步参数服务器的收敛性会大大降低 [1]。
- 增加批量大小会导致过度拟合和概化不佳,从而降低验证精度 [2]。
- 异步更新模型参数时,有些 DNN 可能没有使用最新更新的模型权重;因此,他们将根据延迟几次迭代的权重来计算梯度。这会导致体重陈旧 [3],可能由多种原因引起。
- 一些超参数是特定于模型或优化器的。例如,XgBoost 官方文档说,
tree_mod
e 超参数的确切
值不支持分布式训练,因为 XgBoost 采用行拆分数据分布,而精确
的 树方法适用于排序列格式。 - 一些研究人员提出,配置更大的迷你批次可能会降低随机性的梯度。当损失函数包含局部最小值和鞍点并且没有更改步长,优化停留在局部最小值或鞍点时,就会发生这种情况 [4]。
针对分布式训练进行优化
超参数优化 (HPO) 是搜索和选择一组最适合学习算法的超参数的过程。SageMaker 自动模型调整 (AMT) 通过在提供的数据集上运行多个训练作业,将 HPO 作为托管服务提供。SageMaker AMT 会搜索您指定的超参数范围并返回最佳值,这些值由您选择的指标进行测量。您可以将 SageMaker AMT 与内置算法一起使用,也可以使用您的自定义算法和容器。
但是,分布式训练的优化不同于普通的 HPO,因为每个作业实际上不是启动一个实例集群,而是每个训练作业启动一个实例集群。这意味着对成本的影响更大(特别是如果您考虑昂贵的 GPU 加速实例,这在 DNN 中很常见)。除了
在下一节中,我们将使用前面讨论的 XgBoost 示例配置、运行和分析 AMT 作业时看到这些功能的实际应用。
配置、运行和分析调整作业
如前所述,源代码可以在 b3 估计器(分布式 X
gBoost 估计器设置为使用三个实例),运行训练作业,然后观察结果。在本节中,假设你已经完成了步骤 1—5,我们将介绍如何为该估算器设置调整作业。
调优作业通过使用评估性能的指标来计算其启动的训练作业的最佳超参数。 stdout
,也可以使用 SageMaker 内置算法的指标。
我们调整了七个超参数:
- num_round — 训练期间需要提升的回合数。
- eta — 更新中使用的步长缩小以防止过度拟合。
- alpha — 关于权重的 L1 正则化项。
- min_child_weig h t — 孩子所需的实例权重(黑森州)的最小总和。如果树分区步骤生成的叶节点的实例权重总和小于
min_child_
weight ,则构建过程将放弃进一步的分区。 - 最大深度 - 树的最大深度。
- colsample_bylevel — 每个级别中每个分割的列的子样本比例。树中每达到一个新的深度等级,就会进行一次子采样。
- colsample_bytree — 构造每棵树时列的子样本比例。对于构造的每棵树,子采样发生一次。
接下来,我们使用 Sage yperbandStrategyConfig
可以使用两个参数: max_resou
rce (可选)表示训练作业用于实现目标的最大迭代次数; min_resou
rce — 训练作业在停止训练之前使用的最小迭代次数。我们使用 HyperbandStrategyConfig
来配置 StrategyConfig
,稍后会将其用于调整作业定义。参见以下代码:
现在我们创建一个 HyperParameterTuner
对象,我们将以下信息传递给该对象:
- xgBoost 估算器,设置为使用三个实例运行
- 客观指标的名称和定义
- 我们的超参数范围
- 调整资源配置,例如要运行的训练作业总数以及可以并行运行的训练作业数量
- 超频段设置(我们在上一步中配置的策略和配置)
提前停止(
提前停止类型)设置为关闭
为什么我们将 “提前停车” 设置为 “关闭”?当训练作业不太可能改善超参数调整作业的客观指标时,可以提前停止。这可以帮助减少计算时间并避免模型过度拟合。但是,Hyperband 使用先进的内置机制来进行提前停止。因此,在使用 H yperband 内部提前停止功能 时, 必须将参数 early_stopping_
type 设置为 关
。参见以下代码:
最后,我们通过调用 t
设置 为 False
。参见以下代码:
您可以在 SageMaker 控制台上关注作业进度和摘要。在导航窗格的 “ 训练” 下 ,选择 超参数调整作业 ,然后选择相关的调整作业。以下屏幕截图显示了调整作业,其中包含有关训练作业状态和性能的详细信息。
调整工作完成后,我们可以查看结果。在笔记本示例中,我们展示了如何使用 SageMaker SDK 提取结果。首先,我们研究调整工作如何提高模型的收敛性。 HyperParameterTuner
对象并调用描述方法。
在以下代码中,我们检索了表现最好的训练工作的价值,该值以我们的客观指标(验证 AUC)来衡量:
验证集上的 AUC 结果为 0.78。与最初的 0.63 相比,这是一个显著的改进!
接下来,让我们看看我们的训练任务运行得有多快。为此,我们使用 SDK 中的
让我们看看使用 Hyperband 策略进行训练作业所花费的平均时间:
平均时间约为 1 分钟。这与 Hyperband 策略机制一致,该机制可尽早阻止训练工作表现不佳。在成本方面,调音工作共向我们收取了30分钟的培训时间。如果不提前停止 Hyperband,则总计费训练时长预计为 90 分钟(30 个作业 x 每个作业 1 分钟 x 每个作业 3 个实例)。这在节省成本方面好了三倍!最后,我们看到调优作业运行了 30 个训练作业,总共花了 12 分钟。这比预期时间减少了将近 50%(30 个作业/4 个任务并行完成 * 每个作业 3 分钟)。
结论
在这篇文章中,我们描述了在分布式环境中训练模型时观察到的一些收敛问题。我们看到,使用Hyperband的SageMaker AMT解决了优化数据并行分布式训练所引入的主要问题:融合(提高了10%以上)、运营效率(调整工作所需的时间比连续的非优化作业少50%)和成本效益(30分钟,而训练作业的计费时间为90分钟)。下表总结了我们的结果:
Improvement Metric | No Tuning/Naive Model Tuning Implementation | SageMaker Hyperband Automatic Model Tuning | Measured Improvement |
Model Quality (Measured by validation AUC) |
0.63 | 0.78 | 15% |
Cost (Measured by billable training minutes) |
90 | 30 | 66% |
Operational efficiency (Measured by total running time) |
24 | 12 | 50% |
为了对扩展(集群大小)进行微调,您可以使用多个集群配置重复调整作业,并比较结果,找到满足速度和模型精度的最佳超参数。
我们在
参考文献
[1] Lian、Xiangru 等“异步去中心化并行随机梯度下降。” 机器学习国际会议 。PMLR,2018。
[2] Keskar、Nitish Shirish 等。“论深度学习的大批量训练:广义差距和极小值。” arxiv 预印本 arxiv: 1609.04836 (2016)。
[3] Dai、Wei 等。“努力理解陈旧对分布式机器学习的影响。” arxiv 预印本 arxiv: 1810.03264 (2018)。
[4] Dauphin、Yann N. 等。“识别和解决高维非凸优化中的鞍点问题。” 神经信息处理系统的进展 27 (2014)。
作者简介
乌里·罗森伯格是欧洲、中东和非洲的人工智能和机器学习专业技术经理。Uri 总部位于以色列,致力于让企业客户能够大规模设计、构建和运营 ML 工作负载。在业余时间,他喜欢骑自行车、徒步旅行和抱怨数据准备。