【深度学习系列1】 深度学习在腾讯的平台化和应用实践

时间:2024-03-10 16:33:33

【深度学习系列1】 深度学习在腾讯的平台化和应用实践

引言:深度学习是近年机器学习领域的重大突破,有着广泛的应用前景。随着Google公开Google Brain计划,业界对深度学习的热情高涨。腾讯在深度学习领域持续投入,获得了实际落地的产出。我们准备了四篇文章,阐述深度学习的原理和在腾讯的实践,介绍腾讯深度学习平台Mariana,本文为第一篇。

 

深度学习(Deep Learning)是近年来机器学习领域的热点,在语音识别、图像识别等领域均取得了突破性进展。腾讯提供广泛的互联网服务,在2014年第一季度,即拥有3.96亿月活跃用户的微信,8.48亿月活跃用户的QQ,以及6.44亿月活跃用户的Qzone等平台,拥有海量数据和众多应用,深度学习在腾讯有广泛的潜在应用场景。

 

深度学习是近年来机器学习领域最令人瞩目的方向。自2006年深度学习界泰斗Geoffrey Hinton在Science杂志上发表Deep Belief Networks [1]的论文后,重新激活了神经网络的研究,开启了深度神经网络的新时代。学术界和工业界对深度学习热情高涨,并逐渐在语音识别、图像识别、自然语言处理等领域获得突破性进展。深度学习在语音识别领域获得相对20%到30%的准确率提升,突破了近十年的瓶颈。2012年图像识别领域在ImageNet图像分类竞赛中取得了85%的top5准确率 [2],相比前一年74%的准确率有里程碑式的提升,并进一步在2013年获得89%的准确率。目前Google、Facebook、Microsoft、IBM等国际巨头,以及国内百度、阿里巴巴等互联网巨头争相布局深度学习。

 

深度学习通过构建深层神经网络,来模拟人类大脑的工作原理。如图1所示,深层神经网络由一个输入层,数个隐层,以及一个输出层构成。每层有若干个神经元,神经元之间有连接权重。每个神经元模拟人类的神经细胞,而结点之间的连接模拟神经细胞之间的连接。

 

 

                                   图1:深度神经网络的结构

 

然而,深度学习要在腾讯落地,面临巨大的挑战。

 

首先,深度神经网络模型复杂,训练数据多,计算量大。一方面,DNN需要模拟人脑的计算能力,而人脑包含100多亿个神经细胞,这要求DNN中神经元多,神经元间连接数量也相当惊人。从数学的角度看,DNN中每个神经元都包含数学计算(如Sigmoid、ReLU或者Softmax函数),需要估计的参数量也极大。语音识别和图像识别应用中,神经元达数万个,参数数千万,模型复杂导致计算量大。另一方面,DNN需要大量数据才能训练出高准确率的模型。DNN参数量大,模型复杂,为了避免过拟合,需要海量训练数据。两方面因素叠加,导致训练一个模型耗时惊人。以语音识别为例,目前业界通常使用样本量达数十亿,以CPU单机需要数年才能完成一次训练,用流行的GPU卡也需要数周才能完成训练。

 

其次,深度神经网络需要支持大模型。以图像识别为例,已有工作证明通过增加卷积层的filter数量,加大模型深度等,可以获得更好的模型质量,但模型参数也随之增加。然而,以ImageNet 2012竞赛冠军的网络为例,其占用3.99 GB的显存,已接近主流GPU的显存容量,试图增大模型则会超过GPU显存范围。因此,如何支持更大模型是一个大的挑战。

 

再次,深度神经网络训练收敛难,需要反复多次实验。深度神经网络是非线性模型,其代价函数是非凸函数,容易收敛到局部最优解。同时,深度神经网络的模型结构、输入数据处理方式、权重初始化方案、参数配置、激活函数选择、权重优化方法等均可能对最终效果有较大影响。另外,深度神经网络的数学基础研究稍显不足。虽然可以通过限制性波尔兹曼机(Restricted Boltzmann Machines,RBMs),或者(DenoisingAutoencoder,DAEs)等产生式建模方法初始化网络模型,以达到减少陷入局部最优的风险,但仍然不是彻底的解决方案,仍然需要在实际使用深度神经网络解决问题的时候,合理的利用海量数据,合理的选择优化方式。上述原因导致需要技巧、经验,基于大量实验来训练出一个效果好的模型。

 

