新智元启动新一轮大招聘:COO、执行总编、主编、高级编译、主笔、运营总监、客户经理、咨询总监、行政助理等 9 大岗位全面开放。 简历投递:j[email protected] HR 微信:13552313024 新智元为COO和执行总编提供最高超百万的年薪激励;为骨干员工提供最完整的培训体系、高于业界平均水平的工资和奖金。加盟新智元,与人工智能业界领袖携手改变世界 【新智元导读】本文作者陈汝丹从定位、框架使用、分布式构成三个方面比较了 TensorFlow、MXNet、PaddlePaddle三个常用开源框架。 本文转载自《TensorFlow、MXNet、PaddlePaddle 对比 | 我爱计算机》,特此感谢。 从深度学习开始流行,到深度学习框架的迭代,到各类实际应用的出现,不过短短几年时间。TensorFlow刚出的那段时间,简单对比过TensorFlow、MXNet、caffe三个框架,有些看法可能也不够准确,到了今天,TensorFlow、MXNet作为国内风头很盛的框架迭代了多个版本, caffe几乎没怎么更新了, 因此就不再讨论caffe了,而是看看百度推出的开源框架PaddlePaddle,本文主要对比一下TensorFlow、MXNet、PaddlePaddle在用户实现上的一些异同。先从三个框架的定位开始。 1.定位 其实发展到现在,各个框架对自己的定位都不相同,硬要说哪个框架最好没什么必要,结合自身需求找到合适的用就够了(实验室的服务器不太方便拿来折腾,本文就不比较运算速度了)。而框架的定位从它们的网站标题中就完全可以看出来。 TensorFlow: An open-source software library for Machine Intelligence TensorFlow想做的是人工智能的算法引擎,它不仅提供了深度学习的基本元件例如卷积、pooling、lstm等,提供很多基本计算操作,在这一年还围绕着算法开发推出了TensorFlow Serving用于将算法动态部署到线上、想取代scikit-learn的tf.contrib.learn、将不同尺寸的输入处理成相同规模用于批处理的TensorFlow Fold、在移动平台上跑算法、支持Java/Go语言的接口、分布式实例等等。这些都可以看出TensorFlow在不断扩张版图,它不只是一个框架提供一些API供用户调用,也同时在围绕着算法推出各种配套服务。也许由于TensorFlow的扩张,做优化的人不够多,导致现在运行效率就算是分布式版本都比其他框架都要慢[4],而且版本间有时候函数接口还老不兼容。最新的1.0的版本说Inception v3神经网络的训练速度提升了58倍,个人觉得tf底层实现不会大改,如果要提速可能需要针对各个网络单独设计优化版本。 MXNet: Flexible and Efficient Library for Deep Learning MXNet对自己的定位是一个flexible和efficient的深度学习框架,它的重点放在了深度学习算法上面,而针对两个特性,前者是说它支持命令式和声明式两种编程方式,比如说做一道菜,TensorFlow就必须按照规定好的步骤热锅、放油、放菜、放盐等一步步执行,而MXNet则能在中间过程做点别的事情,假如味道淡了再放点调味料,假如又想加别的菜了也可以加进去,所以说它更灵活,其次还体现在支持多种语言,从最早的R/Julia到现在增加了对Go/Matlab/Scala/Java的支持。高效性则是指MXNet的分布式并行计算性能好、程序节省内存,在多GPU上表现非常好,几乎能做到线性加速。内存方面比较能说明问题的是这个框架一推出的时候就支持在移动设备上运行神经网络。TensorFlow开始横向拓展服务时,MXNet仍旧继续优化技术,atv,提供更多的operators、优化内存相关操作、提高并行效率等。并且去年十月份提出了NNVM,将代码实现和硬件执行两个部分隔离开,使得不同的框架不同语言实现的代码可以无差别执行在不同硬件之上。但这一年MXNet都没有产生一个大的社区,有同学说遇到问题还需要自己去查阅修改源码,导致使用门槛还是有一些高。但是16年11月份亚马逊将MXNet选为了官方框架,后续估计会提供非常简洁的云计算服务,用户只需要提交网络配置文件和数据就够了,使用会成为一件简便的事情。 PaddlePaddle: Open and Easy-to-Use Deep Learning Platform for Enterprise and Research PaddlePaddle是16年9月份开源的,它对自己的定位是easy to use,这点做的很好,它将一些算法封装的很好,如果仅仅只需要使用现成的算法(VGG、ResNet、LSTM、GRU等等),源码都不用读,按照官网的示例执行命令,替换掉数据、修改修改参数就能跑了,特别是NLP相关的一些问题,使用这个库比较合适,并且没有向用户暴露过多的python接口。它的中文文档相对友好,但是中英文文档数量都有点少,主程序是个c++程序,所以源码阅读还挺方便,但是由于像caffe一样按照功能来构造整个框架,二次开发要从c++底层写起,使用已有的算法没问题,但想做一些新功能会麻烦一些。做科研的话这个库可能不是很合适,它的文档比较注重怎么用它已经实现好的网络,而不是怎么写网络,比较适合需要成熟稳定的模型来处理新数据的情况。它的分布式部署做的很好,目前是唯一支持Kubernetes的深度学习库。 2.使用构成 这个部分简单谈谈从我们用户角度来看各个框架是怎么设计和使用的。 (责任编辑:本港台直播) |