Masafumi Yamazaki 等作者杜伟 Chita编译

2048块GPU再次加速SGD:富士通74.7秒完成ResNet-50 训练

随着训练数据越来越大,我们需要一种高效的训练方法,而今年提出了很多大批量、大学习率的大规模分布式训练方法。例如 2018 年 8 月,fast.ai 学员在 18 分钟内成功完成训练 ImageNet 的任务,准确率达到 93%(128 块 V100 GPU);腾讯在 ImageNet 数据集上以 64K 的批量大小用 4 分钟训练好 AlexNet、6.6 分钟训练好 ResNet-50(1024-2048 块 Tesla P40);索尼随后以 34K 到 64K 的批量大小用 224 秒在 ImageNet 训练 ResNet-50(2176 块 V100 GPU)。

这一次,来自富士通的研究人员用上了 2048 块 GPU,以 81,920 的批量大小用 74.7 秒完成了 ResNet-50 训练。

在大规模数据集上训练的深度神经网络(DNN)在目标检测、语言翻译等多个领域取得了令人印象深刻的结果。但是,随着 DNN 模型和数据集规模不断增加,DNN 训练的计算成本也随之增长。众所周知,数据并行的分布式深度学习在集群上执行训练,是一种有效的加速方法。在这种方法中,集群上启动的所有进程具有相同的 DNN 模型和权重。每一个进程用不同的小批量(mini-batch)来训练模型,并结合来自所有进程的权重梯度以更新所有权重。这种通信开销成为大型集群的一大问题。为了减少大型集群的开销,来自富士通的研究人员增加 DNN 的批量大小,并以并行方式执行 DNN 训练。但是,large mini-batch 的训练通常会导致 DNN 模型的验证准确率下降。所以,研究人员使用了几项技术来增加批量大小(每次迭代中计算的输入图像数量),同时不影响验证准确率

来自富士通的研究人员使用 AI Bridging Cloud Infrastructure(ABCI)集群(具有 2048 个 GPU)和自优化的 MXNet 深度学习框架来执行实验,结果 74.7 秒内在 ImageNet 上使 ResNet-50 的验证准确率达到 75.08%,使用的批量大小为 81920。

一般而言,大型集群上分布式深度学习的批量大小应该很大。Goyal 等人 [2] 提议使用预热(warm-up)技术来保持使用批量大小为 8192 时的验证准确率。谷歌 [3] 和索尼 [7] 采用可变且增加了的批量大小实现了高度并行化处理。

所以,每一层的权重梯度范数权重范数之间的差异导致了训练的不稳定,[10] 使用层级自适应速率缩放(Layer-wise Adaptive Rate Scaling,LARS)规范了每一层的差异,使 DNN 可以在不影响验证准确率的情况下以 32768 的批量大小进行训练。

方法

准确率提升

研究者采用了深度学习优化器中常用的随机梯度下降法(SGD)。当使用 large mini-batch 训练时,SGD 更新数量会随着小批量的增加而减少。所以,提高 large mini-batch 上最终验证准确率是一个很大的挑战,研究者采取了以下方法:

1)控制学习率:由于更新数量较小,研究人员需要采用较高的学习率来加速训练。但是,较高的学习率会导致模型在早期阶段训练不稳定。因此,研究人员采用能够逐步提升学习率的预热技术来稳定 SGD。此外,所有层都用相同的学习率对于某些层来说太高了,所以研究人员还使用层级自适应速率缩放(LARS)[10] 来稳定训练,该方法根据权重范数和梯度范数调整每一层的学习率

对于权重收敛,研究人员尝试了步长、多项式以及线性等多种学习率衰减模式。此外,研究人员在多次试验的基础上采用了优化的权重衰减模式。

2)其他技术:先前的研究 [7] 使用标签平滑(label smoothing)[11] 在小批量大小为 32,768 的情况下实现了准确率提升。因此本论文作者也采用了这种方法,并证实该方法可在批量大小为 81,920 的情况下提高准确率

批归一化层均值和方差的移动平均值(moving average)在每一进程中单独进行计算,其中权重也是同步的。这些值在 large mini-batch 训练中变得不准确,所以研究人员微调一些超参数以优化移动平均值。

表 1:ImageNet 上 ResNet-50 的训练时间和 top-1 验证准确率

框架优化

研究人员使用以 C++ 和 CUDA C 语言写就的开源深度学习框架 MXNet,该框架提供多种语言绑定。MXNet 具有灵活性和可扩展性,能够高效地在集群上训练模型。但是,在中小规模集群环境中仅占总时间一小部分的部分进程可能成为大型集群环境的瓶颈。研究人员使用多种分析器来分析 CPU 和 GPU 性能,并找出瓶颈问题。研究人员用以下方法优化了瓶颈,以提高训练吞吐量:

1)并行 DNN 模型初始化:在数据并行分布式深度学习中,所有层必须初始化,以使所有进程中的权重具有相同的值。一般而言,根进程(root process)初始化模型的所有权重。之后,根进程将这些权重广播到所有进程。广播时间随进程数量的增加而延长,当分布式深度学习具有数千个进程时,广播操作成本不可忽视。因此,研究人员采用其它初始化方法:每一进程拥有相同的种子,然后以并行化方式初始化权重。该方法可以在没有广播操作的情况下同步初始权重

