引言:深度学习是近年机器学习领域的重大突破,有着广泛的应用前景。随着Google公开Google Brain计划,业界对深度学习的热情高涨。百度成立深度学习研究院,腾讯也启动了深度学习的研究。腾讯在深度学习领域持续投入,获得了实际落地的产出。本文是腾讯深度学习系列文章的第一篇。我们准备了四篇文章,阐述深度学习的原理和在腾讯的实践。
2014年6月22日,腾讯深度学习平台(Tencent Deep Learning Platform)于国际机器学习领域顶级会议ICML2014上首次公开亮相,揭秘了腾讯深度学习平台的目标和技术路线,及其微信语音识别、微信图像识别、广点通广告推荐等应用场景。
腾讯深度学习平台包括深度神经网络(Deep Neural Networks,DNN)的GPU数据并行框架,深度卷积神经网络(Deep Convolutional Neural Networks,CNN)的GPU数据并行和模型并行框架,以及DNN CPU集群框架。上述框架实现了深度学习的共性需求,减少新算法开发量。框架通过并行加速,加速深度学习训练。
腾讯深度学习平台的DNN GPU数据并行框架,在单机6 GPU卡配置下获得相比单卡4.6倍的加速,可在数日内完成40亿左右高维度训练样本的DNN模型训练。同时通过算法优化,在模型训练提速的同时,提升了模型的分类准确度10%以上。基于此DNN框架,微信语音识别业务得到进一步完善,已于2014年初全量上线微信语音输入和语音开放平台。深度学习平台的CNN模型并行和数据并行框架,在单机4 GPU卡配置下,获得了相比单卡2.52倍的加速,这一指标处于国际领先水平。基于CNN并行框架中的模型并行,图像业务能够支持更大规模图像分类模型,在ImageNet 2012数据集中获得了87%的top5准确率,处于国际先进水平。此外,腾讯深度学习平台提供了DNN CPU集群框架,支持超大规模深度神经网络训练。
图1:腾讯深度学习平台在ICML2014的展区
深度学习是近年来机器学习领域最令人瞩目的方向。自2006年深度学习界泰斗Geoffrey Hinton在Science杂志上发表Deep Belief Networks的论文后,重新激活了神经网络的研究,开启了深度神经网络的新时代。学术界和工业界对深度学习热情高涨,并逐渐在语音识别、图像识别、自然语言处理等领域获得突破性进展。深度学习在语音识别领域获得相对20%到30%的准确率提升,突破了近十年的瓶颈。2012年图像识别领域在ImageNet图像分类竞赛中取得了85%的top5准确率,相比前一年74%的准确率有里程碑式的提升,并进一步在2013年获得89%的准确率。目前Google、Facebook、Microsoft、IBM等国际巨头,以及国内百度、阿里巴巴等互联网巨头争相布局深度学习。
深度学习通过构建深层神经网络,来模拟人类大脑的工作原理。如图2所示,深层神经网络由一个输入层,数个隐层,以及一个输出层构成。每层有若干个神经元,神经元之间有连接权重。每个神经元模拟人类的神经细胞,而结点之间的连接模拟神经细胞之间的连接。
但是,深度神经网络面临巨大的挑战。
首先,深度神经网络模型复杂,训练数据多,计算量大。一方面,DNN需要模拟人脑的计算能力,而人脑包含100多亿个神经细胞,这要求DNN中神经元多,神经元间连接数量也相当惊人。从数学的角度看,DNN中每个神经元都包含数学计算(如Sigmoid、ReLU或者Softmax函数),需要估计的参数量也极大。语音识别和图像识别应用中,神经元达数万个,参数数千万,模型复杂导致计算量大。另一方面,DNN需要大量数据才能训练出高准确率的模型。DNN参数量大,模型复杂,为了避免过拟合,需要海量训练数据。两方面因素叠加,导致训练一个模型耗时惊人。以语音识别为例,目前业界通常使用样本量达数十亿,以CPU单机需要数年才能完成一次训练。
其次,深度神经网络训练收敛难,需要反复多次实验。深度神经网络是非线性模型,其代价函数是非凸函数,容易收敛到局部最优解。同时,深度神经网络的模型结构、输入数据处理方式、权重初始化方案、参数配置、激活函数选择、权重优化方法等均可能对最终效果有较大影响。另外,深度神经网络的数学基础研究稍显不足。虽然可以通过限制性波尔兹曼机(Restricted Boltzmann Machines,RBMs)等减少陷入局部最优的风险,但仍然不是彻底的解决方案,仍然需要在实际使用深度神经网络解决问题的时候,合理的利用海量数据,合理的选择优化方式。上述原因导致需要技巧、经验,基于大量实验来训练出一个效果好的模型。
面对机遇和挑战,腾讯在2013年初,由WXG微信技术架构部联合TEG数据平台部启动了深度学习的合作研究。微信技术架构部完成了DNN的单机多GPU模型并行训练框架,数据平台部着力打造DNN的CPU集群训练框架。2013年5月,基于DNN训练的语音业务正式上线。随后以数据平台部为主,融合双方优势,开发出升级版的DNN GPU数据并行框架,以及全新的CNN GPU模型并行和数据并行训练框架,打造了统一的腾讯深度学习平台。2014年初开始,全面应用于语音识别、图像识别、广告推荐等应用领域。腾讯深度学习平台致力于通过并行技术加速训练,并提供并行框架和算法以简化算法工程师的工作。
腾讯深度学习平台以GPU服务器为主,每台服务器配置4或者6块Nvidia Telsa系列高端科学计算用GPU卡。利用每块GPU卡2000多个流处理器的强大计算能力,并实现多GPU卡并行以加速训练。
腾讯深度学习平台重点研究多GPU卡的并行化技术,完成DNN的数据并行框架,以及CNN的模型并行和数据并行框架。数据并行和模型并行是Google分布式大神Jeff Dean和深度学习大佬Andrew Ng在2012年NIPS会议上发表的DistBelief 论文中针对深度学习的CPU集群框架提出的定义。数据并行指将训练数据划分为多份,每份数据有一个模型实例进行训练,再将多个模型实例产生的梯度合并后更新模型。模型并行指将模型划分为多个分片,每个分片在一台服务器,全部分片协同对一份训练数据进行训练。我们学习并借鉴了这两种并行方式,并成功应用于单机多GPU卡的并行。
DNN的数据并行框架通过同步随机梯度下降进行训练。数据并行训练中,每个GPU卡各自训练,并各自产生一份梯度值,然后进行参数交换。图3. 展示了参数交换过程。每台GPU服务器配置6块GPU卡,其中四块通过树状的PCIe连接,并与另外两块GPU卡通过IOH连接。参数交换过程从逻辑上看,梯度收集阶段将全部梯度值累加起来,然后应用到当前模型以更新参数得到新模型,最后在模型分发阶段将新模型下发给全部GPU卡。采用数据并行后,相对于单卡训练过程,关键的问题是参数交换过程引入额外时间消耗,拖累了并行性能,使得加速比很难提高。我们通过一个精心设计的拓扑完成参数交换,提升整体性能。此外,我们采用近似的自适应学习率算法,使得支持自适应学习率所需交换的数据量降低了一个数量级。
图3:DNN GPU框架数据并行的参数交换过程
DNN的数据并行框架在微信语音识别中得到应用。微信中语音识别功能的入口是语音输入法、语音开放平台以及长按语音消息转文本等。对微信语音识别任务,通过腾讯深度学习平台,识别准确率获得了极大的提升,目前识别能力已经跻身业界一流水平。同时可以满足语音业务海量的训练样本需求,通过缩短模型更新周期,使得微信语音业务可以及时满足各种新业务需求。
卷积神经网络CNN的模型并行和数据并行框架的结构如下图所示:
图4: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竞赛冠军用的网络,我们取得了两卡模型并行1.71倍加速比,4 GPU卡数据并行加模型并行时比单卡2.52倍的加速比,处于国际领先水平。通过CNN并行框架的模型并行,单个GPU上CNN网络占用的GPU显存从3.99 GB减少到2.15 GB,使得可以训练更大规模的图像分类模型。通过模型并行获得ImageNet 2012数据集87%的top5准确率,处于国际先进水平。CNN并行训练框架在微信图像业务中得到应用,图像识别,图像检索,人脸识别,OCR识别等,都已尝试接入本框架。同时数据平台部支持的广点通广告推荐也开始应用探索。
图5:CNN GPU框架对Hinton的网络在ImageNet 2012的并行加速性能
DNN CPU集群框架实现基于CPU集群的数据并行和模型并行,其总体架构如下图所示:
图6:DNN CPU集群框架总体架构
DNN CPU集群框架提供Vertex+Message的API,实现Bulk Synchronous 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训练框架有互补性。
经过一年多的沉淀,深度学习在腾讯产生了落地的成果。腾讯深度学习平台逐步成型,形成了包括DNN GPU数据并行框架,CNN GPU模型并行和数据并行框架,以及DNN CPU集群模型并行和数据并行框架。上述框架实现了深度学习的共性需求,大幅节约算法开发时间。框架通过数据并行和模型并行,解决了深度学习耗时冗长的问题,成为深度学习研究的有效助力。腾讯深度学习平台在GPU加速性能上已达到国际先进水平,并提交了两项并行加速的专利。目前,腾讯深度学习平台已在微信语音识别、微信图像识别中得到深入应用,有效支持了产品,此外,在广告推荐及个性化推荐等领域,也正在积极探索和实验中。
更多大数据资讯,欢迎关注“腾讯大数据”。