因此,深度学习成为一个效果很好但门槛极高的方向,如何落地产生实际应用效果成为关注的焦点。

 

面对机遇和挑战,我们打造了腾讯深度学习平台Mariana。Mariana包括三个框架:深度神经网络(Deep Neural Networks,DNN)的GPU数据并行框架,深度卷积神经网络(Deep ConvolutionalNeural Networks,CNN)的GPU数据并行和模型并行框架,以及DNN CPU集群框架。Mariana通过此三个框架完成并行加速,针对多种应用场景,以解决深度学习训练极慢的问题;Mariana通过模型并行,支持大模型;Mariana提供默认算法的并行实现以减少新算法开发量,简化实验过程。Mariana面向语音识别、图像识别、广告推荐等众多应用领域。

 

腾讯深度学习平台Mariana以GPU服务器为主,每台服务器配置4或者6块Nvidia Tesla系列高端科学计算用GPU卡。利用每块GPU卡2000多个流处理器的强大计算能力,并实现多GPU卡并行以加速训练。

 

腾讯深度学习平台Mariana重点研究多GPU卡的并行化技术,完成DNN的数据并行框架,以及CNN的模型并行和数据并行框架。数据并行和模型并行是Google分布式大神Jeff Dean和深度学习大佬Andrew Ng在2012年NIPS会议上发表的DistBelief[3] 论文中针对深度学习的CPU集群框架提出的定义。数据并行指将训练数据划分为多份,每份数据有一个模型实例进行训练,再将多个模型实例产生的梯度合并后更新模型。模型并行指将模型划分为多个分片,每个分片在一台服务器,全部分片协同对一份训练数据进行训练。我们学习并借鉴了这两种并行方式,并成功应用于单机多GPU卡的并行。

 

DNN的数据并行框架通过同步随机梯度下降进行训练。数据并行训练中,每个GPU卡各自训练,并各自产生一份梯度值,然后进行参数交换。图2. 展示了参数交换过程。每台GPU服务器配置6块GPU卡,其中四块通过树状的PCIe连接,并与另外两块GPU卡通过IOH连接。参数交换过程从逻辑上看,梯度收集阶段将全部梯度值累加起来,然后应用到当前模型以更新参数得到新模型,最后在模型分发阶段将新模型下发给全部GPU卡。采用数据并行后,相对于单卡训练过程,关键的问题是参数交换过程引入额外时间消耗,拖累了并行性能,使得加速比很难提高。我们通过一个精心设计的拓扑完成参数交换,提升整体性能。此外,我们采用近似的自适应学习率算法,使得支持自适应学习率所需交换的数据量降低了一个数量级。

 

 

                                      图2:DNN GPU框架数据并行的参数交换过程

 

DNN的数据并行框架在微信语音识别中得到应用。微信中语音识别功能的入口是语音输入法、语音开放平台以及长按语音消息转文本等。对微信语音识别任务,通过Mariana,识别准确率获得了极大的提升,目前识别能力已经跻身业界一流水平。同时可以满足语音业务海量的训练样本需求,通过缩短模型更新周期,使得微信语音业务可以及时满足各种新业务需求。

 

卷积神经网络CNN的模型并行和数据并行框架的结构如下图所示:

 

 

                                  图3:CNN GPU框架的模型并行和数据并行架构

 

CNN模型并行和数据并行框架对GPU卡分组,组内两个GPU卡做模型并行,组间做数据并行。如上图所示,4个GPU卡分成Worker Group 0和1。组内两卡各持有CNN模型的一部分,称为partition,协作完成单个模型的训练。模型并行中,卡间数据传输通过引入Transfer Layer透明的完成。组间数据并行按同步随机梯度下降进行训练,并采用精巧的拓扑完成参数交换,但注意只有各组内属于同一个partition的数据各自交换,即图中GPU0和GPU2、GPU1和GPU3分别进行参数交换。引入数据并行和模型并行后,从磁盘读取训练数据,训练数据预处理,CNN训练分别占用磁盘、CPU、GPU资源,且均耗时较大。因此,我们引入流水线,使得磁盘、CPU、GPU资源可以同时得到利用,提升整体性能。

 

