计算机系统应用教程网站

网站首页 > 技术文章 正文

「24分钟训练完ImageNet创纪录」ResNet仅需120万美元挑战Facebook

btikc 2024-09-09 01:42:55 技术文章 11 ℃ 0 评论

1新智元报道

此前我们报道过, Facebook 人工智能实验室与应用机器学习团队合作,提出了一种新的方法,能够大幅加速机器视觉任务的模型训练过程,仅需 1 小时就训练完 ImageNet 这样超大规模的数据集。在最高性能的情况下,Facebook 的新系统,在不牺牲生成模型质量的前提下,每秒使用 256 颗 GPU 训练 40,000 张图像。

Facebook 1 小时训练 ImageNet 的论文发布以后,引起了很多研究者的关注。日前,UC Berkeley、TACC 和 UC Davis 的研究人员发表论文,宣布只用了 24 分钟就完成了 100-epoch ImageNet 的 AlexNet 训练;同时,和 Facebook 的研究结果(Goyal et al. 2017)一样,我们用一小时完成了 90-epoch ImageNet 的 ResNet-50 的训练。然而,我们的硬件只用了 120 万美元,比 Facebook 的410 万低了 3.4 倍。让我们来关注一下他们的研究成果。

花 24 分钟用 AlexNet 完成了 100-epoch ImageNet 的训练;仅用120万美元完成了 90-epoch ImageNet 的 ResNet-50 的训练

对于深度学习应用来说,更大的数据集和更大的模型能够带来准确度的显著提升(Amodei et al.2015),但代价是会花费更长的训练时间。举例来说,用英伟达M40 GPU 完成 90-epoch ImageNet-1k 的ResNet-50 训练要花 14 天。

这一训练总共要进行 10 的 18 次方的单精度运算。另一方面,世界上目前最快的超级计算机每秒能完成 2*10的17次方 的单精度运算(Dongarra et al. 2017)。如果我们能够充分利用超级计算机进行 DNN 训练,理论上我们可以在用5 秒钟完成 90-epoch ImageNet-1k 的ResNet-50 训练。然而,目前 DNN 快速训练的瓶颈在于算法层面。具体来说,目前的 batch size (e.g. 512) 太小,无法有效利用多处理器。因此,我们需要设计出用于可规模化的 DNN 训练的并行算法。

对于大规模 DNN 训练来说,使用更大的batch size 是必须的。然而,目前方法仅能将 batch size 分别扩展到 1024 (用于 AlexNet)和 8192 (用于 ResNet-50)。更大的 batch size 会带来明显的精度损失。本论文中,我们使用了 Layer-wiseAdaptive Rate Scaling(LARS)算法(You, Gitman, andGinsburg 2017),使我们可以在不损失精度的条件下将 batch size 扩展到很大(e.g. 32k)。

较大的 batch size 使我们可以有效使用分布系统。我们花了24 分钟就完成了 100-epoch ImageNet 的 AlexNet 训练,创造了世界纪录。和 Facebook 的研究结果(Goyal et al. 2017)一样,我们用一小时完成了 90-epoch ImageNet 的 ResNet-50 的训练。然而,我们的硬件只用了 120 万美元,比 Facebook 的410 万低了 3.4 倍。

论文摘要

用英伟达 M40 GPU 完成 90-epoch ImageNet-1k 的ResNet-50 训练要花14 天。这一训练总共要进行 10 的 18 次方的单精度运算。另一方面,世界上目前最快的超级计算机每秒能完成2*10的17次方的单精度运算(Dongarra et al. 2017)。如果我们能够充分利用超级计算机进行 DNN 训练,理论上我们可以在用5 秒钟完成 90-epoch ResNet-50 训练。然而,目前 DNN 快速训练的瓶颈在于算法层面。具体来说,目前的 batch size 太小(e.g. 512),无法有效利用多处理器。

在大规模 DNN 训练中,我们着眼于在固定epochs 中不损失准确度的条件下使用大批量数据并行同步 SGD。 LARS 算法(You, Gitman, and Ginsburg 2017)使我们可以将 batch size 扩展到很大(e.g. 32K)。我们花 24 分钟用 AlexNet 完成了 100-epoch ImageNet 的训练,创造了世界纪录。和 Facebook 的研究结果(Goyal et al. 2017)一样,我们用一小时完成了 90-epoch ImageNet 的 ResNet-50 的训练。然而,我们的硬件只用了 120 万美元,比 Facebook 的410 万低了 3.4 倍。

