前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DL框架的未来发展,TensorFlow/MXNet/Torch, 选哪个?

DL框架的未来发展,TensorFlow/MXNet/Torch, 选哪个?

作者头像
计算机视觉研究院
发布2018-04-17 16:24:58
1.4K0
发布2018-04-17 16:24:58
举报
文章被收录于专栏:计算机视觉战队

DL framework的学习成本还是不小的,以后未来的发展来看,你建议选哪个?

请主要对比分析下4个方面吧:

1. 实现新计算单元(layer)和网络结构的便利性

如:RNN, bidirectional RNN, LSTM, GRU, attention机制, skip connections等。

2. 实现不同学习任务的便利性

classification和regression自不用说,其他的: multi-label, multi-task, adversarial learning, reinforcement learning等。

3. 调试和排查问题的便利性

这个很重要啊,所以没考虑Theano了。

4. 社区和支持

MXnet没有大公司在推,随着TF/Torch的发展,怕会逐渐被冷落啊

lau phunter的回答:

我先从技术角度客观评论一下MXNet和其他平台的对比,帮助楼主选择平台,兼回答一下楼上楼下对MXnet的一些疑问。

讨论一个机器学习系统需要从两方面来讨论,骨骼和肉。骨骼代表一个框架的架构设计思想,,肉代表了比如operator实现了那些,外部样例的支持程度等。肉必须要长在骨头上,骨头的好坏决定了一个框架最终可以走多远和它的扩展性,肉长多少决定了在已有设计框架下面功能的全面性。

从骨骼上面,mxnet的设计思路优于TF

包括TF在内的图计算框架都有一个限制,就是需要用户把所有的计算全部都表示成一张图来高效运行。这么做不论是在逻辑上,调试上以及和运行环境的交互(python)上面都是有一定劣势。这也是为什么torch采取了支持用户把计算拆分成多步来做,用户可以直接利用lua来选择下一步执行什么。用户可以比较简单地对计算进行模块分割,并且根据比如输入长度的不同来直接动态改变需要运行哪一个步骤。

简单来说,Torch为代表的过程式计算更加灵活。但是基于图计算的框架也提供了比如自动多卡并行调度,内存优化等便利条件。

MXNet结合了这两种编程思路, 允许用户自由把图计算和过程计算混合起来, 并且可以对多步执行进行自动多卡调度, 使得程序在需要优化的部分可以非常优化,而必要的时候可以通过过程计算来实现一些更加灵活的操作, 并且所有的操作都可以自动并行(TF只能并行一个图的执行,但是不能并行像torch这样的多步执行的操作)。结果就是MX可以利用更短的代码来实现TF需要深度修改的东西才可以实现的哦东西,如支持变长LSTM的bucketing API需要大约10行python。

为什么TF和Torch会成为这样不同的设计也有它们自己的原因。TF由G的优秀工程师设计,更加注重性能和优化。Torch本身是researcher设计的,更加注重灵活性。真正好的设计需要兼顾这两方面的需求,DMLC的同学因为同时有系统和机器学习的背景,才会做出结合两者优点的设计。这样的设计思路是深度学习框架的未来,也会影响包括TF和torch在内的框架的转变。

从肉上面来看

TF具有更大的开发团体,在各个operator的支持程度上面相对会比MX来的快一些。因为TF的开发团体比较大,所以在可扩展性上面的考虑不需要那么多。其它社区如Theano和Torch的推进速度和MX差不多,不过积累时间比较久一些。

MX本身采取的方法是更加开放,增加可扩展性。MXNet的operator不仅仅局限于MShadow。MShadow只是提供了一个方便的模板,完全可以使用C, C++, CUDA等去实现。同时支持直接采用numpy来写各种operator。另外,目前的mxnet已经做到完全和Torch兼容,以调用所有Torch的Module和Operator ( mxnet/example/torch at master · dmlc/mxnet · GitHub ),所以Torch能做的MXNet就可以做。通过更加灵活地和整个深度学习开源社区整合,达到共同进步的局面。

在社区支持上

MXNet在上一个月里一共有超过1000个commit,从年初到现在,已经有了超过40个Op。在Kaggle里两个比赛使用MXNet取得第一和第三。例如在刚结束的National Data Science Bowl-II里,第三名使用单MXNet model,他是这样评价MXNet ( 3rd place solution for the second national datascience bowl – Julian de Wit – Freelance software/machine learning engineer. ):

Mxnet. What can I say… great library when you also want to deploy your systems in real-world situations. Especially good windows support is something that is severely lacking from most other libraries.

选择什么东西,总结一下

其实并不需要选择一个唯一的工具,很多工具之间的本质思想是相同的,武林高手也不会因为剑是什么而产生能力的差别。如果想要跑一跑已经有的深度学习代码,其实选择已经有的样例比较方便的就可以了。如果真的要走在前沿,你会发现任何一个工具都不能为完全满足需求,对于系统的深入理解和hacking,修改和不断优化是必须的。

