赣州新闻网

首页 / 科技

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

2020-04-10 · 赣州新闻网 · 科技

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

作者 | 阿里云异构计算AI加速负责人 游亮

近日,斯坦福大学公布了最新的 DAWNBench 深度学习榜单,这是人工智能领域最权威的竞赛之一,是衡量深度学习优化策略、模型架构、软件框架、Z | K ~云和硬O U ^件等综合解决方案实力的标准之一。

在图像识别(Image Classification on ImageNet)榜单中,阿里云包揽了训练时间、训练成本、推理延迟以及推理成本3 g u ^四: H u 5 5 * a 3项第一。

DAWNBenc! V &h 官方显示,阿里云异构计算服务训练 ImageNet 128 万张图片仅需 2 分 38 秒,基+ X 7 O于含光 800 的 AI 服务识别一张图片仅需 0.0739ms,同时在训练成本和推理成本上也实现世界g T U ! T O V Q b纪录的突破。

此次,阿里云创造四项$ ^ J O P W纪录得益于阿里云自研加速框架 AIACC9 @ m e # % 及平头哥含光 800 芯片。

其中,AIACC 是阿里云自主研发的飞天 AI 加速引擎,l z v Y k E H u q g G。这样就能很快发现参数是否正确。 X 4 S ^

从k m s这个例子可以看出,大规模深度学习具有以下 4e d + ^ c J { w 个优势:一是大规模分布式训练可以降低深度学习训练的时间;二是可以加速深) Z :度学习算法研究的效率和进程;三是大规模分布式推理可以提升用户深度学习应用的并发度和可靠性,四是最终提升用户产品的竞争力,提升用户产品市场占有率。所以,大规模深度学习对于公司来说,是提高生产力效率的制高点。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

大规模分布式训练的基本计算模型大体上分为两类:一类是 PS 模式的分布式训练,一类是对等模式的分布式训练。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

如图,PS 分布式y s B N %有一个参数服务器,有很多个 worker,参数服务器负责存储全局模型,而每个 worker 上都有一份本地模型的副本;在分布式训练开始的时候,每个 worker 都会读取自己的训练数据,然后去更新本地的模型,得到本地的梯度;然后每个 worker 将本地的梯度上传到参数服务器上去得到全局梯度,参数服务器上再用全局梯度去更新全局模型,然后更B 9 S b J ] X b新后的全局模型会去更新所有 worker 的本地模型,再进行下一次的训练迭代。

