谢邀。先发一图热身,CES 2016
http://www. nvidia.com/object/ces20 16.html上nVidia的CEO Jen-Hsun Huang在说到现代AI引擎的时候把MXNET放在幻灯片上当作代表,视频在19:00开始。
我先从技术角度客观评论一下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的设计优势有关。虽然肉不一定长的很全,但是在需要的时候,可以往一个方向发力,快速到达已经有的框架做不到的效果。
技术之外,再说一下关于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”的按钮,你不点一下么?