当前位置: 首页 > 科技观察

2020深度学习框架对比速读

时间:2023-03-19 23:26:22 科技观察

众所周知,在机器学习框架领域,PyTorch和TensorFlow分别成为学术界和工业界使用最广泛的两大强者,紧随其后的是Keras、MXNet等.框架也因为自身的独特性而受到开发者的喜爱。本文主要是为一些初学者提供建议。没有“最好”或“最差”的框架。选择最终取决于您的技术背景、需求和期望。  TensorFlow:  TensorFlow,行业霸主,诞生于2015年11月,基于ApacheLicense2.0协议发布,由GoogleBrain团队开发。迄今为止,它也是github上最流行、使用最多的深度学习框架,在业界很多招聘需求中也提到了它。TensorFlow2.0版本于2019年3月推出,与1.0版本相比,整体版本发生了较大的变化。  TensorFlow能有现在的地位,主要有两个原因:一是“背靠大树乘凉”,谷歌几乎在所有应用中都使用TensorFlow来实现机器学习。得益于谷歌在深度学习领域的影响力和强大的推广能力,TensorFlow一经推出就受到了高度关注;其次,由于其宏伟的设计,它不仅可以为深度学习提供强大的支持,而且还拥有灵活的数值计算核心。它可以广泛应用于其他涉及大量数学运算的科学领域。  优势归属:  支持python、JavaScript、C++、Java、Go、C#和Julia等多种编程语言;  架构灵活,支持多GPU,分布式训练,跨平台运行能力强;  自带TensorBoard组件,可以将计算图可视化,方便用户实时监控和观察训练过程;  官方文档很详细,有很多资料可以查询;  拥有庞大的社区,这里活跃着大量的开发者。  踩坑警告:  从框架本身的语言设计来看,上手难度较大。再加上一些自创的抽象概念,提高了学习门槛;  系统设计过于复杂,总共有超过100万行代码。学习者要想了解TF的底层运行机制,无疑是漫长而艰难的;  文档和教程虽多,但缺乏整理,新旧版本分离。初学者很难找到循序渐进的入口;  接口迭代频繁,版本间的不兼容足以让人秃头。尤其是TF2发布后,很多TF1用户发现很多开源代码无法在新版本上运行;TensorFlowLite出现了问题)。  总结:TensorFlow发展到现在,有点“始于宏大,却受限于宏大”。虽然投诉多,但也说明用户多。而且,TensorFlow仍然是业界深度学习框架中无可争议的标杆。再加上谷歌的支持,投入时间学习是一个相当不错的选择。  项目地址:https://github.com/tensorflow/tensorflow  Keras:用户友好的极简爱好者  如果你已经掌握了Python,准备开始深度学习之旅,Keras可能是最容易使用的工具。严格来说,Keras与其说是一个深度学习框架,不如说是一个用Python编写的开源神经网络库,是一个建立在第三方框架上的深度学习接口,是一个高级API。Keras为支持快速实验而生。它可以基于以TensorFlow为代表的多种深度学习框架快速建模,将您的想法快速输出为实验结果。其设计充分体现了“人性化”的特点。  为了提供简洁一致的API,尽量减少用户重复造轮子的顾虑,Keras进行了层层封装。这种高度的封装一方面方便了用户学习,但另一方面也缺乏灵活性,往往导致用户获取底层数据信息过于困难,重写也很复杂现有的神经网络层。另外,由于包中隐藏了很多bug,这也使得Keras运行起来比较慢。  优势归属:  人性化,代码可读性强,语法清晰,模块化程度高,使用方便;  提供简洁的API,减少用户在通用应用中的工作量;  支持批量执行  相同的代码可以在CPU或GPU上无缝切换运行;  官方文档详细易懂,用户群体庞大。  坑坑预警:  高度集成,缺乏灵活性,深度学习时容易遇到瓶颈;  过度的包装在一定程度上增加了调试的难度;  是给DL初学者的,由于Keras的易用性,很容易忽略底层原理。  总结:在众多的深度学习框架中,Keras可以说是将“极简主义”发挥到了极致。简洁的代码、简洁的API、简洁的模型构建和导出,都让深度学习显得不那么“高不可攀”。不过对于初学者来说,Keras适不适合推荐就见仁见智了。支持者认为,Keras最大限度地减少了用户操作,并使模型非常容易理解,这绝对是新手的一个很好的敲门砖;反对者认为,用户在使用Keras时,大部分时间主要是调用接口,很难真正理解深度学习的内涵。其过度的封装很容易让新手陷入自相矛盾的境地。  官网:https://keras.io/  MXNet:一个低调的轻量级玩家  MXNet是一个轻量级的深度学习库,2016年被AWS正式选中,其云计算的官方深度学习平台。2017年1月,MXNet项目进入Apache基金会,成为Apache孵化器项目。MXNet因其超强的分布式支持、显着的内存和显存优化而备受赞誉。同样的模型,MXNet往往会占用更小的内存和显存,所以对于资源不足的朋友来说是个不错的选择。  作为一个轻量级的框架,MXNet具有非常鲜明的特点:非常丰富的语言接口,包括C++、Python、R语言、Scala、Julia、Matlab和JavaScript;支持多终端运行,可以运行在多CPU、多GPU、集群、服务器、桌面或移动设备上;允许用户混合使用符号编程和命令式编程,以最大限度地提高深度学习框架的灵活性和执行效率。  优势归属:  支持多语言界面;  同时支持保形和命令式编程,集灵活性和效率于一体;  在分布式环境下具有出色的可扩展性,可以有效扩展到多GPU和多机器;  支持AWS平台,云端部署方便。  踩坑警告:  在初期推广效果不佳,过于低调致使整体生态建设相对滞后,用户社群活跃度低;  教学文档不够系统,只有看源码才能真正理解MXNet接口的使用,学习成本高。  总结:MXNet自发布以来一直比较低调和小众。创始人李牧曾提到,在MXNet发展初期,是“弃推广保技术”。虽然表现也算可圈可点,但终究没有闪光的时刻。另外,官方文档的“粗糙”也让不少用户望而却步,尤其是对于从头开始的新手来说,上手难度更大。  官网:https://mxnet.incubator.apache.org/  PyTorch:与动态图一起崛起的学术界宠儿  PyTorch是一个开源的基于Torch的python深度学习库,大力支持通过脸书。它于2017年1月发布,是近年来最有趣的深度学习框架之一。2018年Caffe2正式并入PyTorch后,PyTorch的发展势头更加势不可挡。它因其简单易用、功能强大、能够非常快速地验证研究想法而受到研究人员的广泛青睐。  有了TensorFlow的“宏伟蓝图”在前,PyTorch迅速崛起的主要原因是:它支持动态计算图,提供了很好的灵活性;详细清晰的官方教程吸引了大批开发者和研究者,社区迅速壮大。目前很多新发表的论文都使用PyTorch作为论文实现的工具。如果你是一名科研人员,PyTorch可能是你的首选。  优势归因:  简洁。PyTorch在设计上更加直观,追求尽可能少的封装,建模过程透明,代码通俗易懂;  易于使用。应用非常灵活,界面沿用Torch,符合用户的思维,让用户尽可能实现“所想即所得”,而不必担心太多的约束框架本身;  社区。提供完备的文档和指南,用户可以通过完善的教程完成从入门到进阶,如果有疑问,还可以在社区中获得各种及时交流的机会。  步骤警告:  生产环境部署还是有大问题。PyTorch能在学术界脱颖而出,主要是因为“研究”更注重快速实施和验证自己的想法,不太关注部署问题,一般是“多快、怎么来”。但在行业中,需要快速稳定的部署。否则,实验过程中节省的时间会翻倍返还到生产上线时。  总结:PyTorch的易用性无疑是“王牌”。越来越多的人因此开始学习PyTorch,但它在业界的部署也不可避免。显然,当你充分了解了这些优缺点后,你就应该明白,这些深度学习框架都是工具,学得越多,选择就越多。  官网:https://pytorch.org/  国产深度学习框架自研之路  2020年上半年,华为Mindspore、旷视MegEngine、腾讯TNN、清华Jittor和国内其他AI框架也陆续宣布开源,讨论还在继续。近日,顶尖技术OneFlow首次引入Actor模型和SBP机制,以其独特的设计备受瞩目。很多人也开始思考:在已经有了成熟的开源深度学习框架和完整生态的情况下,中国企业和机构是否有必要另建一个框架?自研深度学习框架的创新空间有多大?  近年来,基础技术的“卡脖子”问题逐渐浮出水面。前不久美国政府出台的“芯片禁令”,让华为陷入了非常被动的境地。中国要发展新一代人工智能,未雨绸缪,通过自主研发掌握人工智能底层技术,无疑是重要举措。因此,自主研发深度学习框架是非常必要的。但是,游戏中的每个人也知道,很难超越现有的成熟框架,那么出路在哪里?  虽然很多人认为深度学习框架的融合是大势所趋,TensorFlow2.0和PyTorch确实越来越相似,但实际上深度学习框架的市场是巨大的,用户需要也是五花八门,注定不可能被某个企业或某个产品所垄断。就像TensorFlow曾经一统天下,但PyTorch诞生后迅速形成了两强对峙的局面。关键在于两者设计初衷的不同。TensorFlow面向工业,专注于推理,在部署上实现工业级稳定性;PyTorch面向学术界,专注于训练,使用起来足够简单,可以实现快速实施和验证。最终,两人都在各自领域确立了王者地位。  差异化可能是深度学习框架自研之路上的致胜关键。单纯靠模仿框架肯定是没有出路的。如何区别于现有成熟的深度学习框架,打造自己的亮点,是很多开发团队不得不考虑的问题。PaddlePaddle拥有丰富的模型库,MegEngine追求训练与推理的融合,Mindspore深耕自动并行训练能力,OneFlow专注于分布式环境下的性能提升……比起“一枝独秀”,“让百花盛开””无疑更有利于国内深度学习框架的发展。  【结论】深度学习框架作为AI的底层工具,是个人进入深度学习世界的一把钥匙。掌握了深度学习框架并不代表理解了深度学习。人工智能发展要有所作为,关键还是要真正理解框架背后的技术、实践和生态。