Facebook 加速深度学习研发

  • 张天雷

2015 年 7 月 23 日

话题:Facebook大数据语言 & 开发架构机器学习深度学习AI

第八届超大数据库会议(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 介绍了他们的团队在加速深度学习方面所采用几种方法。

GPGPU 加速

GPU(Graphic Process Units,图形处理器)的众核体系结构包含几千个流处理器,可将运算并行化执行,大幅缩短模型的运算时间。随着 NVIDIA、AMD 等公司不断推进其 GPU 的大规模并行架构支持,面向通用计算的 GPU(General-Purposed GPU, GPGPU)已成为加速可并行应用程序的重要手段。得益于 GPU 众核(many-core)体系结构,程序在 GPU 系统上的运行速度相较于单核 CPU 往往提升几十倍乃至上千倍。目前 GPU 已经发展到了较为成熟的阶段。利用 GPU 来训练深度神经网络,可以充分发挥其数以千计计算核心的高效并行计算能力,在使用海量训练数据的场景下,所耗费的时间大幅缩短,占用的服务器也更少。如果针对适当的深度神经网络进行合理优化,一块 GPU 卡可相当于数十甚至上百台 CPU 服务器的计算能力,因此 GPU 已经成为业界在深度学习模型训练方面的首选解决方案,也是 Facebook 当前加速深度学习的最重要方式。

数据并行(Data Parallel)

数据并行是指将训练数据切分为 N 份,分配给 N 个 worker 对 N 个分片的数据并行训练。完成数据并行训练之后,模型的梯度是所有分片数据上梯度的平均值,然后使用这个均值对参数进行更新,之后再将更新的参数返回给 N 个 worker 进行下一次的迭代。在训练的过程中,多个训练过程相互独立,每次迭代过程中 worker 之间的通信等比于参数的数量。数据并行也存在自身的缺点,当训练数据太多时,数据并行不得不减小学习率,以保证训练过程的平稳。

模型并行(Model Parallel)

模型并行将模型拆分成几个单元,每一层都可以被拆分,由不同的训练单元分别持有,共同协作完成训练。当一个计算单元上的神经元的输入来自另一个训练单元上的神经元的输出时,不同计算单元之间就产生通信开销。因此,模型并行拆分的单元太多时,神经元输出值的通信量会急剧增加,导致模型的效率大幅下降。多数情况下,模型并行带来的通信开销和同步消耗超过数据并行,因此加速比也不及数据并行。但对于单机内存无法容纳的大模型来说,模型并行提供了一个很好的选择。同时也可以组合数据并行和模型并行产生混合架构。

基于 Torch7 的深度学习(Productive Deep Learning with Torch7)

Torch7是一个为机器学习算法提供广泛支持的科学计算框架,其中的神经网络工具包(Package)实现了均方标准差代价函数、非线性激活函数和梯度下降训练神经网络的算法等基础模块,可以方便地配置出目标多层神经网络。Torch 长期以来都是很多机器学习和人工智能项目的核心,不仅是学术界,就连谷歌、Twitter 和英特尔等企业也都使用这一架构。Facebook 开发了一些能够在 Torch7 上更快速地训练神经网络的模块,推出了一些优化工具,加快了基于 Torch 的深度学习项目的运行速度,比如,其中一个工具允许开发者使用多个 GPU 进行参数的并行训练,还有工具可以使卷积神经网络的训练速度提升数十倍以上,而卷积神经网络是很多深度学习系统的核心。另外,Facebook 还推出了多款工具,为 Torch 自带的功能赋予更快的速度,这些工具的速度常常比 Torch 默认工具快 3 至 10 倍。

参数服务器架构(Parameter Server Architecture)

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 读者交流群)。

Facebook大数据语言 & 开发架构机器学习深度学习AI