Amazon SageMaker 为训练大型深度学习模型和数据集提供了最快、最简单的方法。SageMaker 分布式训练库使用分区算法,在亚马逊云科技 GPU 实例中自动拆分大型深度学习模型和训练数据集,所需时间只是手动执行时间的一小部分。SageMaker 通过两种技术实现这些效率:数据并行度和模型并行度。模型并行度将太大而无法适合单个 GPU 的模型拆分为较小的部分,然后再分配到多个 GPU 进行训练,数据并行度则拆分大型数据集以同时进行训练,从而提高训练速度。
图像分类和文本转语音等机器学习使用案例需要不断增大的计算要求和数据集。例如,2018 年发布的先进的自然语言处理 (NLP) 模型 BERT 使用了 3.4 亿个参数。现在,先进的 NLP 模型,如 T5、GPT-3、Turing-NLG 和 Megatron,已创造了新的准确性记录,但需要数百至数千亿个参数。在单个 GPU 实例上训练 T5 或 GPT-3 等模型可能需要几天的时间,从而减缓了将最新迭代部署到生产环境中的能力。此外,手动实施自己的数据和模型并行度策略可能需要进行数周的实验。
只需几行附加代码,您就可以在 PyTorch 和 TensorFlow 训练脚本中添加数据并行度或模型并行度,而 Amazon SageMaker 将为您应用选择的方法。SageMaker 将通过使用图形分区算法来平衡每个 GPU 的计算,同时最大限度地减少 GPU 实例之间的通信,从而确定拆分模型的最佳方法。SageMaker 还通过旨在充分利用亚马逊云科技中国计算和网络基础设施的算法优化您的分布式训练作业,从而实现接近线性的扩展效率,使您能够比手动实施更快地完成训练。
优势
数据并行度库
缩短训练时间
Amazon SageMaker 可以轻松地在 GPU 之间拆分训练数据,从而缩短训练时间。例如,与 Horovod 相比,在 p3dn.24xlarge 上训练 Mask R-CNN 的速度比在 SageMaker 上快 25%。由于 SageMaker 管理并行运行的 GPU 以实现最佳同步,因此可以缩短训练时间。
针对亚马逊云科技进行了优化
SageMaker 的数据并行度库提供的通信算法旨在充分利用亚马逊云科技中国网络和基础设施实现近线性的扩展效率。例如,p3dn.24xlarge 实例上的 BERT 使用 SageMaker 实现了 90% 的扩展效率,比使用开源的相同模型提高了 26%。
支持常见的机器学习框架 API
SageMaker 通过已经常用于分布式训练的相同 API 提供数据并行度优化,因此您无需学习新库。要启用数据并行度,您可以对 PyTorch 使用 DistributedDataParallel (DDP) API,并对 TensorFlow 使用 Horovod API。
模型并行度库
自动高效的模型分区
即使是经验最丰富的数据科学团队,对大型模型进行手动分区也可能需要数周的工作。Amazon SageMaker 可以通过对模型进行分析并找到在 GPU 之间对模型进行分区的最有效方法,在几秒钟内拆分模型。
最少的代码更改
要在多个 GPU 间拆分您的模型,Amazon SageMaker 只需在 TensorFlow 或 PyTorch 训练脚本中更改不到 10 行代码。您可以重复使用来自 TensorFlow、PyTorch 和 Horovod 的现有 API,以快速启动和运行。
优化资源
Amazon SageMaker 通过将您的训练批次拆分为较小的微批次,从而最大限度地利用 GPU 实例。较小的微批次通过高效的管道输送到 GPU,以保持所有 GPU 设备同时处于活动状态。
使用案例
对象检测
对于对象检测,模型训练时间通常是瓶颈,会拖慢数据科学团队的速度,因为他们要等上几天或几周才能得到结果。例如,自动驾驶汽车对象检测模型需要在大量数据上进行训练,以提高车辆感知度。SageMaker 的数据并行度库可以帮助数据科学团队高效地拆分训练数据,并快速扩展到数百甚至数千个 GPU,从而将训练时间从几天缩短到几分钟。
自然语言处理
在自然语言理解方面,数据科学家通常通过增加图层数和神经网络的大小来提高模型准确性,从而生成具有数十亿个参数(例如 GPT-2、GPT-3、T5 和 Megatron)的模型。在 GPU 之间拆分模型层和操作可能需要数周时间,但是 SageMaker 的模型并行度库会自动高效地分析和拆分模型,使数据科学团队能够在几分钟内开始训练大型模型。
计算机视觉
在计算机视觉中,硬件限制通常会迫使数据科学家选择比他们希望的小的批量大小或输入大小。例如,较大的输入可能会提高模型准确性,但可能导致内存不足错误和批量大小较小时性能较差。同样,较大的批量大小可以提高 GPU 利用率和性能,但可能会影响模型的准确性。SageMaker 分布式训练库提供了灵活性,可以使用较小的批量大小轻松高效地训练模型,或者使用较大的输入训练。