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倍。
上面的热力图可视化地显示了采用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模块:
快速空间卷积模块,使用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
卷积模块更加简单易用。它们与NN的API完全兼容。
CONV= nn.SpatialConvolutionCuFFT(...)-- fast spatial convolutions!
CONV= nn.TemporalConvolutionFB(...)-- fast temporal convolutions!
LookupTable和Hierarchical SoftMax分别被命名为nn.LookupTableGPU和nn.HSM,也是超级简单易用。它们的使用,以及fbcunn的安装步骤、API文档等更多的细节,您都可以在这个链接的完整的文档和规范中找到答案:http://facebook.github.io/fbcunn/fbcunn/。
编后语
极客们说,人工智能是世界的未来,深度学习算法是让机器拥有智能的最佳途径。我们看到,从的相册处理到无人驾驶汽车,深度学习的模型已经在逐步应用。尽管目前的技术成果距离S.W.Hawking和Elon Musk所担忧的“机器政变”还非常遥远,但在硬件加速技术的支撑和开源社区的贡献之下,深度学习算法的普及应用门槛确实大大降低,模式识别、NLP变得更加简单,我们没有理由不加以学习和利用。