Amazon Web Services 为 BERT 和 Mask R-CNN 实现了最快的训练速度

2020 年 4 月 05 日

Amazon Web Services 为 BERT 和 Mask R-CNN 实现了最快的训练速度

BERT 和 Mask R-CNN 都是如今最流行的机器学习模型,前者用于自然语言处理 (NLP),后者用于图像识别。过去几个月来,AWS 大幅改进了底层基础设施、网络和机器学习 (ML) 框架和模型代码,从而实现了这两个模型训练速度的提高。现在我们可以宣布在云中实现了迄今最快的 TensorFlow、MXNet 和 PyTorch 框架的训练速度。借助这些硬件和软件优化,您现在可以以同样的速度和效率训练您的模型。


模型训练时间的长短会直接影响到模型的迭代能力,以及快速提高模型的准确度。减少训练时间的主要是通过大型 GPU 实例集群来做分布式训练,但这必须以高效的方式进行。如果把训练任务分布到太多实例上,由于实例之间的通信反而会消耗集群的 GPU 计算资源,分布式集群带来的好处往往不太明显。


BERT


BERT (Bidirectional Encoder Representations from Transformers)作为流行的 NLP 模型,发布时就在 NLP 领域的多个方向刷新了精度。


Amazon EC2 P3dn.24xlarge 实例拥有 8 个 NVIDIA V100 GPU,在单个实例上使用 TensorFlow 和 PyTorch 从头开始训练 BERT 模型需要数天时间。借助 Elastic Fabric Adapter (EFA) 可以将单台实例高效扩展至更多 P3dn.24xlarge 实例,并优化该模型在大型集群上的收敛方式,我们成功将训练时间从数天缩短到 60 分钟左右。在编写本文之时,这是在云上训练 BERT 模型最快的速度,并且达到了极佳的目标准确度(基于 BooksCorpus 和英文版维基百科训练后,在 Squad v1.1 任务上的 F1 得分为 90.5 或更高)。


对于 TensorFlow,我们尝试了前所未有的扩展,在 256 个 P3dn.24xlarge 实例上使用了 2048 个 GPU,在 62 分钟内就完成了 BERT 的训练。对于 PyTorch,我们扩展到 192 个 P3dn.24xlarge 实例、1536 个 GPU,将训练时间缩短到 69 分钟。通过优化用于训练 BERT 的全部硬件和软件,我们达到了 85% 的扩展效率,确保了在扩展到更多 P3dn.24xlarge 节点时,框架可以最大限度利用来自 GPU 的额外计算能力。下表总结了这些改进。


Mask R-CNN


Mask R-CNN 是一个使用十分广泛的图像分割模型,用于自动驾驶、动作捕获以及其他需要复杂对象检测和区分能力的场景。


对于 MXNet、PyTorch 和 TensorFlow,在单个 P3dn.24xlarge 实例(8 个 NVIDIA V100 GPU)上训练 Mask R-CNN 模型需要大约 6 个小时。我们将 MXNet、PyTorch 和 TensorFlow 的训练时间从 6 个小时缩短至大约 25 分钟。我们将所有三个 ML 框架上的 Mask R-CNN 训练扩展到 24 个 P3dn.24xlarge 实例(共 192 个 GPU)。您现在可以快速进行迭代并每天运行多个试验,无需等待数天才能获得结果。在写本文的时候,这是云中最快的 Mask R-CNN 训练速度,目标准确度也极高(利用 COCO2017 数据集训练时为 0.377 Box min AP、0.339 Mask min AP)。下表总结了这些改进。


技术堆栈


实现这些结果需要优化底层硬件、网络和软件堆栈。在训练 BERT 这样的大型模型时,所使用的众多 GPU 之间的通信会成为一个性能瓶颈。


在分布式计算(例如大规模训练)中,AllReduce 运算会规约来自不同工作线程(GPU)的阵列(在此例中为神经网络的参数)并向所有工作线程(GPU)返回结果阵列。GPU 在每次迭代后集体执行一次 AllReduce 运算。每次迭代都由通过网络的一次正推和一次逆推组成。


在 GPU 上执行 AllReduce 的最常用方法是使用 NVIDIA 集合通信库 (NCCL) 或 OpenMPI or Intel MPI 库等 MPI 库。这些库专为异构集群设计。AllReduce 会在训练网络的相同实例上发生。在异构集群上执行 AllReduce 算法,对于每个 AllReduce 运算,每个工作线程需要分别发送和接收两次大约等于模型大小的数据。例如,BERT 的 AllReduce 运算(拥有 3.4 亿个参数)涉及两次发送大约 650MB 的半精度数据,然后两次接收同样数量的数据。这种通信需要在每次迭代完成后进行,将很快成为大多数模型训练的瓶颈。


