2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?

大数据文摘出品

来源:thegradient

编译:张大笔茹、曹培信、刘俊寰、牛婉扬、Andy

2019年,机器学习框架之争进入了新阶段:PyTorch与TensorFlow成为最后两大玩家,PyTorch占据学术界领军地位,TensorFlow在工业界力量依然强大,两个框架都在向对方借鉴,但是都不太理想。

最后谁能胜出?还得看谁更好的回答几个关键问题。

来自康奈尔大学的Horace He刚刚在Gradient发布了一篇长文探讨2019年的两大机器学习框架之争,他论述了PyTorch和TensorFlow各自的优劣和发展趋势,但是很明显更看好PyTorch,特别是其在学术领域起到的驱动作用。

刚好,今天也是PyTorch 1.3发布的日子,最新的版本增加了更多工业方面的能力,量化还有终端支持。PyTorch官方称还将启动许多其他工具和库,以支持模型的可解释性,并将多模式研究投入生产。

PyTorch 1.3发布官方链接:

https://PyTorch.org/blog/PyTorch-1-dot-3-adds-mobile-privacy-quantization-and-named-tensors/

机器学习的未来你更看好PyTorch还是TensorFlow呢?也欢迎留言告诉我们。

以下是全文:自2012年深度学习重新获得突出地位以来,许多机器学习框架也相应成为研究人员和行业从业者的新宠。从Caffe和Theano的早期学术成果,到业界支持的大规模PyTorch和TensorFlow,面对如此多的选择,人们很难知道最好的框架是什么。

如果从Reddit看,你可能会认为PyTorch风头正盛。但如果你浏览的是机器学习大咖Francois Chollet的Twitter,你可能会认为TensorFlow/Keras是主流框架。

2019年,机器学习框架之战主要是PyTorch和TensorFlow的对峙。

根据我的分析,在学术领域,研究人员正逐渐放弃TensorFlow,扎堆涌向PyTorch。与此同时,在工业领域,TensorFlow是首选平台,但这种情况可能不会持续很久。

PyTorch在研究领域日益占据主导地位

首先当然是先用数据说话。

下图显示了顶级研究会议接受论文中,使用TensorFlow或Pythorch的比率。可以发现,所有的折线都向上倾,并且在2019年,主要会议的论文中,多数使用的都是PyTorch。

如果觉得仅靠会议论文数据还不够,这里还有一张图来证明PyTorch在研究社区获得关注的速度。

下图显示了PyTorch和TensorFlow在各类会议上被提及的次数图。

2018年,PyTorch获得的关注还比较少。但现在,大多数人都在使用PyTorch:69%的CVPR、75%以上的NAACL和ACL、50%以上的ICLR和ICML使用的也是PyTorch。

PyTorch在视觉和语言会议方面的优势最为明显,分别以2:1和3:1的比例超过了TensorFlow。此外可以看到,在ICLR和ICML等通用机器学习会议上,PyTorch也比TensorFlow更受欢迎。

虽然有人认为PyTorch还是一个全新的框架,并试图在TensorFlow主导的世界中分得一杯羹,但是数据告诉我们并非如此。除了ICML,在NAACL、ICLR和ACL等会议上,TensorFlow今年的论文整体上都比去年少。

也就是说,慌的不是PyTorch,而是TensorFlow。

为什么研究人员喜欢PyTorch?

简单。PyTorch类似于numpy,非常Python化,很容易就能与Python生态系统的其余部分集成。例如,可以在PyTorch模型中任何地方添加pdb断点。而在TensorFlow中,调试模型需要一个活动会话,整个过程非常麻烦。

API。大多数研究人员更喜欢PyTorch的API而不是TensorFlow的API。部分原因是因为PyTorch的设计更好,还有部分是因为TensorFlow切换其API接口过于频繁(比如“layers”-“slim”-“estimators”-“tf.keras”),这阻碍了其自身的发展。

