11月07, 2020

在 Amazon SageMaker 管道模式下使用 Horovod 实现多 GPU 分布式训练

Original URL: https://aws.amazon.com/cn/blogs/machine-learning/multi-gpu-and-distributed-training-using-horovod-in-amazon-sagemaker-pipe-mode/

当前,我们可以使用多种技术通过少量数据训练出深度学习模型,具体包括针对图像分类任务的迁移学习、少样本学习甚至是一次性学习等,也可以基于预训练的BERT或GPT2模型对语言模型进行微调。但是,在部分应用用例中我们仍然需要引入大量训练数据。例如,如果当前图像与ImageNet数据集内的图像完全不同,或者当前语言语料库只针对特定领域、而非通用类型,那么单凭迁移学习将很难带来理想的模型性能。作为深度学习研究人员,您可能需要从零开始尝试新的思路或方法。在这种情况下,我们必须使用大型数据集训练出大型深度学习模型;在找不到最佳训练方法的情况下,整个过程可能需要几天、几周甚至是几个月。

在本文中,我们将一同了解如何在Amazon SageMaker的单一实例之上运行多GPU训练,并讨论如何在Amazon SageMaker上实现高效多GPU与多节点分布式训练。

Horovod基础知识

在使用大量数据进行模型训练时,最好是将训练作业分配给多个GPU(单一实例或者多个实例)。深度学习框架提供内置方法以支持多GPU训练或分布式训练。但除此之外,还有另外一种实现方法,即直接使用分布式深度学习框架(例如Horovod)。Horovod是Uber公司打造的分布式深度学习开源框架,能够与TensorFlow、Keras、PyTorch以及Apache MXNet等一线热门深度学习工具包协同使用。Horovod使用all-reduce算法取代以往的参数服务器方法进行快速分布式训练,其中还提供多种优化方法以进一步加快分布式训练的执行速度。关于更多详细信息,请参阅遇见Horovod:面向TensorFlow的Uber开源分布式深度学习框架

为Horovod准备数据

在使用Horovod执行训练作业时,Horovod会为其集群当中的每个GPU上的工作节点启动独立的进程(每个GPU对应一个工作节点)。例如,如果您使用一个包含4 GPU的训练实例(一台Amazon SageMaker ml.p3.8xlarge或 Amazon Elastic Compute Cloud (Amazon EC2) p3.8xlarge实例)运行Horovod训练作业,则将对应启动4个工作进程。数据集本体已经出于数据并行性的需求而被拆分为多个分片,所有这4个工作节点都将分别读取自己的数据集分片。如果有40000个训练样本,则每个工作节点将获得10000个互不重复的训练样本。如果您使用Horovod进行分布式训练甚至是多GPU训练,则应事先做好数据分片准备,并指引工作节点从文件系统中读取各个分片。(某些深度学习框架可以自动执行此操作,例如PyTorch的DataParallel与DistributedDataParallel)

点击查看原文>

本文链接:https://blog.jnliok.com/post/0867pYEmzviBfvZxW37k.html

-- EOF --

Comments