2)GPU 上的批量范数计算:每层的范数计算都是必要的,以使用 LARS 更新权重。与 GPU 上的内核数量相比,ResNet-50 网络的大部分层没有足够数量的权重。如果我们计算 GPU 上每层的权重范数,就会发现线程的数量不足以占据所有 CUDA 内核。因此,研究人员实现了一个特殊的 GPU 内核,以在 MXNet 中批量进行范数计算。该 GPU 内核可以启动足够数量的线程,并且可以并行计算所有层的范数

通信优化

分布式并行深度学习需要 allreduce 通信,以在所有进程之间交换每一层的梯度。在大型集群环境中,allreduce 通信开销是不可忽略的,因为由于每个 GPU 的批量大小变小,通信时间变得更长,而计算时间变得更短。为了解决这些问题,研究人员采用了以下两种优化方法。

1)调节通信的数据大小:深度学习模型由很多层组成,而梯度的数据大小因层而异。每层的 allreduce 操作会由于频繁调用通信而导致大量开销,而如果梯度的数据大小变小了,情况会变得更糟,因为网络带宽无法被高效使用。因此,扩大 allreduce 的数据大小非常重要。研究人员收集了各层的梯度,然后将 allreduce 的数据大小调整为几兆字节。

2)做最佳的通信调度:研究人员开始对部分层执行 allreduce 操作,而没有等所有层完成。这导致 allreduce 操作与反向处理重叠。开始 allreduce 操作的时机应是梯度的数据大小大于阈值时。每个进程需要与其它进程保持同步,因为每个进程只能发送相同层的梯度。使用 allgather 操作通常可以找到完成的层,但是这会导致额外的开销。为了去掉这项开销,研究人员预先以统计的方式将所有层分为好几组。一旦每个进程完成一组中所有层的反向处理,就计划开始 allreduce 操作。

环境和实验结果

研究人员使用 ABCI 集群来评估其基于 MXNet 的优化框架的性能。ABCI 集群的每个节点由两个 Xeon Gold 6148 CPU、四个英伟达 Tesla V100 SXM2 GPU 组成。另外,一个节点上的 GPU 通过 NVLink 连接,节点还具有两个 InfiniBand 网卡。

图 1:ABCI 集群中的计算节点图解。它由两个 CPU、四个 GPU 以及两个连接相应 CPU 的 HCA 组成。

图 3:在 49,152 或更大规模的批量大小上训练的 top-1 验证准确率

论文:Yet Another Accelerated SGD: ResNet-50 Training on ImageNet in 74.7 seconds

论文链接:https://arxiv.org/abs/1903.12650

摘要:人们对于能够快速执行机器学习的算法有有着强烈的需求,而深度学习的速度仅在过去两年就加快了 30 倍。使用 large mini-batch 的分布式深度学习是解决这个需求的关键技术,也是一项巨大的挑战,因为在不影响准确率的情况下,很难在大型集群上达到很高的可扩展性。在本文中,研究人员引入优化方法来应对这个挑战。他们应用这些方法在 ABCI 集群上使用 2,048 个 GPU 在 74.7 秒时间内完成训练。训练吞吐量为 173 万张图像/秒,top-1 验证准确率为 75.08%。

理论分布式深度学习ResNetSGD富士通GPU
2
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

范数技术

范数(norm),是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,是一个函数,其为向量空间内的所有向量赋予非零的正长度或大小。半范数反而可以为非零的向量赋予零长度。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

随机梯度下降技术

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

MXNet技术

MXNet是开源的,用来训练部署深层神经网络的深度学习框架。它是可扩展的,允许快速模型训练,并灵活支持多种语言(C ++,Python,Julia,Matlab,JavaScript, Go,R,Scala,Perl,Wolfram语言)

批归一化技术

批归一化(Batch Normalization,BN)由谷歌于2015年提出,是一个深度神经网络训练的技巧,它不仅可以加快模型的收敛速度,还能在一定程度上缓解深层网络中的“梯度弥散”问题,从而使得训练深层网络模型更加容易和稳定。目前BN已经成为几乎所有卷积神经网络的标配技巧了。从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

腾讯机构

腾讯科技股份有限公司(港交所:700)是中国规模最大的互联网公司,1998年11月由马化腾、张志东、陈一丹、许晨晔、曾李青5位创始人共同创立,总部位于深圳南山区腾讯大厦。腾讯由即时通讯软件起家,业务拓展至社交、娱乐、金融、资讯、工具和平台等不同领域。目前,腾讯拥有中国国内使用人数最多的社交软件腾讯QQ和微信,以及中国国内最大的网络游戏社区腾讯游戏。在电子书领域 ,旗下有阅文集团,运营有QQ读书和微信读书。

http://www.tencent.com/
目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

推荐文章
暂无评论
暂无评论~