Geoffrey Hinton 的努力,使得深度学习(Deep Learning,DL)成为实现机器智能的核心技术。然而,深度学习的一些坑,如大型神经网络的计算负载、训练性能,并不那么容易克服。现在,深度学习的爱好者可以通过 Facebook 的福利消除这一障碍:日前, Facebook 人工智能研究院 (FAIR)宣布开源了一组深度学习软件库,是针对 Torch 机器学习框架的插件,基于 NVIDIA 的 GPU,大大提升了神经网络的性能,可以用于计算机视觉和自然语言处理(NLP)等场景。
那么,具体而言,Facebook 开源深度学习软件库有哪些内容?它会是谁的菜?它能做什么?我们应当如何利用它?
开源代码&工具
谁能受益
根据 Facebook 的说法,如果您想训练用于图像识别、自然语言处理或其他应用程序的大规模的深度学习系统(特别是卷积网络),fbcunn 会很有帮助。如果您已经是一个 Torch 用户,效果更佳——我们知道,Torch 作为一个协助机器学习技术开发的开源环境,一直以来是很多人工智能项目的核心,不管是在学校研究或者是类似 Google、Twitter 和 Intel 这样的公司,都采用这一框架。
开源之后,深度学习生态链上可以有更多的玩家。FAIR 研究员、软件工程师 Soumith Chintala 表示,开源的 AI 工具能够帮助研究实验室和新兴创业公司免去了从零开始研究的复杂道路,把更多的精力和时间都投入到改善现有的算法中,同时开源的 AI 工具也将成为 Facebook 和创业团队之间的催化剂。
能做什么
Facebook 表示,其开源优化的深学习模块,加快了基于 Torch 的深度学习项目的运行速度,允许我们在更短的时间训练规模更大的神经网络加快我们的研究项目。
开源的包括用于大型卷积网(ConvNets)的 GPU 优化模块,以及那些在自然语言处理领域常用的网络。Facebook 的 ConvNets 模块包括一个快速的基于 FFT 的卷积层,采用基于 NVIDIA 的 cuFFT 库构建的自定义 CUDA 内核。
除此之外,还包括许多其他基于 CUDA 的模块和容器(container)。
基于 FFT 的卷积层
本次发布的最重要部分包括基于 FFT 的卷积层代码,因为在训练 ConvNets 中卷曲占用了大部分的计算时间。由于提高这些模型的训练时间转化为更快的研发,Facebook 已经花了相当大的工程努力提高 GPU 卷积层。这项工作成效显着,达到目前公布的最快代码的 23.5 倍。
上面的热力图可视化地显示了采用 Facebook 的 ConvolutionFFT 相对于采用 NVIDIA 的 CuDNN 完成一个训练的相对速度,红色代表 Facebook 慢,绿色代表 Facebook 更快,颜色增强代表加速的幅度。
对于小尺寸的内核(3×3),增速适中,最高速度比 CuDNN 快 1.84 倍。
对于较大尺寸的内核,从(5×5)开始,增速相当可观。
更大尺寸的内核(13x13),最高速度为比 CuDNN 快 23.5 倍。(更多的技术细节,请移步阅读 Facebook 的 Arxiv 论文 。)
多 GPU之上的并行化
从工程方面,Facebook 一直努力实现在多 GPU 上并行训练神经网络模型的能力。Facebook 致力于最小化并行的开销,同时也使研究人员极易使用,通过数据并行和模型并行模块(fbcunn 的一部分)。当研究人员把它们的模型推到这些易于使用的容器,代码自动调度模型在多个 GPU 上最大化加速。Facebook 使用多 GPU 在 ImageNet 上训练一个 ConvNet 的一个例子已经展示了这一点。
fbcunn是什么
这个库包含 Facebook 用于 GPU 的高度工程化深度学习模块,以加快深度学习的速度。它插入到 Torch7 的框架之中,通过 luarocks 无缝安装,并且与 Torch 的 NN 封装完全兼容。
总体来说,Facebook 发布了用于 Convnets 和一般神经网络的快速 NN 模块:
示例:
fbcunn如何使用
m = nn.DataParallel():add(nn.SpatialConvolution(...)):add(nn.ReLU())-- see, so simple<br>
<p>CONV= nn.SpatialConvolutionCuFFT(...)-- fast spatial convolutions!</p><p>CONV= nn.TemporalConvolutionFB(...)-- fast temporal convolutions!</p>