表现。尽管PyTorch的动态图给出的优化机会很少,但许多传闻称PyTorch的速度不比TensorFlow慢多少。目前尚不清楚这是否属实,但至少,TensorFlow在这一方面还没有获得决定性的优势。

TensorFlow 未来的研究方向是什么?

即使TensorFlow在功能上与PyTorch不相上下,但PyTorch已经覆盖了机器学习社区的大部分。这意味着PyTorch实现将更容易找到,作者将更有动力用PyTorch发布代码,而且你的合作者也很可能会更喜欢PyTorch。因此,任何向TensorFlow 2.0的回迁可能会很慢。

TensorFlow在Google/Deepmind中有一批忠实的用户,但不知道Google最终是否会在这一点上动摇。现在,很多Google想招募的研究人员已经开始喜欢上PyTorch了,我也听到抱怨说Google内部很多研究人员希望使用TensorFlow之外的框架。

此外,PyTorch的统治地位很可能会切断谷歌研究人员与其他研究社区的联系。他们不仅难以在外部研究的基础上进行构建,而且外部研究人员也不太可能在谷歌发布的代码基础上进行构建。

TensorFlow 2.0是否能重新俘获回之前的粉丝还有待观察。尽管eager模式很吸引人,但对于Keras API而言并非如此。

用于产业的PyTorch和TensorFlow

虽然PyTorch目前在研究领域占据主导地位,但稍微注意一下就会发现TensorFlow仍然是占据主导地位的框架。

例如,根据2018年到2019年的数据,TensorFlow在招聘的页面上有1541个新工作岗位,而PyTorch有1437个,TensorFlow在Medium上有3230个新文章,而PyTorch有1200篇,TensorFlow在GitHub有13.7K标星,而PyTorch有7.2K。

那为什么PyTorch现在已经如此受研究人员欢迎了,但它在工业上还没有同样的成功呢?

显而易见的第一个答案就是使用习惯。TensorFlow比PyTorch早几年问世,而产业接受新技术的速度要比研究人员慢。

另一个原因就是TensorFlow在产业适应方面优于PyTorch,什么意思呢?要回答这个问题,我们需要知道研究人员和工业界的需求有何不同。

研究人员关心的是他们在研究中迭代的速度有多快,这通常是在相对较小的数据集(可以在一台机器上运行的数据集)上,并在8个GPU上就可以运行。这通常不是出于对性能的考虑,而是更关注可以快速实现自己的想法。

而工业界则认为性能是最优先考虑的。虽然运行时速度提高10%对研究人员来意义不大,但这可以直接为公司节省数百万美元。

另一个区别是部署。研究人员一般在自己的机器上或某个专门用于运行研究工作的服务器集群上进行实验。但是在产业上,部署则有一连串的限制与要求。

  • 没有Python。运行Python对服务器的开销太大了;
  • 移动。你不能在移动终端二进制文件中嵌入Python解释器;
  • 服务。需要包罗万象的功能:不用停机更新的模型,在模型之间无缝切换,批处理在预测时间,等等。

TensorFlow就是特别针对这些需求构建的,并为所有这些问题提供了解决方案:网络图格式和执行引擎本身不需要Python,而TensorFlow Lite和TensorFlow Serving可以分别处理移动终端和服务器需求。

从历史上看,PyTorch在满足这些需求方面做得还不够,因此大多数公司目前在生产中都还是使用 TensorFlow。

架构「融合」

2018年末,两件大事彻底改变了这一局面:

PyTorch引入了JIT编译器和“TorchScript”,从而引入了基于图的特性;
TensorFlow宣布他们将在2.0版本中默认转移到Eager模式。

显然,这些举措都是为了解决PyTorch和TensorFlow各自的弱点。那么这些特性到底是什么,它们能提供什么呢?

PyTorch TorchScript

PyTorch JIT是PyTorch的一个中间表示(intermediate representation,IR) ,称为TorchScript。Torchscript是PyTorch的“图”表示。你可以通过使用跟踪或脚本模式将常规PyTorch模型转换为TorchScript。跟踪接受一个函数和一个输入,记录用该输入执行的操作,并构造IR。

