TensorFlow、Pytorch、OneFlow,MXNet、MindSpore这些框架谁最好用?

  TensorFlow、Pytorch、MXNet这些框架谁最好用?

  OneFlow, MindSpore不应该包含进来.

  前言TensorFlowPyTorchOneFlowMXNetMindSpore

  前言众所周知,在机器学习框架领域,PyTorch、TensorFlow已分别成为目前学术界和工业界使用最广泛的两大实力玩家,而紧随其后的Keras、OneFlow、MXNet等框架也由于其自身的独特性受到开发者的喜爱。本文主要是为部分初学者提供建议,对各个主流框架进行较为详细的介绍,框架并无“最好”与“最坏”之分,选择最终归结于您的技术背景、需求和期望。1.TensorFlow

  官网:https://tensorflow.google.cn/TensorFlow框架的前身是Google的DistBelief V2,是谷歌大脑项目的深bai度网络工具库,一些人认为TensorFlow是借鉴Theano重构的。首先目前面临比较麻烦的事情是版本分裂严重,2.0推出之后到2.4之间的版本几乎不可用,接口变更太多,runtime效率比1.X普遍损失50%左右的性能。 优点总结:适合大规模部署,特别是需要跨平台和嵌入式部署时支持python、JavaScript、C ++、Java和Go,C#和Julia等多种编程语言;灵活的架构支持多GPU、分布式训练,跨平台运行能力强;自带TensorBoard组件,能可视化计算图,便于让用户实时监控观察训练过程;官方文档非常详尽,可查询资料众多;社区庞大,大量开发者活跃于此。

  2.PyTorch

  官网:https://pytorch.org/PyTorch是Facebook出品的。本质上是Numpy的替代者,而且支持GPU、带有高级功能,可以用来搭建和训练深度神经网络。如果你熟悉Numpy、Python以及常见的深度学习概念(卷积层、循环层、SGD等),会非常容易上手PyTorch。基本上可以做到Python Native的编程模式。当然缺点是有的,例如在做大规模分布式并行的时候、大模型大击群、端侧部署和安全可信部署的时候,需要定制性修改大量的代码。 优点总结:更有利于研究人员、爱好者、小规模项目等快速搞出原型。简洁。PyTorch在设计上更直观,追求尽量少的封装,建模过程透明,代码易于理解;易用。应用十分灵活,接口沿用Torch,契合用户思维,尽可能地让用户实现“所思即所得”,不过多顾虑框架本身的束缚;社区。提供完整的文档和指南,用户可以通过全面的教程完成从入门到进阶,有疑问也可以在社区中获得各种及时交流的机会。

  3. OneFlow官网:http://www.oneflow.org/a/chanpin/oneflow/OneFlow是一流科技开发的深度学习框架,作为国家4大重点实验室(浙江之江实验室)的首选框架,通过之江的科研实力进行对外辐射,这一点还是很佩服的。其核心代码执行都是以Task列表的形式实现,不同的求解器都是在执行一个task流。另外在分布式多机多卡和单机多卡中,runtime的设计使用了分布式Actor机制使得框架天然支持流水线,所以分布式还是很友好,性能也很高。问题就是社区实在太小,很多资料参考不完善,另外易用性跟Pytorch相比,有待提升。SUM:性能和易用性兼顾确实很难,如果玩分布式GPU集群希望性能高,那么OneFlow可能很适合。

  优点总结:国内开发的深度学习框架分布式易用且稳定性强

  4.MXNetMXNet 是亚马逊(Amazon)选择的深度学习库,拥有类似于 Theano 和 TensorFlow 的数据流图,为多 GPU 配置提供了良好的配置,有着类似于 Lasagne 和 Blocks 更高级别的模型构建块。得益于AWS的强大支撑,其在云端非常友好,可直接与S3,HDFS和Azure兼容。不过缺点也很明显,社区还是比较小,另外学习曲线比Pytroch高,目前还做不到Python native。 优点总结:速度的标杆灵活的编程模型:非常灵活。支持命令式和符号式编程模型以最大化效率和性能。从云端到客户端可移植:可运行于多CPU、多GPU、集群、服务器、工作站甚至移动智能手机。多语言支持:支持七种主流编程语言,包括C++、Python、R、Scala、Julia、Matlab和JavaScript。事实上,它是唯一支持所有 R 函数的构架。云端友好,可直接与S3,HDFS和Azure兼容

  5.MindSpore(昇思)官网:https://www.mindspore.cn/MindSpore是华为推出的深度学习框架,作为华为战略平台性的产品。MindSpore坚持走底层框架优化路线,一切皆编译,所以把动态图和静态图做到动静一致,如果想学编译,看看MindSpore的源码还是很有趣的。但是,目前社区目前还是比较小,文档友好型还真的要提高;另外API接口目前还优点混乱,需要持续升级收敛。MindSpore兼顾易用性和性能,在分布式集群和华为全栈下有独特的性能优势,易用性在国内框架属于优选,想学习国内AI框架推荐MindSpore。 优点总结:支持昇腾芯片、GPU、CPU等异构平台,在昇腾+MindSpore组合下能做到性能遥遥领先友商竞品GPU+MindSpore组合下在分布式性能跟OneFlow持平在接口方面优点类似Pytroch,易用性能有保障