大批量训练DNN的难题:能够在5秒内训练完50层的ResNet吗?

使用参数服务器的异步方法无法保证在大型系统上稳定。对于非常大的DNN训练,数据并行同步方法更加稳定。这个想法也很简单——通过为SGD使用大的批量大小,每次迭代的工作可以轻松分配到多个处理器。理想情况下,ResNet-50需要772亿次单精度操作来处理一个225x225的图像。如果我们为ImageNet数据集运行90次(epoch),运算数为90*128万*77.2亿(10的18次方)。目前,最强大的超级计算机每秒可完成200×1015次单精度运算。如果有一种算法可以充分利用超级计算机,我们可以5秒内完成ResNet-50的训练。

为此,我们需要让算法使用更多的处理器,并在每次迭代时加载更多的数据。我们使用一台NVIDIA M40 GPU来说明一台机器的情况。在一定范围内,更大的批量将使单个GPU的速度更高(图2)。原因是低级矩阵计算库将更有效。对于使用ImageNet训练AlexNet模型,每个GPU的最佳批量大小为512。 如果想要使用许多GPU并使每个GPU都有效,我们需要更大的批量大小。例如,如果我们有16个GPU,那么我们应该将批量大小设置为16×512 = 8192。理想情况下,如果我们固定总数量访问量,随着处理器数量的增加相应呈线性增加批量大小,那么SGD迭代次数将会线性减小,每次迭代的时间成本保持不变,因此总时间也将随处理器数量线性减少(表1)。

然而,如果批量大的SGD运行相同数量的epoch,精度通常比小的批量要低得多,而目前也尚未有一种可以有效地使用非常大的批量的算法。表2显示了标准基准的目标精度。例如,当设置AlexNet的批量大于1024或ResNet-50的批量大小大于8192时,测试精度将显着降低(表4和图3)。

在训练大的批量的时候,我们需要确保在运行相同数量的epoch的情况下,实现与小的批量差不多的测试精度。在这里我们固定了epoch的数量,因为:在统计上,一个epoch意味着算法会触及整个数据集一次;而在计算上,固定epoch的数量意味着固定浮点运算的数量。训练大批量最先进的方法包括两种技术:

  • 线性缩放(Linear Scaling,Krizhevsky 2014):将批量从B增加到kB,那么也应该将学习率从η增加到kη。

  • 预热策略(Warmup Scheme,Goyal等人,2017):如果使用较大的学习率(η),应该从小的η值开始,然后在前几个epoch将其增加到大的η。

通过这些技术,研究人员可以在一定范围内使用相对较大的批量(表3)。然而,我们观察到,即使最先进的方法,也只能将批量大小缩小到AlexNet的1024,而ResNet-50,更是只能将批量大小缩小为8192。如果我们将AlexNet的批量增加到4096,我们在100个epoch只能达到53.1%的精度(表4)。而我们的目标是,即使使用大批量,也能实现58%的精度。

层次自适应速率缩放(LARS),扩大批量,提升精度

为了提高大批量训练的准确性,我们使用了一种新的更新学习率(LR)规则。在这里我们考虑单机情况,使用w = w - η?w来更新权重。使用数据并行方法,可以用相同的方式处理多机器版本。

每个层都有自己的权重w和梯度?w。标准SGD算法对所有层使用相同的LR(η)。然而,从我们的实验中,我们观察到不同的层可能需要不同的LR。原因是||w||2 和 ||?w||2 之间的比率不同的层有很大的不同。

例如,我们观察到conv1.1层的||w||2/||?w||2仅为20(表5)。但是,对于fc6.1层,||w||2/||?w||2则是3690。为加快DNN训练,对于fc6.1层,用户需要使用大的LR。然而,这个大的LR可能导致conv1.1层出现问题。我们认为,这是大批量训练难以优化的重要原因。Goyal等人在2017年提出了预热策略来解决这个问题。预热策略适用于ResNet50训练(批次大小≤8192)。但是,仅使用这种方法,对于批量大小 >1024的AlexNet和批量大小 >8192的ResNet-50不起作用。