如果想要真正成为理解深度学习系统原理的cutting edge hacker,让自己有能力也可以重头搭建一个比TF还要优秀的深度学习系统,并且在某一些方面有所突破。不妨看一下MXNet,里面有详细的设计文档来解释TF在内的各种优化设计思路,也可以快速地实现现在深度学习框架做不到的功能。举一些例子

  • MX是目前唯一一个提供了单机四块980,用比标准Inception更复杂的模型跑完imagenet全集的框架。
  • MX有最好的内存优化。训练Inception-V3, TensorFlow在K40 12GB显存上只能跑到batch size 32,在MXNet里GTX 980 4G显存就够了。语音上的例子也类似,速度和CNTK一样但是内存只用一半。最近MXNet release的mxnet-memonger进一步优化内存 (https://arxiv.org/abs/1604.06174 github GitHub - dmlc/mxnet-memonger: Sublinear memory optimization for deep learning, reduce GPU memory cost to train deeper nets ), 在一块4G显存的GTX 980上用batch size 128轻松训练一千层的ResNet还有剩余。
  • MX是所有框架里面最早支持分布式的框架。
  • 因为其轻量级的设计,MX是目前唯一一个可以直接不修改代码移植到浏览器的框架。今年的GTC 2016的报告里也提到MXnet可以通过TX1部署到无人机上进行实时物体识别 (GPU Technology Conference 2016 )。

这些例子都和MX的设计优势有关。虽然肉不一定长的很全,但是在需要的时候,可以往一个方向发力,快速到达已经有的框架做不到的效果。

技术之外,再说一下关于MXnet的维护和贡献

MXNet的用户并不仅仅只是几个中国学生,它的主要贡献者列表长达100人 Contributors to dmlc/mxnet · GitHub 成员数超过了github能显示的长度 Network Members · dmlc/mxnet · GitHub 当中还包含了多个kaggle比赛的优胜者和机器学习专家。

实际上很多企业也在用mxnet,例如华为和阿里都有一些组在用,很多startup也在用mxnet。

顺便,MXNet的维护者大约一半在读一半已经毕业,大家都没有表示弃坑还积极坚持维护不断推出新功能,已经毕业的小伙伴们还在他们的公司里积极推广mxnet,也请勿随意下结论。

开源软件不容易,TF是谷歌集中很多领域专家搞起来的,里面优秀的设计思想和实现我们需要学习,而我们也有Caffe,Theano这样不靠干爹完全靠志愿开发人员和社区支持做的很好的深度学习系统,他们是Mxnet的榜样。开源软件从来都不是winner takes all的游戏,每个系统都有自己的优势,MXnet在系统设计上有很多优秀特性,在可扩展性,移动端、内存占用和分布式上有不可替代的优势,欢迎大家多用MXnet多给MXnet贡献代码我们一起茁壮成长,传送门 GitHub - dmlc/mxnet: Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more 右上角有一个“fork”的按钮,你不点一下么?


智靖远回答:

在我看来,机器学习这个领域,从业者(特指技术类从业者,不包括资本类玩家)一定会分成三个不同的群体: 1.学术研究者

他们的工作是从理论上诠释机器学习的各个方面,试图找出“这样设计模型/参数为什么效果更好”,并且为其他从业者提供更优秀的模型,甚至将理论研究向前推进一步。

能够做到这一步的人,可以说凤毛麟角,天赋是绕不过去的大山,机遇和努力也缺一不可。对于这些人,其实也轮不到我们来建议,在长期的研究中他们都有自己喜好的工具和方法,甚至有一言不合就自己开发工具甚至开发语言的(比如LeCun……)。题主应该不属于这一层。

2.算法改进者

他们也许无法回答出“我的方法为什么work”,也许没有Hinton,LeCun那样足以载入史册的重大成果,但是却能根据经验和一些奇思妙想,将现有的模型玩出更好的效果,或者提出一些改进的模型。这些人通常都是各个机器学习巨头公司的中坚力量或者成长中的独角兽,使用什么模型对他们来讲也不是问题,根据所处的环境,通常都有固定的几个选择。他们其实也并不怎么需要关心“我该用什么框架”,重要的是什么框架能够快速地把想法实现出来。所以你会看到caffe和theano和mxnet和torch都一样有大批的用户,仍然在贡献大量的新算法的实现。在这个层面,insight和idea才是重要的东西,各种工具的区别,影响真的没那么大。可能会让一个结果早得到或者晚得到几天或者几周,却不可能影响“有没有成果”。

这也造成了另外一个结果:最最新,最最前沿的成果往往还是用caffe或者theano做出来,发paper,然后tensorflow才开始复现这些成果。搞不好很长一段时间之内也许tf上面都不会出现原生的新奇玩意儿。因为那些正在努力嗷嗷发论文的大中牛们时间非常宝贵,没有太多心思重新学习一种框架。 不过没关系,题主(至少目前)应该不属于这一层。

3.工业实现者

这些人基本上不会在算法领域涉入太深,也就是了解一下各个算法的实现,各个模型的结构。他们更多地是根据论文去复现优秀的成果,或者使用其他人复现出来的成果,并且试图去在工业上应用它。

这个层次的人数是最多的,涉及的因素也非常复杂。但是在框架选择上,其实完全可以用最单纯的原则:哪个人多用哪个。

至于调试的方便性或者性能或者最新算法的实现能力,其实都与使用者数量相关。

人多了贡献代码的人就会更多,遇到问题时候能讨论的人也就更多,出现新的成果时,在这个框架上进行实现的的也就越多,同样的,为这个框架开发各种外围工具的人也会更多。目前这个阶段,TF的靠山最厚实,功能虽然还不强大,更新也还不够快,但是确实人气已经攒得很足了,一些外围的包装比如tflearn也实现了很多最新的成果。所以从目前来看,投身TF不会是一个坏选择,找工作的时候你遇到用tf的公司的可能性也是非常非常高的。

至于MXNet,@lau phunter的答案说的很好,这个年代早就不是胜者通吃的时候了,即使TF有google撑腰,也不可能“消灭”其他几个框架,更何况每个框架都有自己出彩的地方。现在流行的这几个框架都有一些算法改进层次的高手大牛支持着,他们很可能会继续使用正在用的框架。哪怕只有他们支持,也足够撑起一个框架的生命力了,更何况他们的号召力还颇为可观。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机视觉战队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档