而对等模式没有参数服务器,每个 w; ( R gorker 都获得自己的训练+ k H @ M数据,去更新本地的模型,得到本地的梯度,然后每个 worker 的w { Z :全局的 all-reduce 计算,从而每个 worker 都可以得到全局梯度,每个 worker 再用全局梯度去更新本地的模型,再进行下一次训练迭代。

PS 模式比较适合有大量模型参数的情况,一张 GPU 存不下模型大小,通过 PS 的分布式可以将大参数模型存下来,但是缺点是有中心化通信,当规模越来越大的时候,通信效率会越来越低。

而对等模式比较适合于一张 GPU 能够存下的模型大小,并且是一种去中心式的通信模式,可以通过 Ring-Allreduce 环形通信算法来降低通信复杂度。不e v _ * c m同的计算框架都有不同的计算模式,例如 Tensorflow 既有 PS 模式又有对等模式,PyTorch 以支持对等模式为主,而 MXNET 以支持 KVStore 和 PS-Lite 的 PS 模式为主。

不同框架的不同分布式模式对于用户来写分布? G p 9 { f e式代码、分布式性能优化以及分布式调q Q Q t $ b 3度都会是非常大的阻碍。

大规模深度学习应用对于基础架构有着不一样的需求。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

在资源层,计算资源上,需要大规模的 GPU 服务器集群来做分布p G I t 1 k T =式训练,需要大容量的并行文件系统来做大规模的文件存储和提供并行的文件访问,还需要建设大规模的 TCP 或者 RDMA 网络。

在调度层,需要进行g v F - + O a . $大规模的 GPU 集群和任务调度。

在框架层,需要感知计算} o u {和调度不同深度学习计算框架的分布式计算的模式。

在应用层,我们也需要去拆分训练数据,或者拆分训练模W & z , h l型到不同的 worke H )er 上去。

因此,对@ t b M K 8于大规模深度学习的应用1 e & x g Y,会存在诸多的困难和- e 0 C B E v M !挑战。

对于资源层来说:

首先,建设大规模 GPU 集群是非常困难的,包括要解决大规模 GPU 机器的机房、机架H . @ X C Q、电源的问题,以及它们的稳定性和成本的问题。

其次,众所周知,建设大规模并行文件系统不仅需要建设大容量的并行文件系统,而且对于并行文件系统的稳定性和可靠性的挑战是非常之高的。

另外,需要建设大规模、高带宽的 TCF t b Q bP 或者 RDMA 网络也非常困难,需要规划和实Z m z D !现大规K A J模交换机和节点的拓扑结构,规划和实现大规模南北向流量的( i y W m %收敛比y a I 0 Z i 6 5 ~,# ( u 6规划和实现Q ] J r e 7大规模网络协议和 IP 地址,并且需要保障网络的可靠性以及大规模网络的性能。

对于调度层:不管是基于容器的调度还是基于物理机的调度,需要去做 CPU 和 GPU 的混合调度,需要1 Y ;做 GPU 显存共享调度,以及对不同深度学习计算框架的分布式调度。

对于框架层来说:各种主流的深度学H l t U , {习计算框架都有不同的分布式计算` % C i模式,需要u M r Q 7 y V在应用层做不同的分布式实现、调度层做不同的分布式调度,同时需要对针对底层的网络6 8 v实现对各种框架做分布式N $ i T 2 j 6性能优化。

这其中的任何一项,无不需要专业知识非常深厚的技术专家、架构师、工程师来部署和实现。

基于云计算的大规模深度学习应用架构

这些高深技术的实现和应用如何能够飞入寻常百姓家呢?幸好有云计算。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

拿阿里云举例说明,从基于云计算的大T ) ;规模深度学习应用的架构可以看出,在资源层,我们对于大规模 GPU 服务器集群的需求直接创建大规模 GPU 云计算服务器;对于这种大容量并行( k f , d K文件系统,直接可以创建并行文件系_ r c p f ( y统 CPFS;对于大规模 TCP、RDMA 网络可以直接采用阿里云网络资源。

在调度层,我们对于大规n p V U m模 GPU 集群的调度的需求,可以直接使用云容器调度 ACK 或者使用云e S D ( C ~ Dch、MXNET、Caff- j 0 H h b Z ke 等g Y ) O 2 M U主流开源框架的性能加速引擎,具有四大优势。

第 1 个优势是统一r S z r , D r加速。

前面提到,各H A 9 s { * [ E b种计算框架的不同的分布式模式会对统一的调度和应用层分布式的实现,都C D w : k 6 e产生极大的阻碍。

而 AIACC 可以做到统一的分布式模式和分布式性能加速,这样调度层可以做到统一的分布式调度,应用层可以做到统一的分布式P w = / V % 7 z W计算,同时对于底层分布式通信的优化只需要一份工作,各种框架都能享受到性能提升的好处。

第 2 个优势就是针对网络和 GPU 加速器都做了极致的优化,这个后面一节会详细的讲。

第 3 个优势是结合云端做弹性E { 3 s l伸缩,让+ + f 5 | p a n /用户业务的成本最优。

第 4 个优势是和开源兼容的,用户用开源深F X x度学习计# # E 9 d 8算框架写的代码大部分都不用修改,直接采用 AIACC 库就可以得到性能上的飞3 9 1 8跃。

AIACC 主要是* { = ? I h o利用了基于通信的性能优化技术。K % x z ~ &通过前面的分享我们知道,在做分布式训练的时候我们需B E c e Q ~ _要在机器之间、GPU 之间交换梯度数据,需要做到非常高效的数据通信。

我们的分布式通信优化分为三个方面的优化。

第 1 个方面是做通讯和计算的重叠。 我们梯度是做异步通信的,在计算的时候并行去做梯度通信,从而将通信的时间隐藏在计算后面。

第 2 个方面是做了延迟的优化。 我们在做梯度通信之前需要去做梯度协商,需要知道每台机器上 GPU 里的梯度是不是 ready,然后再做通信。传统的做法是通过一个中心化的节点去做所有节点梯度协商,这样当规W ! 8 . !模上来时,延迟会非常高。而我们的优化方法是D w [ q Y m @ 去中心化的方式去做梯度协商,这样的效率更高,大规模下延迟也不会提高。

第y w ( 7 3 方面的优化是做带宽的优u H ) | | I 3 { $化,带宽方面有 5 种优化方法:

第 1 种优化方法是基于拓扑结构的分级通信R _ 3优化。我们知道在一台机& 4 态的调整从而达到最优性能,这样我们就可以动态的适配在不同网络情况下达到最优的性能。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

这个图是我们做动态调优的过程,绿色部分是做计算0 , 3 a & x ; Y,红色部分是做通信,我们可以看到在训练刚开始的几个 batch 只有一个流作通信,而且它的通信时间会比较: G 8长。在中间这一段我们开出了两个流来做& T D t I : d Q F通信,在后面x : & 这一段我们开出了 4 个流来做通信,并且 4 个流之间是做了负载均衡,在最后一个 batc% t / p e 4 Rh 的时候,我们达4 K + n ?到了一个最佳的性能。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

经过这些性能优化工作,我们也小试牛刀,训练上述大厂的 ResNet-50 模型 +ImageNet 数据集的任务,在 512 张 P100 上的性能比单卡性能能够加速 46H A W - W 5 4 A %2 倍,基本上达到了接近线性的加速比,将训练时间从原来的 5 天时间缩短到了 16 分钟。

这次 DWANBench 打榜,我们也发布了基于 Vp O N100 的大规模训练E { ; 9 Z时间,训练达到 top5 的 93% 的精度只需要 2 分 38 秒。

而我f 8 O J O } T S 7们另一个架构升级 FastGPU 即刻构建主要帮0 T X o K m助用户快速搭建大规模分布式训练集群,并且帮助客户在云端做到业务成本最优化,接下来R 9 A ; p ( z 5和大家介绍通过 FastGPU 即刻构建云端大规模分布式训练集群。

因为现在阿里云的云计算服务都会提供 OpenAPI 的接口直接创建计算资5 0 H l C源、存储资源和网络资源。我` - % v Z V们可l ` O n u以通过 FastGPU 来封装这些 OpenAPI 接口来直接创建W B b , , Y y ^ 8出一个云端的大规模分布式的集群,同时可以开始大规模分布式的训练任务。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

如上图所示,绿色部分代表用户,蓝色部分代表阿里云资源,橙色部分代表 FastGPU。用户在起始状态的时候,先把训练数据集上传到云存储 OSS 里,开一台 ECS 做为开发主机来存训练代码(或者放在 Cloud Shell 上)。然后i V K Y ? l ] M在这台开A w F 2 b p发机上一键就可以通过 FastGPU 来创建深度学习应用需要的基T U s F c p础资x m @源,包括大规模 GPU 计算资源、云盘和并行文件系统的存储资源、Tmux 和 Tensorboard 的交互式资源,都可以创建出来,用户可以通过交互式资源实时查看训练过程。` $ ] A Y f A S

等训G b + p E `练所需要的资源+ u ?都 ready 之后,就可以自动的启动分布式训练P } 4 ; =任务。当分布式训练任务结束之后,可以自动的释放这些基础资源,训练得到的模型和 log 文件L C ? t R W t可以存在 OSS 或者开发机上供用户使用。

FastGPU 能够做到既省时、又省钱、又易m ) ] % G 0用。

首先是节省时间,举个例子,我们之前要配置一个分布式的深度学习环境的话,需要先准备 GPU 的基O Z H [ C础资源、网络资源,再准备存储资源,然后需要配置每台机器的深r 9 0度学习环境:包括某版本的操作系统、某版本的 GPU 驱动、某版本的 CUDA、某版本的 cuDNN、某版本的 Tensorflow 等,然后再把训练数据上传到每台机器上,然后再把多台机器之间的网络打通,这个可能要耗费一个工程师一天的时间来准备环境,而用 FS * * C ;astGPU 的话只需要 5 分钟的时间就可以完成。

其次是省钱,我们可以做到让 GPU 资源的生命周期和训练的生命周期保持同步,也K D 0 Y N 7 j就是说只有在我们的训练或者推理任务准备好时才去开启 GPU 资源,而当训C ? g E L * ; 3练或者推理任务结束之后,就会自动的释放掉 GPU 的资源,不会造成 GP8 + # 4 & P a k FU 资源的闲置,同时也支持可抢占` W h C u GPU 实例(低价格实例)的创建和管理C 6 ? V O 5 F。

第三是易用,我们创建的所有的资源都是 Iaa/ v , N w Z }S(基础设施)的资源,所有创建的资源和运行的任务都是可访问、可调式、可复o n S M s M g 6 S E #,文件系统的并行访问能力包括 IOPS 和带宽会是@ X - H V v瓶颈;另外一方面,GPU 服务器之间的通信会是瓶颈。

在阿里云上可以一键创f W * 5 s /建高并发的并行文件系统 CPFS 解决文件高并发访问的问题,而通过 AIACC 来解决大规模分布式通信的性能问题。

最后,跟大家分享图像识别、大规模 CTR 预估、大规模人脸识别、大规: l u y = W M模自然语言理解,这 4 个大规模深度学习场景的应用架构和性能优化的实践。

第 1 个案例是一键~ J F N C r C构建大规模图像识别的分布式训练任务。

这个场景需要训练 128 万张 ImageNet 的图片,模型是 ResNet-50 和 VGG-1H # t q $ : I 66,训练框架是 Tensorflow。

通过 FastGPU 一键拉起右边的架构,包括多台 8 卡 P100 的 GPU 服务器、25G4 B x m ; v - sb 网络和并行文件系统 CPFS,并且通过 AIACC-Tensorflow 框架来做分布式训练。

多台 GPU 服务器上的 worker 会并行的做训练,并且并行的从 CPFS 上读取训练数据。CPFS 可以提供多台 GPU 服务器并行访问数据的聚合 IOPS 和1 C 3聚合s 1 w a j g 0 + f带宽,而 AIACC 可以让多 GPU 之间的通信能够达到性能最优。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

下图是大规模图像识e & Z L L y d _别分布式训练性能优化的结果。Uber 开源的 Horovod 也是一个分布式训练优化的框架,主要做的是基于 ring-allreduu { O % E Vce 环形通7 M H ` { @ e Y n信的优化。它的分布式性能会比原生的 Tensorflow 和其他框架分布式性能要好。在我们这个案例里,基于 32~ L y E g 2 + P 张 P100 的训练训练性能比 Horovod 的性能可以提升 65%,基于 128 张卡 P100 训练性能比 Horovod 提升 80%。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

第 2 个案例是大规模 CTR 预估的分布式训练。

CTR 预估会根据每个人在网上的行为做千人千面的推荐,例[ q * ; 9 K ? y如根据每个人的点击、停留、点赞、转发、购买等行为,P 0 E m推荐用户可能感兴趣的内容、商品或者广告。/ c u u

这个案例需要训9 = * 4练的数据量有 1 千亿,它的模型是 Wide&Deep 的模型,用的分布式框架是 Tensorflow。

我们先通过 FastGPU 一键拉起架构,包括多台 2 卡 M40 的 GPU 服务器; W ? S

我们通过多线程并行读取和多缓冲队列来优化文件的 IO,通过 AIACC 的通信优化技术来优化M z | Z 多机之间的通信性能。

最终我们在 4 张 GPU 卡上获得了 3.5k Z y c ) L t y 倍的性能提升,在 64 张 GPU 卡上获得了 8.5 倍的性能提升,在 128 张 GPU 卡上获p G F T Z % ~ % y得了 13.4 倍的性能提升,5 小时可以训练 1 千亿的数据量。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

第 3 个案例是大规模人脸识别分布式训练。

在人脸识别的场景下,分布式训练的复杂度会随着人脸识别的分类数的增加而增加,这h H s M B F -个案例的人脸分类数达到了千万级人脸,模型是 InsightFace,计算框架式是 MXNET。

我们先用 FastGPU 一键D ! : ; i I g拉起多台 8 卡 P100 的 GPU 服务器、25Gb 网络和并行文件系统 CPFS,并且用 AIACC-MXNET= d L q t [ 来做分布式训练。k ~ . $ p = d

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

在千万级人脸分类的场景下没有办法做纯粹的数据并行,需要做数据并行和模型并行的混合并行。所以我们扩展了 AIACC 的接口,一方面支持 MXNET 的 kvstore 接口,一方面支持数据并行和模型并行的混合并行,这样通过 AIACC-l 4 y { HMXNET 将人脸识别的能力提升到千万级别,最终在 16[ 3 ( W 张 GPU 卡上性能可以提升 56%,在 32 张 GPUr % ` y * F S 卡上性能可以提升 135%,在 64 张 GPU 卡上性能可以提升 280%。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

第 4 个案例是大规模自然语言理Q V f W c z I T解分布式训练。

这个案例的模型有 Transformer 和 Bert 模型,其中 Bert 是 Google 开源的一个非常大的模型,在 NLP 的竞赛中取得了非常好的成绩。B [ T { ^ Q w U它有 1.1 亿个参数,对于分布式训练的加速比是一个非常大的挑战。我们通过 FastGPU 一键拉起} | O多台 8H @ & p 卡 P100 的 GPU 服务器、25Gb 网络和并行文件系统 CPFn M 7 h C yS,并且通过 Ab n q T sIACC-Tensorflow 来做分布式训练。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

我们d i ^扩展了 AIACC 的接口来支持 Transi = Y s Z w 7 (former 和 Bert# , & L ! ` 模型的分布式训练,最终 Transformer 模型在 16 张 GPU 卡上,取得了 7.8 倍的性能提升,Bert 模型在 16 张 GPU 卡上取得了 7.4 倍的性能提升。

【开发者成长】揭秘阿里云大规模深度学习性能优化实践

FastGPU 一键部署和训练手势识别应用的源码:https://github.com/aliyun/alibabacloud-aiacc-demo/tree/master/pytorch/a u s Ggtc-demo

上文介绍的大规模人脸识别分布式训练源码:https://github.com/aliyunR 0 0 | I/alibabacloud-aiacc-demo/tree/maste+ ? i 5r/mxnet/insightface

上文介绍的大规模自然语言理解分布式训练源码:http2 N O js://github.com/aliyun/alibabacloud-aiacc-demo/tree/masS h fter/tensorflow/bert

后续还会开源w w P 1 n @ M更多大规模深度学习源码,敬请期待。

专业大学实践性能石城学习开发成长优化