在本文中,我们使用LARS算法来解决这个问题。基本LR规则在等式(1)中定义。l是缩放因子,我们在AlexNet和ResNet训练中将l设置为0.001。γ是用户的调整参数。通常一个好的γ,值都在[1,50]之间。在这个等式中,不同的层可以有不同的LR。实际上,我们向SGD添加动量(用μ表示)和权重衰减(用β表示),并对LARS使用以下序列:

得到每个可学习参数的本地LR,

得到每个层的真实LR,为η=γ×α;

通过?w=?w+βw更新梯度;

通过a =μa+η?w更新加速项a;

用w = w - a来更新权重。

使用这种方法预热(warmup),用有大的批量的SGD可以实现与基准相同的精度(表6)。为了扩展到更大的批量大小(例如32k),我们需要将本地响应规范化(LRN)更改为批量归一化(BN)。我们在每个卷积层之后添加BN。从图3可以清楚地观察到LARS的影响。

LARS可以帮助ResNet-50保持高的测试精度。当前的方法(线性缩放和预热)对于批量大小为16k和32k(68%和56%)的精度要低得多。目标精度约为73%。

实验结果

我们在本文中使用的数据集是ImageNet(1k个类别)(Deng等人,2009)。我们的ResNet-50基线的准确性略低于最先进的结果(73%对76%)。原因是我们没有使用数据增强。对于没有数据增强的版本,我们可以得到最先进的精度(90个epoch,73%)。本文中提到的精度意味着Top-1测试精度。时间表示训练时间。对于KNL实现,我们有两个版本:

  1. 基于Caffe(Jia等人,2014)编写了KNL代码,用于单机处理,并使用MPI(Gropp等人,1996)进行KNL集群上不同机器之间的通信。

  2. 使用Intel Caffe,支持英特尔MLSL(机器学习扩展库)的多节点训练,使用Infiniband作为通信的互连网络。

我们使用TACC Stampede 2超级计算机作为我们的硬件平台。

实现用ImageNet训练AlexNet当前最快结果:24分钟100 epoch

此前,英伟达公司报告说,使用一台DGX-1工作站可以在2小时内完成AlexNet在ImageNet训练90次(epoch)。不过,他们当时使用的是半精度或FP16,计算成本是标准单精度操作的一半。我们用标准的单精度的AlexNet在ImageNet训练100次。在一个NVIDIA DGX-1站上,批量大小为512需要6小时9分钟。由于LARS算法(You,Gitman和Ginsburg 2017),我们能够使用大的批量大小实现类似的精度。

如果我们将批量大小增加到4096,则在一台NVIDIA DGX-1(一台机器上最快的版本)上只需要2小时10分钟。因此,在使用LARS的情况下,使用大批量可以显著加速DNN训练。

对于批量大小为32K的AlexNet,我们将算法缩放为512 KNL芯片(约32K处理器或内核)。每个KNL的批量大小是64,所以整体批量大小是32678。我们在24分钟内完成了100 epoch的训练。据我们所知,这是使用ImageNet训练Alex最快的速度,也创下了世界纪录。总体比较见表7。

当前使用ResNet-50进行ImageNet训练的最低预算

Facebook(Goyal等人,2017年)在32个CPU和256个NVIDIA P100 GPU(32个DGX-1站)上,在一小时内完成了ResNet-50的90 epoch的ImageNet训练。考虑到一台DGX-1工作站的费用为129000美元,整个系统的成本约为32×129,000 = 410万美元。

将批量缩放到32K后,我们可以使用便宜的芯片。我们使用512 KNL芯片,每KNL的批量是64。我们也在一个小时内完成了90 epoch的训练。但是,我们的系统成本要少得多。我们的KNL芯片的版本是英特尔至强融合处理器7250,成本为2436美元。我们系统的成本只有约2436×512 = 120万美元。这也是使用ResNet-50在一小时内进行ImageNet训练迄今最低的预算。

需要指出,我们不隶属于英特尔或NVIDIA,而且我们对GPU或KNL也没有任何偏好。我们只想表明,我们可以用更少的预算(便宜3.4倍)实现相同的效果。总体比较见表8。

点击阅读原文可查看职位详情,期待你的加入~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表