在开始深度学习项目之前,选择一个合适的框架非常重要。近日,来自数据科学公司SiliconValleyDataScience的数据工程师MattRubashkin(加州大学伯克利分校博士)为我们带来了深度学习7大流行框架的深度横向对比。我希望这篇文章可以帮助你。在SVDS,我们的研发团队一直在研究不同的深度学习技术;从识别图像到语音,我们也在各种框架下实现了很多应用。在这个过程中,我们意识到我们需要一种简洁的方式来同时获取数据、创建模型并评估这些模型的性能。但当我们一次又一次开始新的深度学习项目时,却始终找不到一个参考标准来告诉自己如何开始。现在,为了回馈开源社区,帮助后来者,我们决定利用自己的经验,对目前流行的几种工具(Theano、TensorFlow、Torch、Caffe、MXNet、Neon、CNTK)进行横向比较。下图展示了各种深度学习工具的优缺点,希望对大家有所帮助。先说结论:这组对比参考了各种公开的benchmark评测,以及我们对这些技术在图像/语音识别应用中的主观印象。此外,您还需要注意:语言当您开始深度学习项目时,您必须使用支持您使用的语言的框架。比如Caffe(C++)和Torch(Lua)只能支持有限的几种语言(最近,随着PyTorch的出现,情况发生了变化)。所以如果你要选择以上两个框架,建议你提前熟悉C++或者Lua语言。相比之下,TensorFlow和MXNet具有丰富的多语言支持,即使您是C++新手也可以使用它们。教程和资源目前,各种深度学习框架可用的教程和资源的质量和数量差异很大。Theano、TensorFlow、Torch和MXNet都有非常详细的文档和教程,初学者很容易理解和实施。相比之下,虽然微软的CNTK和英特尔的NervanaNeon也是强大的工具,但我们在它们上看到的新手级别的资料却很少。另外,在研究过程中,我们发现GitHub社区的参与度不仅可以用来准确评估不同工具的开发水平,也是在搜索StackOverflow或Git时能否快速解决问题的参考指标回购的问题。当然,作为Google提供的框架,TensorFlow在教程、资源、开发人员和社区贡献者的数量上理所当然地处于领先地位。CNN建模能力卷积神经网络(CNN)通常用于图像识别、推荐引擎和自然语言识别等应用。CNN由一组多层神经网络组成,这些神经网络在运行时将输入数据分为预定义类别。CNN还可用于回归分析,例如对自动驾驶汽车的转向角进行建模。在Hengping中,我们评估了一个框架的CNN建模能力,考虑了几个属性:定义模型的机会空间、预构建层的可用性以及可用于连接这些层的工具和功能。我们发现Theano、Caffe和MXNet都具有很好的CNN建模能力。其中TensorFlow因为易于搭建的InceptionV3模型,Torch因为丰富的CNN资源,包括简单易用的时间卷积集,使得这两个框架在CNN建模能力上脱颖而出。RNN建模能力循环神经网络(RNN)通常用于语音识别、时间序列预测、图像字幕和其他需要处理顺序信息的任务。由于预建的RNN模型数量没有CNN多,如果你已经有RNN深度学习项目,最重要的是优先考虑旧RNN模型在哪个框架中实现。目前资源极少在Caffe上的RNN上,而微软的CNTK和Torch有丰富的RNN教程和预建模型。当然最新的TensorFlow中也有一些RNN的资源,在TFLearn和Keras中也有很多使用TensorFlow的RNN例子。架构对于在特定框架中构建和训练新模型,易于使用和模块化的前端至关重要。TensorFlow、Torch和MXNet都具有直观的模块化架构,使开发相对容易。相比之下,我们需要在像Caffe这样的框架上做很多工作来创建一个新层。此外,我们在开发过程中发现,由于TensorBoardwebGUI等应用的存在,TensorFlow在训练中和训练后都非常容易调试和监控。SpeedTorch和Nervana在开源卷积神经网络基准测试中的性能最好:https://github.com/soumith/convnet-benchmarks/blob/master/README.mdTensorflow的性能在大多数测试中都具有竞争力,而Caffe和Theano略微落后:https://github.com/tobigithub/tensorflow-deep-learning/wiki/tf-benchmarks微软声称他们的CNTK在某些RNN训练任务中速度最快。在另一项比较Theano、Torch和TensorFlow的RNN性能的研究中,Theano是最快的:https://arxiv.org/abs/1511.06435多GPU支持大多数深度学习应用程序需要大量的浮点运算(FLOPs).例如百度的DeepSpeech识别模型需要10sExaFLOPs进行训练,超过10e18次计算:https://arxiv.org/abs/1512.02595考虑到目前NvidiaPascal架构TitanX等高级显卡每秒可以执行10e9FLOPs:https://www.nvidia.com/en-us/geforce/products/10series/titan-x-pascal/因此,如果您需要在大型数据集上训练新模型-在单个GPU机器上--它可能需要长达一周的时间。为了减少构建模型所需的时间,我们需要并行使用多个GPU来构建我们自己的机器。幸运的是,上述大多数架构都很好地支持多GPU计算。其中,据悉MXNet拥有最新的多GPU优化引擎:http://www.allthingsdistributed.com/2016/11/mxnet-default-framework-deep-learning-aws.htmlKerasCompatibilityKeras是一款快速高用于构建深度学习原型的级库。我们在实践中发现,它是数据科学家应用深度学习的好帮手。Keras目前支持两种后端框架:TensorFlow和Theano,Keras很快就会成为TensorFlow的默认API:http://www.fast.ai/2017/01/03/keras/不过,Keras的作者说这个高-level库在未来仍将作为支持多种框架的前端存在:https://github.com/fchollet/keras/issues/5050#issuecomment-272945570总结如果你想开始深度学习,你应该从首先评估您团队的技能和业务需求。例如,如果一个以Python为中心的团队想要开发一个图像识别应用程序,你应该使用TensorFlow,因为它具有丰富的资源、良好的性能和完整的原型工具。如果支持Lua的团队想要将RNN应用到大规模生产环境中,他们将受益于Torch高速且强大的RNN建模能力。未来,我们将继续讨论这些框架在更大规模应用程序中的性能。这些挑战包括多机并联时的多GPU优化,各种开源库的兼容性,如CMUSphinx和Kaldi等,敬请期待。