虽然很简单,但是跟踪也有它的缺点。例如,它不能捕获未执行的控制流。例如,如果它执行了true块,它就不能捕获条件块的false块。

Script模式接受一个函数/类,重新解释Python代码并直接输出TorchScript IR。这允许它支持任意代码,但是它实际上需要重新解释Python。

一旦PyTorch模型进入了这个IR,我们就可以获得图模式的所有优势。我们既可以在C++中部署PyTorch模型,而不依赖Python,或者对其进行优化。

TensorFlow Eager

在API级别上,TensorFlow Eager模式基本上与PyTorch Eager模式相同,后者最初由Chainer推出,这为TensorFlow提供了PyTorchEager模式的大部分优势(易用性、可调试性等等)

然而,这也给TensorFlow带来了同样的缺点。TensorFlow Eager模型不能导出到非python环境中,也不能进行优化,不能在移动设备上运行。

这将TensorFlow置于与PyTorch相同的位置,它们的解析方式基本相同——你可以跟踪代码(tf.function)或重新解释Python代码(Autograph)。

因此,TensorFlow的Eager模式并不能真正做到“两全其美”。虽然可以使用 tf.function注释将eager code转换为静态图,但这永远不会是一个无缝转换的流程(PyTorch的TorchScript也有类似的问题)。跟踪基本上是有限的,重新解释Python代码实际上需要重写Python编译器的大部分内容。

当然,通过限制在深度学习中使用的Python子集,范围可以大大简化。

在默认启用Eager模式时,TensorFlow将强迫用户做出选择——为了便于使用而Eager执行,并且需要为部署而重写,或者根本不使用急于执行。

虽然这与PyTorch的情况相同,但PyTorch的TorchScript的可选择加入特性可能比TensorFlow的“默认Eager”更容易接受。

机器学习框架的现状

PyTorch在研究领域领先,并试图扩展到工业领域。而TensorFlow正试图在不牺牲太多产业优势的情况下,更多的参与到研究领域。

PyTorch要在行业中产生有意义的影响肯定还需要很长时间,毕竟TensorFlow在产业界的影响力已经根深蒂固。然而,从TensorFlow 1.0到2.0的转换为企业评估PyTorch提供了一个绝佳的机会。

至于未来,将取决于谁能最好地解决以下问题。

  • 研究者偏好对产业的影响有多大?随着当前一批博士研究生开始毕业,他们也许会带上用惯的PyTorch。这种势头是否足够明显,以至于公司会选择PyTorch用于招聘的条件?同时毕业生会在PyTorch的基础上创业吗?
  • TensorFlow的Eager模式在可用性上能赶上PyTorch吗?就网上的反应来看,TensorFlow Eager严重受到性能/内存方面问题的困扰,而且Autograph也有自己的问题。谷歌将花费大量的工程努力,但TensorFlow还是背负着历史包袱
  • PyTorch满足产业需求的速度有多快?PyTorch还有许多没有解决的基本问题——没有好的量化支持、不支持移动等等。在这些问题得到解决之前,PyTorch甚至不会成为许多公司的选择。PyTorch能否为企业提供一个足够吸引人的故事来进行转型?注意:PyTorch已经宣布支持量化和移动。虽然两者都还处于试验阶段,但代表了PyTorch在这方面的重大进展。
  • 谷歌在行业中的孤立会伤害TensorFlow吗?谷歌推动TensorFlow的主要原因之一是帮助其蓬勃发展的云服务。由于谷歌试图拥有整个机器学习垂直领域,这促使谷歌与之竞争的公司(如微软、亚马逊、Nvidia)支持只能支持PyTorch。

下一步怎么走?

机器学习框架在多大程度上影响了机器学习的研究呢?

它不仅使机器学习研究成为可能,更让研究人员能够更轻松地探索。有多少新的想法因为没有简单的方法在框架中表达而被扼杀?