CNN数据并行和模型并行框架已在图像识别应用中初见成效。针对Hinton在2012年获得ImageNet竞赛冠军用的网络 [2],我们取得了两卡模型并行1.71倍加速比,4 GPU卡数据并行加模型并行时比单卡2.52倍的加速比。通过CNN并行框架的模型并行,单个GPU上CNN网络占用的GPU显存从3.99 GB减少到2.15 GB,使得可以训练更大规模的图像分类模型。通过模型并行获得ImageNet 2012数据集87%的top5准确率。CNN并行训练框架在微信图像业务中有众多潜在应用都已尝试接入本框架。同时在广点通广告推荐也开始应用探索。

            图4:CNN GPU框架对Hinton的网络[2]在ImageNet 2012的并行加速性能

 

DNN CPU集群框架实现基于CPU集群的数据并行和模型并行,其总体架构如下图所示:

 

 

 

                                           图5:DNN CPU集群框架总体架构

 

DNN CPU集群框架提供Vertex+Message的API,实现BulkSynchronous Parallel(BSP)模式。每次DNN训练作业作为一个DNN Job,其执行包含多个迭代,用户通过Client工具提交DNN Job。DNN Master负责任务调度,将训练数据分发到不同的Worker Group进行训练,并完成任务的failover等,以支持数据并行。Master将DNN Job的状态变化通过LogStore系统同步到数据库,便于从WebUI展示全部作业状态。此外,Master负责Counter的收集,并在WebUI上可视化展示。每个Worker Group中有1个Coordinator协调全部Worker完成模型并行,而Worker完成具体训练任务。模型通过参数服务器Parameter Server划分,并可靠存储在分布式文件系统中。在微信语音业务中,证明DNN CPU集群可取得与GPU相当的训练结果,而且CPU集群训练和GPU训练框架有互补性。

 

经过一年多的沉淀,深度学习在腾讯产生了落地的成果。腾讯深度学习平台Mariana逐步成型,形成了3个框架,包括:DNN GPU数据并行框架,CNN GPU模型并行和数据并行框架,以及DNN CPU集群模型并行和数据并行框架。Mariana通过数据并行和模型并行,解决了深度学习耗时冗长的问题,成为深度学习研究的有效助力。Mariana通过模型并行,有效支持了大模型。Mariana完成众多工作增强易用性,简化深度学习实验,大幅节约算法开发时间。Mariana的DNN GPU数据并行框架,针对微信语音识别应用,在单机6 GPU卡配置下获得相比单卡4.6倍的加速,可在数日内完成数十亿高维度训练样本的DNN模型训练,同时模型字错率降低10%以上。Mariana的CNN模型并行和数据并行框架,针对ImageNet图像分类问题,在单机4 GPU卡配置下,获得了相比单卡2.52倍的加速,并支持更大模型,在ImageNet 2012数据集中获得了87%的top5准确率。目前,腾讯深度学习平台Mariana已支持了微信语音识别的语音输入法、语音开放平台、长按语音消息转文本等产品,在微信图像识别中开始应用。此外,在广告推荐及个性化推荐等领域,也正在积极探索和实验中。

 

参考文献:

 

1.Hinton, G. E. andSalakhutdinov, R. R. (2006) Reducing the dimensionality of data with neuralnetworks. Science, Vol. 313. no.5786, pp. 504 - 507, 28 July 2006.

 

2. Alex Krizhevsky, IlyaSutskever. and Geoffrey E. Hinton. (2012) ImageNet Classification with DeepConvolutional Neural Networks. in Advancesin Neural Information Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.

 

3. Jeffrey Dean, Greg S. Corrado,Rajat Monga, et al, and Andrew Y. Ng (2012) Large Scale Distributed DeepNetworks. in Advances in NeuralInformation Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.