第八届超大数据库会议(XLDB2015)5月19日—20日在斯坦福大学召开,会议邀请了Facebook人工智能实验室(FAIR)的Keith Adams做了题为“Accelerating Deep Learning at Facebook”的特邀报告。在Keith的报告中,他首先对深度学习进行了一个简单的介绍,然后详细介绍了FAIR为加速深度学习,从硬件、软件和优化等方面所做的一些努力。本文由黄立威、张天雷整理。
Facebook人工智能实验室(FAIR) 成立于2013年12月,主要致力于利用人工智能技术在图像和视频理解、语言识别、自然语言理解等领域取得突破。Keith Adams是Facebook人工智能实验室的一名资深工程师。他在Facebook的主要工作是构建训练智能系统的基础设施。Keith是HipHop虚拟机团队的创始成员之一,其创建的PHP引擎,被Facebook、维基百科、Etsy等其他许多网站所使用。在加入Facebook之前,他在VMware的虚拟机监视器团队工作了九年。
近年来,人工智能领域所取得的许多进步都与“深度学习”息息相关。受益于大数据的出现和大规模计算能力的提升,深度学习已然成为最活跃的计算机研究领域之一。 深度学习的多层非线性结构使其具备强大的特征表达能力和对复杂任务的建模能力。但是构建成熟的深度学习模型常常涉及到巨大的训练数据集,大的模型以及超长的计算时间,因此,深层模型的并行化框架和训练加速方法是深度学习走向实用的重要基石。
深度学习的参数训练过程中,随机梯度下降(SGD)是最常被使用的方法。然而在这个过程中,通常需要很多的技巧,例如模型深度的选择,神经元个数的设定,训练权重的初始化,学习率的调整,Mini-batch的控制等等。即便对这些技巧十分精通,实践中也要多次训练,反复摸索尝试。此外,随机梯度下降本质上串行的,深层模型参数多,计算量大,训练数据的规模更大,需要消耗很多计算资源,训练时间会非常长。针对深度学习面临的这些挑战,Keith介绍了他们的团队在加速深度学习方面所采用几种方法。
GPU(Graphic Process Units,图形处理器)的众核体系结构包含几千个流处理器,可将运算并行化执行,大幅缩短模型的运算时间。随着NVIDIA、AMD等公司不断推进其GPU的大规模并行架构支持,面向通用计算的GPU(General-Purposed GPU, GPGPU)已成为加速可并行应用程序的重要手段。得益于GPU众核(many-core)体系结构,程序在GPU系统上的运行速度相较于单核CPU往往提升几十倍乃至上千倍。目前GPU已经发展到了较为成熟的阶段。利用GPU来训练深度神经网络,可以充分发挥其数以千计计算核心的高效并行计算能力,在使用海量训练数据的场景下,所耗费的时间大幅缩短,占用的服务器也更少。如果针对适当的深度神经网络进行合理优化,一块GPU卡可相当于数十甚至上百台CPU服务器的计算能力,因此GPU已经成为业界在深度学习模型训练方面的首选解决方案,也是Facebook当前加速深度学习的最重要方式。
数据并行是指将训练数据切分为N份,分配给N个worker对N个分片的数据并行训练。完成数据并行训练之后,模型的梯度是所有分片数据上梯度的平均值,然后使用这个均值对参数进行更新,之后再将更新的参数返回给N个worker进行下一次的迭代。在训练的过程中,多个训练过程相互独立,每次迭代过程中worker之间的通信等比于参数的数量。数据并行也存在自身的缺点,当训练数据太多时,数据并行不得不减小学习率,以保证训练过程的平稳。
模型并行将模型拆分成几个单元,每一层都可以被拆分,由不同的训练单元分别持有,共同协作完成训练。当一个计算单元上的神经元的输入来自另一个训练单元上的神经元的输出时,不同计算单元之间就产生通信开销。因此,模型并行拆分的单元太多时,神经元输出值的通信量会急剧增加,导致模型的效率大幅下降。多数情况下,模型并行带来的通信开销和同步消耗超过数据并行,因此加速比也不及数据并行。但对于单机内存无法容纳的大模型来说,模型并行提供了一个很好的选择。同时也可以组合数据并行和模型并行产生混合架构。
Torch7 是一个为机器学习算法提供广泛支持的科学计算框架,其中的神经网络工具包(Package)实现了均方标准差代价函数、非线性激活函数和梯度下降训练神经网络的算法等基础模块,可以方便地配置出目标多层神经网络。Torch长期以来都是很多机器学习和人工智能项目的核心,不仅是学术界,就连谷歌、Twitter和英特尔等企业也都使用这一架构。Facebook开发了一些能够在Torch7上更快速地训练神经网络的模块,推出了一些优化工具,加快了基于Torch的深度学习项目的运行速度,比如,其中一个工具允许开发者使用多个GPU进行参数的并行训练,还有工具可以使卷积神经网络的训练速度提升数十倍以上,而卷积神经网络是很多深度学习系统的核心。另外,Facebook还推出了多款工具,为Torch自带的功能赋予更快的速度,这些工具的速度常常比Torch默认工具快3至10倍。
CPU集群方案的基本架构包含用于执行训练任务的Worker、用于分布式存储分发模型的参数服务器(Parameter Server)和用于协调整体任务的主控程序(Master)。CPU集群方案适合训练GPU内存难以容纳的大模型,以及稀疏连接神经网络。Keith还对Andrew Ng和Jeff Dean提出的参数服务器架构进行了简单介绍,他们在Google用1000台CPU服务器,完成了模型并行和Downpour SGD数据并行的深度神经网络训练。Andrew Ng和Jeff Dean的这项 成果 发表在NIPS2012上。
在Keith的报告中,还提到了Tensor DSM等其他的方式用于加速深度学习。总之,深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,并展现了强大的学习数据集本质和高度抽象化特征的能力。但是其面临的最大问题是如何解决其过长的计算时间,只有强有力的基础设施和定制化的并行计算框架,才能让以往不可想象的训练任务加速完成,为深度学习走向实用奠定坚实的基础。
感谢徐川对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 )。