PyTorch已经达到了研究的本地极小值,但是值得研究的其他框架提供了什么?还有什么样的研究机会?

计算高阶导数的问题

PyTorch和TensorFlow的核心是自动差异化框架,它能对某个函数求导。实现自动微分的方法有很多,大多数现代机器学习框架所选择的方法被称为“逆向模式自动微分”,也就是通常所说的“反向传播”。对神经网络的衍生而言,这种实现是非常有效的。

然而,在计算高阶导数(Hessian/Hessian Vector Products)时,就出问题了。有效地计算需要“正向模式自动微分”,如果没有这个功能,Hessian Vector Products的计算速度就会降低一个数量级。

Jax是由最初建造Autograd的同一批人创建的,它具有正向和反向模式自动分化的功能,这使得计算高阶导数的速度比PyTorch/TensorFlow的更快。

并且,Jax不仅能计算高阶导数,Jax开发人员将Jax视为组成任意函数转换的框架,包括vmap(用于自动批处理)或pmap(用于自动并行化)。

Jax最初的使用者主要是大学毕业生(尽管没有GPU支持,但ICML有11篇论文使用了它),但相信Jax很快就会找到一个类似的忠实粉丝社区,用它来做各种n阶导数。

不够灵活!

当运行PyTorch/TensorFlow模型时,大部分工作实际上并不是在框架本身中完成的,而是由第三方内核完成的。这些内核通常由硬件供应商提供,类似于MKLDNN(用于 CPU)或cuDNN(用于Nvidia GPUs),由高级框架可以利用的操作符库组成。高级框架将计算图表分解成块,然后调用计算库。这些库代表了数千小时的工作量,并针对体系结构和应用程序进行优化以获得最佳性能。

然而,最近非标准硬件、稀疏/量子化张量和新运算符的流行暴露了依赖这些运算符库的一个缺陷:它们不够灵活!如果你想在研究中使用像胶囊网络(capsule networks)这样的新操作怎么办?现有的解决方案还不够完善。正如本文所说,现有的胶囊网络在GPU上的实现比最优实现慢2个数量级。

每个新的硬件体系结构、张量或算子的类别,都大大增加了问题的难度。目前已经有许多处理工具,如Halide、TVM、PlaidML、TensorComprehensions、XLA、Taco等,但是正确的方法还没找到。

如果没有解决这个问题,我们就会面临机器学习研究与工具过度匹配的风险。

机器学习框架的未来

对于TensorFlow和PyTorch的未来,他们的设计已经趋于一致,任何一个框架都不会凭借其设计而取得最终胜利,每一方也都有自己的地盘——一方拥有研究,另一方拥有工业。

就我个人而言,在PyTorch和TensorFlow之间,我会觉得PyTorch更有胜算。因为机器学习仍然是一个研究驱动的领域,工业界不能忽视研究成果,只要PyTorch在研究领域占据主导地位,企业就只有被迫转型。

然而,跑得足够快的不仅仅是框架。机器学习研究本身也处于一个巨大的变革中。不仅框架发生了变化,5年来使用的模型、硬件、范式与我们今天使用的截然不同。未来也许PyTorch和TensorFlow之间的战争将变得无关紧要,因为另一种计算模型或将占据主导地位。

在所有这些相互冲突的利益中,机器学习投入了大量资金,退一步想想其实也不错。大多数从事机器学习软件的工作不是为了赚钱,也不是为了协助公司的战略计划,而是想要推进机器学习的研究,关心人工智能民主化,也或许他们只是想创造一些很酷的东西。

所以,不管你更喜欢TensorFlow还是PyTorch,它们的目的只有一个,就是想让机器学习做到最好。

相关报道:

