我们在今天发布了新的Project dmlc/MXNet ( https://github.com/dmlc/mxnet )。这是自xgboost, cxxnet, minerva以来集合DMLC几乎所有开发者力量的一个机器学习项目。MXNet名字源于” Mix and Maximize”。我们一直有一个目标,就是希望把cxxnet这样强调性能静态优化的C++库和灵活的NDArray有机结合在一起。做包含cxxnet的静态优化,却又可以像minerva, theano, torch那样进行灵活扩展的深度学习库。
与其他工具相比,mxnet结合了符号语言和过程语言的编程模型,并试图最大化各自优势,利用统一的执行引擎进行自动多GPU并行调度优化。不同的编程模型有各自的优势,以往的深度学习库往往着重于灵活性,或者性能。MXNet通过融合的方式把各种编程模型整合在一起,并且通过统一的轻量级运行引擎进行执行调度。使得用户可以直接复用稳定高效的神经网络模块,并且可以通过Python等高级语言进行快速扩展。
MXNet由 dmlc/cxxnet, dmlc/minerva和Purine2的作者发起,融合了Minerva的动态执行,cxxnet的静态优化和Purine2的符号计算等思想,直接支持基于Python的parameter server接口,使得代码可以很快向分布式进行迁移。每个模块都进行清晰设计,使得每一部分本身都具有被直接利用的价值。C接口和静态/动态Library使得对于新语言的扩展更加容易,目前支持C++和python 2/3 ,接下来相信会有更多语言支持,并方便其他工具增加深度学习功能。
轻量级调度引擎。在数据流调度的基础上引入了读写操作调度,并且使得调度和调度对象无关,用以直接有机支持动态计算和静态计算的统一多GPU多线程调度,使得上层实现更加简洁灵活。
符号计算支持。MXNet支持基于静态计算流图符号计算。计算流图不仅使设计复杂网络更加简单快捷,而且基于计算流图,MXNet可以更加高效得利用内存。 同时进一步优化了静态执行的规划,内存需求比原本已经省的cxxnet还要少。
混合执行引擎。相比cxxnet的全静态执行,minerva的全动态执行。MXNet采用动态静态混合执行引擎,可以把cxxnet静态优化的效率带和ndarray动态运行的灵活性结合起来。把高效的c++库更加灵活地和Python等高级语言结合在一起。
更加灵活:在MShadow C++表达式模板的基础上,符号计算和ndarray使在Python等高级语言内编写优化算法,损失函数和其他深度学习组件并高效无缝支持CPU/GPU成为可能。用户无需关心底层实现,在符号和NDArray层面完成逻辑即可进行高效的模型训练和预测。
对于云计算更加友好:所有数据模型可以从S3/HDFS/Azure上直接加载训练。
代码更加简洁高效:大量使用C++11特性,使MXNet利用最少的代码实现尽可能最大的功能。用约11k行C++代码 (加上注释 4k行)实现了以上核心功能。
开源用户和设计文档,mxnet提供了非常详细的用户文档和设计文档以及样例。所有的代码都有详细的文档注释。并且会持续更新代码和系统设计细节,希望对于广大深度学习系统开发和爱好者有所帮助。