AllReduce 算法的选择通常取决于网络架构。例如,Ring-AllReduce 非常适合每个节点都连接到两个相邻节点,从而形成一个环的网络。Torus AllReduce 则适合每个节点都连接到四个相邻节点,从而形成一个二维矩形晶格的网络。AWS 使用更为灵活的互联架构,任何节点都能够以全带宽与任何其他节点通信。例如,在一个具有 128 个 P3dn 实例的集群中,任何实例都能够以 100Gbps 的带宽与任何其他实例通信。


此外,100Gbps 的互联带宽也不局限于 P3dn 实例。您可以向集群添加 CPU 优化型 C5n 实例,并仍然保持任何节点对之间 100Gbps 的互联带宽。


AWS 互联架构的这种高度灵活性,需要一种能够完全利用 AWS 互联架构的独特优势的 AllReduce 算法。为此我们开发了自定义的 AllReduce 算法,该算法专为 AWS 网络优化。这种自定义的 AllReduce 算法可以利用异构集群中任何节点对之间高达 100Gbps 的互联带宽优势,并且将每个工作线程收发的数据量减少了一半。AllReduce 算法的计算阶段交由计算优化型 C5 实例执行,从而得以将 GPU 释放出来,以更快地计算梯度。由于 GPU 不再执行规约运算,梯度的发送和 AllReduce 后梯度的接收可以并行进行。AllReduce 梯度需要的跃点数量减少至两个,而在同构 AllReduce 算法中,跃点数量会随着节点数量的增加而增加。由于与仅使用 P3dn 节点的训练相比,训练速度大大提升,总成本也得以降低。


小结


在使用 BERT 和 Mask R-CNN 进行测试时,结果相比单节点执行方案的改进十分明显。随着 P3dn 节点的数量从 1 个实例增加到 16、32、64、128、192 和 256 个实例,吞吐量基本达到线性同步扩展,并最终通过扩展到更多的 P3dn.24xlarge 实例,帮助减少了模型训练时间,而成本并未增加。通过这些优化,AWS 现在可以在云中为先进的计算机视觉和 NLP 模型提供更快的模型训练速度。


立即开始在 Amazon SageMaker 上使用 TensorFlow、MXNet 和 PyTorch 吧。


本文转载自 AWS 技术博客。


原文链接https://amazonaws-china.com/cn/blogs/china/amazon-web-services-achieves-fastest-training-times-for-bert-and-mask-r-cnn/


2020 年 4 月 05 日 08:0083

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

typora设置图片自动上传,实现快速发文章

诸葛小猿

Typora PicGo gitee 上传图片

Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车

newbe36524

Docker Reactive ASP.NET Core

聊聊Spring的IOC以及JVM的类加载

小隐乐乐

人生就是体会矛盾的过程

封不羁

成长 感悟

毕业三年了,我开始明白为什么说三年是一个坎

鄙人薛某

程序员 程序人生 程序员成长 职场回顾

golang内存对齐

PONPON

go golang go内存对齐

依旧乐观的李彦宏,十年寻光的百度AI

脑极体

ArrayList源码阅读

慌张而黑糖

ArrayList 源码阅读

阿里四面你都知道吗?

java金融

Java 程序员 互联网 阿里 简历

技术选型课程小结

行下一首歌

极客大学架构师训练营

数据分析师成长体系漫谈-数仓模型设计

analysis-lion

学习 数据仓库 数据分析 随笔杂谈

架构师训练营-作业5

紫极

这样的二维码,你见过吗?

诸葛小猿

Java Python 后端开发 二维码 myqr

为了把握新基建风口,科技公司都在紧密筹备这件事...

极客时间企业版

开发者必备——API设计问题

Noneplus

分布式缓存与消息队列

紫极

vagrant

飞翔

极客大学架构师训练营

Struct embedding in Go

Interstate5

golang time.Time dynamodb apigateway

如何学习Visual Studio Code

博文视点Broadview

学习 读书笔记 vscode 能力提升 编辑器

信创舆情一线--5省发布区块链发展计划

统小信uos

区块链 舆情

架构师训练营第六周总结

Melo

极客大学架构师训练营

Scala中如何优雅地实现break操作

吴慧民

scala

CORS 和 CSRF 修炼宝典

pingan8787

前端 Web CORS CSRF

Hadoop大数据存算分离下,如何解决新旧存储共存?

XSKY融合存储

鲲鹏说:高考之路你们走,高考阅卷我来守

脑极体

redis系列之——分布式锁

诸葛小猿

Java redis 分布式 分布式锁

如何通过DDD构建一辆汽车

Winfield

领域驱动设计 DDD

啃碎并发(七):深入分析Synchronized原理

猿灯塔

Java

华为云FusionInsight MRS通过信通院大数据能力评估 单集群突破2万+规模

FI洞见

大数据 FusionInsight MRS 华为云

统一物品编码破解追溯“断链”困局

CECBC区块链专委会

数据库分片

Arthur

Amazon Web Services 为 BERT 和 Mask R-CNN 实现了最快的训练速度-InfoQ