https://thegradient.pub/state-of-ml-frameworks-2019-PyTorch-dominates-research-TensorFlow-dominates-industry/?nsukey=RG9rAFcvX0owsip%2BviuAbdWRIFSgV1Yvu7Oj6KhVNWWGEpmoUHaDqlPyjAOIGgCho%2B2PznlO1KQYW8u9DRdYlPaILzqUApS1GAhmL3M0gzBGeyCQhOpiftWASSZTR1xaNMzV7VwTuLvCfUyjKAw1TyuzeOQxF8yhnIiuGJcRdthH7JX%2FaOLMtMfgaiDs0TuIDe5lMlcmhRZtnAg3YP30gg%3D%3D

Image placeholder
4u4v
未设置
  74人点赞

没有讨论,发表一下自己的看法吧

推荐文章
TensorFlow与PyTorch之争,哪个框架最适合深度学习

谷歌的Tensorflow与Facebook的PyTorch一直是颇受社区欢迎的两种深度学习框架。那么究竟哪种框架最适宜自己手边的深度学习项目呢?本文作者从这两种框架各自的功能效果、优缺点以及安装、版

TensorFlow技术主管Peter Wardan:机器学习的未来是小而美

大数据文摘授权转载自OReillyAIPeteWardan任谷歌TensorFlow移动和嵌入式团队的leader,在O’ReillyAIConference2019的Keynote演讲环节,他对机器

如何使用TensorFlow机器学习对图像进行分类?

本文将介绍如何使用迁移学习使用TensorFlow机器学习平台对图像进行分类。在机器学习环境中,迁移学习是一种技术,使我们能够重用已经训练的模型并将其用于另一个任务。图像分类是将图像作为输入并为其分配

Python 教程-机器学习

Python有着海量的可用于数据分析、统计以及机器学习的库,这使得Python成为很多数据科学家所选择的语言。 下面我们列出了一些被广泛使用的机器学习及其他数据科学应用的Python包。

流畅的Python读书笔记 --- 第一章 Python数据模型

