转载

CNN提速23.5倍!Facebook开源DL模块带给我们什么?

CNN提速23.5倍!Facebook开源DL模块带给我们什么?

  Geoffrey Hinton 的努力,使得深度学习(Deep Learning,DL)成为实现机器智能的核心技术。然而,深度学习的一些坑,如大型神经网络的计算负载、训练性能,并不那么容易克服。现在,深度学习的爱好者可以通过 Facebook 的福利消除这一障碍:日前, Facebook 人工智能研究院 (FAIR)宣布开源了一组深度学习软件库,是针对 Torch 机器学习框架的插件,基于 NVIDIA 的 GPU,大大提升了神经网络的性能,可以用于计算机视觉和自然语言处理(NLP)等场景。

  那么,具体而言,Facebook 开源深度学习软件库有哪些内容?它会是谁的菜?它能做什么?我们应当如何利用它?

  开源代码&工具

  • Torch
  • iTorch
  • fbcunn
  • fbnn
  • fbcuda
  • fblualib

谁能受益

  根据 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 倍。

CNN提速23.5倍!Facebook开源DL模块带给我们什么?
 

  上面的热力图可视化地显示了采用 Facebook 的 ConvolutionFFT 相对于采用 NVIDIA 的 CuDNN 完成一个训练的相对速度,红色代表 Facebook 慢,绿色代表 Facebook 更快,颜色增强代表加速的幅度。

  对于小尺寸的内核(3×3),增速适中,最高速度比 CuDNN 快 1.84 倍。

CNN提速23.5倍!Facebook开源DL模块带给我们什么?
 

  对于较大尺寸的内核,从(5×5)开始,增速相当可观。

CNN提速23.5倍!Facebook开源DL模块带给我们什么?
 

CNN提速23.5倍!Facebook开源DL模块带给我们什么?
 

  更大尺寸的内核(13x13),最高速度为比 CuDNN 快 23.5 倍。(更多的技术细节,请移步阅读 Facebook 的 Arxiv 论文 。)

CNN提速23.5倍!Facebook开源DL模块带给我们什么?
 

CNN提速23.5倍!Facebook开源DL模块带给我们什么?
 

  多 GPU之上的并行化

  从工程方面,Facebook 一直努力实现在多 GPU 上并行训练神经网络模型的能力。Facebook 致力于最小化并行的开销,同时也使研究人员极易使用,通过数据并行和模型并行模块(fbcunn 的一部分)。当研究人员把它们的模型推到这些易于使用的容器,代码自动调度模型在多个 GPU 上最大化加速。Facebook 使用多 GPU 在 ImageNet 上训练一个 ConvNet 的一个例子已经展示了这一点。

  fbcunn是什么

  这个库包含 Facebook 用于 GPU 的高度工程化深度学习模块,以加快深度学习的速度。它插入到 Torch7 的框架之中,通过 luarocks 无缝安装,并且与 Torch 的 NN 封装完全兼容。

  总体来说,Facebook 发布了用于 Convnets 和一般神经网络的快速 NN 模块:

  • 快速空间卷积模块,使用 FFT 加速卷积。
  • 快速 Temporal 卷积,速度相比 Torch 的 cunn 实现快 1.5 倍至 10 倍。
  • nn.DataParallel 和 nn.ModelParallel 容器。将您的模型插入,在多个 GPU 上加速效果立竿见影。
  • 采用 FFT/ IFFT 为 NN 模块。
  • 用于神经语言模块(Neural Language Models)和文字嵌入的快速 LookupTable。比在 Torch/ NN 下快很多。
  • Hierarchical SoftMax 模块,使得现在分类百万类成为实际可行的策略。
  • 特征映射上的 LP 和 Max Pooling (用于 MaxOut)。
  • 更多的好东西。

  示例:

  • 在 Torch-7 中使用多 GPU 训练基于分类的 imagenet(展示 FFT 卷积以及 ModelParallel 容器)

  fbcunn如何使用

  • DataParallel 和 ModelParallel 这两个模块超级简单易用。这个 unit-test 同时作为例子和测试。examples/imagenet 下面还有 ModelParallel 的例子。
m = nn.DataParallel():add(nn.SpatialConvolution(...)):add(nn.ReLU())-- see, so simple<br>
  • 卷积模块更加简单易用。它们与 NN 的 API 完全兼容。
<p>CONV= nn.SpatialConvolutionCuFFT(...)-- fast spatial convolutions!</p><p>CONV= nn.TemporalConvolutionFB(...)-- fast temporal convolutions!</p>
  • LookupTable 和 Hierarchical SoftMax 分别被命名为 nn.LookupTableGPU 和 nn.HSM,也是超级简单易用。它们的使用,以及 fbcunn 的安装步骤、API 文档等更多的细节,您都可以在这个链接的完整的文档和规范中找到答案:http://facebook.github.io/fbcunn/fbcunn/。
正文到此结束
Loading...