近期开始读“流畅的Python”这本书,想把自己的读书笔记分享给大家,希望能帮到也对这本书感兴趣但是没时间看的各位。(文章中大部分的话和图片摘录总结自“流畅的Python”一书,以及python官方网

甜过初恋!浙大博士用200个西瓜130页论文,教你用机器学习科学挑瓜

大数据文摘出品作者:易琬玉刚刚送走了最热七月,转眼就迎来了最热八月。2019年是人类有气象纪录以来最热的几个年份之一,虽然这个夏天还没结束,但气象学家们已经有十足把握做出这个判断。为了应付热,人们想出

嗨!你的 2019 晒好封存了吗?快来看程序老兵的 2019 吧!

时间过得真是太快快快了,2019还剩下最后几个小时了。回望即将过去的这一年,老兵哥做了不少事情,有计划内的,也有计划外的,当然还有不少事情没做。赶在最后时刻晒一晒我的2019年,希望从成绩荣誉中获得一

Cache 和 Buffer 的区别在哪里?

Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很

一文带你掌握常见的Pandas性能优化方法,让你的pandas飞起来!

微信公众号:「Python读财」如有问题或建议,请公众号留言Pandas是Python中用于数据处理与分析的屠龙刀,想必大家也都不陌生,但Pandas在使用上有一些技巧和需要注意的地方,尤其是对于较大

入门 | Tensorflow实战讲解神经网络搭建详细过程

作者| AI小昕编辑| 磐石出品| 磐创AI技术团队【磐创AI导读】:本文详细介绍了神经网络在实战过程中的构建与调节方式。之前我们讲了神经网络的起源、单层神经网络、多层神经网络的搭建过程、搭建时要注意

10分钟,用TensorFlow.js库,训练一个没有感情的“剪刀石头布”识别器

大数据文摘出品编译:Luciana、小七、宁静“剪刀石头布”是我们小时候经常玩的游戏,日常生活中做一些纠结的决策,有时候也常常使用这种规则得出最后的选择,我们人眼能很轻松地认知这些手势,“石头”呈握拳

TensorFlow 2.0 代码实战专栏开篇

作者|  AymericDamien编辑 | 奇予纪出品| 磐创AI团队原项目|  https://github.com/aymericdamien/TensorFlow-Examples/ 写在前面

谷歌云重磅推出混合云平台Anthos,兼容竞争对手云服务 | Google Cloud Next’19

大数据文摘出品作者:蒋宝尚、周素云当地时间4月9日,谷歌云年度盛会GoogleCloud Next’19在旧金山的Moscone召开。在会上,谷歌云的新任CEO,曾经的甲骨文二号人物ThomasKur

制定机器学习训练数据策略的6个技巧

人工智能(AI)和机器学习(ML)如今已经十分常见。AI指的是机器模仿人类进行认知的概念,ML是一种用于构建AI的方法。如果AI是指计算机可以根据指令执行一组任务,那么ML就是机器从数据中摄取、解析和

从关系型数据库到分布式机器学习,揭秘腾讯大数据十年发展历程

大数据技术在过去10多年中极大改变了企业对数据的存储、处理和分析方式。如今,大数据技术逐渐成熟,涵盖了计算、存储、数仓、数据集成、可视化、NOSQL、OLAP分析、机器学习等丰富领域。在未来,大数据技

做机器学习项目数据不够?这里有5个不错的解决办法

许多开展人工智能项目的公司都具有出色的业务理念,但是当企业AI团队发现自己没有足够多的数据时,就会慢慢变得十分沮丧……不过,这个问题的解决方案还是有的。本文将简要介绍其中一些经笔者实践证明确实有效的办

Adobe又逆天!不用机器学习,用13.5M软件把《长安十二时辰》变成水墨动画

大数据文摘出品作者:曹培信用过修图软件的同学们应该都知道,利用强大的GAN,已经可以实现一键转换照片风格的功能,比如将你拍的风景照转换成一副印象派的画作。现在,轻松转换视频风格的软件也诞生了!Secr

为什么IoT需要机器学习才能蓬勃发展?

人们一直在热烈讨论大数据和人工智能等技术的机遇和威胁,并对它们的未来表示担忧。与此同时,公司希望通过安装越来越多的传感器,来提高效率降低成本。然而,InData实验室的机器学习顾问表示,如果没有适当的

一份关于机器学习“模型再训练”的终极指南

机器学习模型的训练,通常是通过学习某一组输入特征与输出目标之间的映射来进行的。一般来说,对于映射的学习是通过优化某些成本函数,来使预测的误差最小化。在训练出最佳模型之后,将其正式发布上线,再根据未来生

机器学习在高德用户反馈信息处理中的实践

1.背景作为国内领先的出行大数据公司,高德地图拥有众多的用户和合作厂商,这为高德带来了海量的出行数据,同时通过各个渠道,这些用户也在主动地为我们提供大量的反馈信息,这些信息是需要我们深入挖掘并作用于产

机器学习——单变量线性回归

机器学习之单变量线性回归modelrepresentation模型表示引言 给定房屋面积和房屋价格的数据,然后以房屋面积为横坐标,房屋价格为纵坐标,绘制数据点。通过绘制曲线,获得房屋房价的模型,根据房

双11、TPC-C?OceanBase的征程在哪里?

蚂蚁金服自研的分布式关系数据库OceanBase登顶TPC-C一个月后,便迎来了2019年双11大考,团队相信“TPC-C只是双11的虚拟预演,双11才是一次真实场景的TPC-C。”OceanBase

打破传统 华为数存融合新架构狠在哪里?

数字经济已经成为继农业经济、工业经济之后一种新的经济社会发展形态,是新一轮产业革命的典型代表。全球都在不断的推动数字经济的发展,产业数字化、数字产业化正在给世界经济增长提供新动能。数据已成为当下新生产

流畅的python学习笔记-第4章

第4章文本和字节序列[toc]编码和解码markdom可以插入emoji表情包其中作为前缀,x1f54为对应表情的unicode编码🥺emoji 把码位转换成字节序列的过程是编码;把字节序列转换成码位