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

2019机器学习框架争议:与Tensorflow竞争激烈,咄咄逼人的PyTorch胜在何处?

时间:2023-03-12 00:18:23 科技观察

大数据文摘出品:thegradient编译:张大碧如、曹培新、刘俊焕、牛万洋、Andy2019年,机器学习框架之争进入新阶段:PyTorch和TensorFlow成为最后两个选手,而PyTorch在学术界占据领先地位,TensorFlow在业界依然强大。这两个框架都在互相学习,但都不是理想的。最终谁会赢?这取决于谁能更好地回答几个关键问题。来自康奈尔大学的HoraceHe刚刚在Gradient上发表了一篇长文,讨论了2019年的两大机器学习框架之争。他讨论了PyTorch和TensorFlow的优缺点和发展趋势,但他显然更看好PyTorch。特别是它在学术领域的带动作用。巧合的是,今天也是PyTorch1.3发布的日子。最新版本增加了更多的工业能力、量化和终端支持。PyTorch官方表示,还将推出许多其他工具和库,以支持模型的可解释性,并将多模态研究投入生产。PyTorch1.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正在如火如荼地进行。但如果你浏览机器学习大师FrancoisChollet的推特,你可能会认为TensorFlow/Keras是主流框架。2019年机器学习框架之争主要是PyTorch和TensorFlow的交锋。据我分析,在学术领域,研究人员正在逐渐放弃TensorFlow,涌向PyTorch。同时,在行业中,TensorFlow是首选平台,但这可能不会持续很长时间。1.PyTorch在研究领域越来越占据主导地位首先,当然先用数据说话。下图显示了使用TensorFlow或PyTorch的顶级研究会议上接受论文的百分比。可以发现所有的虚线都是向上倾斜的,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。1.为什么研究人员喜欢PyTorch?简单的。PyTorch类似于numpy,非常Pythonic,并且很容易与Python生态系统的其余部分集成。例如,可以在PyTorch模型中的任何位置添加pdb断点。在TensorFlow中,调试模型需要一个活跃的会话,整个过程非常繁琐。蜜蜂。大多数研究人员更喜欢PyTorch的API而不是TensorFlow的。一方面是因为PyTorch设计得更好,另一方面是因为TensorFlow过于频繁地切换它的API接口(比如“layers”-“slim”-“estimators”-“tf.keras”),阻碍了它自身的发展。表现。尽管PyTorch的动态图几乎没有优化的机会,但许多轶事表明PyTorch并不比TensorFlow慢多少。目前还不清楚这是否属实,但至少,TensorFlow在这方面还没有取得决定性的优势。2、TensorFlow未来的研究方向是什么?尽管TensorFlow在功能上与PyTorch相当,但PyTorch已经覆盖了机器学习社区的大部分内容。这意味着PyTorch实现将更容易找到,作者将更有动力在PyTorch中发布代码,并且您的合作者很可能更喜欢PyTorch。因此,任何回到TensorFlow2.0的动作都可能会很慢。TensorFlow在Google/Deepmind有一批忠实用户,但不知道Google最终会不会在这一点上动摇。现在,谷歌要招募的很多研究人员都开始喜欢上PyTorch,我也听到抱怨说谷歌的很多研究人员想要使用TensorFlow以外的框架。此外,PyTorch的主导地位可能会切断谷歌研究人员与其他研究社区的联系。它们不仅难以建立在外部研究的基础上,而且外部研究人员也不太可能建立在谷歌发布的代码之上。TensorFlow2.0能否重新夺回昔日的拥趸,还有待观察。尽管eager模式很有吸引力,但KerasAPI并非如此。2.PyTorch和TensorFlowforindustry尽管PyTorch目前在研究领域占据主导地位,但稍加注意就会发现TensorFlow仍然是主导框架。比如根据2018年到2019年的数据,TensorFlow在招聘页面新增职位1541篇,而PyTorch有1437篇,TensorFlow在Medium上有3230篇新增文章,PyTorch有1200篇,TensorFlow在GitHub上有1200篇。13.7K星,而PyTorch有7.2K。那么,为什么PyTorch现在在研究人员中如此受欢迎,但在工业界却没有取得同样的成功呢?显而易见的第一个答案是使用习惯。TensorFlow比PyTorch早几年问世,工业界接受新技术的速度比研究人员慢。另一个原因是TensorFlow在工业适配方面优于PyTorch。你是什??么意思?要回答这个问题,我们需要了解研究人员和行业的需求有何不同。研究人员关心的是他们在研究中能够以多快的速度进行迭代,这通常是在相对较小的数据集(可以在单机上运行的数据集)上运行,并且在8个GPU上运行。这通常与性能无关,而与快速实施您的想法有关。另一方面,该行业将性能视为重中之重。虽然运行速度提高10%对研究人员来说意义不大,但它可以直接为公司节省数百万美元。另一个区别是部署。研究人员通常在自己的机器或专用于运行研究工作的服务器集群上进行实验。然而,在业界,部署有一系列的限制和要求。没有蟒蛇。运行Python对服务器的开销太大;移动。您不能在移动终端二进制文件中嵌入Python解释器;服务。需要包罗万象的功能:不停机更新模型、模型之间的无缝切换、预测时的批处理等。TensorFlow是专门为这些需求构建的,并为所有这些需求提供了解决方案:网络图格式和执行引擎本身不需要Python,而TensorFlowLite和TensorFlowServing可以分别处理移动端和服务器需求。从历史上看,PyTorch在满足这些需求方面做得不够,因此目前大多数公司在生产中使用TensorFlow。3、架构“收敛”2018年底,两件大事彻底改变了局面:PyTorch引入了JIT编译器和“TorchScript”,引入了基于图的特性;TensorFlow宣布他们将在2.0版本模型中默认转移到Eager。显然,这些举措旨在解决PyTorch和TensorFlow各自的弱点。那么这些功能是什么,它们可以提供什么?1.PyTorchTorchScriptPyTorchJIT是PyTorch的中间表示(IR),称为TorchScript。Torchscript是PyTorch的“图形”表示。您可以使用跟踪或脚本模式将常规PyTorch模型转换为TorchScript。Trace接受一个函数和一个输入,记录如何处理该输入,并构建IR。尽管很简单,但跟踪也有其缺点。例如,它无法捕获未执行的控制流。例如,如果它执行true块,它就无法捕获条件块的false块。脚本模式接受一个函数/类,重新解释Python代码并直接输出TorchScriptIR。这允许它支持任意代码,但它实际上需要重新解释Python。一旦PyTorch模型处于这个IR中,我们就可以获得图形模式的所有优势。我们既可以在不依赖Python的情况下在C++中部署PyTorch模型,也可以对其进行优化。2.TensorFlowEager在API层面,TensorFlowEager模式与PyTorchEager模式基本相同,最初由Chainer引入,为TensorFlow提供了PyTorchEager模式的大部分优点(易用性、可调试性等).)然而,这给TensorFlow带来了同样的劣势。TensorFlowEager模型无法导出到非Python环境,也无法优化以在移动设备上运行。这将TensorFlow置于与PyTorch相同的位置,它们的解析方式基本相同——您可以跟踪代码(tf.function)或重新解释Python代码(Autograph)。因此,TensorFlow的Eager模式并不能真正做到“两全其美”。虽然可以使用tf.function注释将eager代码转换为静态图,但这永远不会是无缝转换(PyTorch的TorchScript有类似的问题)。跟踪基本上是有限的,重新解释Python代码实际上需要重写Python编译器的大部分内容。当然,通过限制深度学习中使用的Python的子集,可以大大简化范围。当默认启用eager模式时,TensorFlow会强制用户做出选择——为了易用而需要重写部署而eagerlyexecute,或者根本不使用eagerexecution。虽然这与PyTorch的情况相同,但PyTorch的TorchScript的选择加入功能可能比TensorFlow的“默认渴望”更容易接受。4.机器学习框架现状PyTorch在研究领域处于领先地位,并试图向工业领域扩展。而TensorFlow正在尝试在不牺牲太多产业优势的情况下,更多地参与研究领域。PyTorch肯定需要很长时间才能在行业中产生有意义的影响。毕竟TensorFlow在业界的影响力已经是根深蒂固了。然而,从TensorFlow1.0到2.0的过渡为企业提供了评估PyTorch的绝佳机会。至于未来,就看谁最能解决下面的问题了。研究人员偏好对行业有多大影响?作为目前的博士队列。这种势头是否足够明显,以至于公司会选择PyTorch作为招聘条件?毕业生会基于PyTorch创业吗?TensorFlow的Eager模式能否在可用性方面赶上PyTorch?从网上的反应来看,TensorFlowEager的性能/内存问题很严重,而Autograph也有自己的问题。谷歌将花费大量的工程精力,但TensorFlow仍然背负着历史包袱。PyTorch能以多快的速度满足行业需求?PyTorch仍然有许多基本问题没有解决——没有很好的量化支持,没有对移动设备的支持等。在这些问题解决之前,PyTorch甚至不会成为许多公司的选择。PyTorch能否为企业提供足够引人入胜的故事来进行转型?注意:PyTorch已宣布支持quant和mobile。虽然两者仍处于实验阶段,但它们代表了PyTorch在这方面的重大进步。谷歌在行业中的孤立会伤害TensorFlow吗?谷歌推动TensorFlow的主要原因之一是帮助其云服务蓬勃发展。由于谷歌试图拥有整个机器学习垂直领域,这促使谷歌与之竞争的公司(例如微软、亚马逊、英伟达)只支持PyTorch。5、下一步怎么走?机器学习框架在多大程度上影响了机器学习的研究?它不仅让机器学习研究成为可能,也让研究人员更容易探索。有多少新想法因为没有简单的方法在框架中表达而被扼杀?PyTorch已经达到了本地研究的最低限度,但还有哪些值得研究的框架提供?有哪些研究机会?1.计算高阶导数的问题。PyTorch和TensorFlow的核心是自动微分框架,它可以微分一个函数。实现自动微分的方法有很多种,大多数现代机器学习框架选择的方法称为“反向模式自动微分”,也俗称“反向传播”。这种实现对于神经网络的推导非常有效。但是,在计算高阶导数(Hessian/HessianVectorProducts)时,会出现问题。高效的计算需要“前向模式自动微分”,没有它,HessianVectorProducts的计算速度会慢一个数量级。Jax由最初构建Autograd的同一个人创建,具有前向和反向模式的自动微分功能,可以比PyTorch/TensorFlow更快地计算高阶导数。而且,Jax不仅可以计算高阶导数,Jax开发人员还将Jax视为组合任意函数转换的框架,包括vmap(用于自动批处理)或pmap(用于自动并行化)。Jax最初的用户主要是大学毕业生(ICML有11篇论文使用它,尽管没有GPU支持),但我相信Jax很快就会找到一个类似的忠实粉丝社区,用它来做各种n阶导数。2.不够灵活!在运行PyTorch/TensorFlow模型时,大部分工作实际上并不是在框架本身完成的,而是由第三方内核完成的。这些内核通常由硬件供应商提供,类似于MKLDNN(用于CPU)或cuDNN(用于NvidiaGPU),并且由高级框架可以利用的运算符库组成。高层框架将计算图分解成块,然后调用计算库。这些库代表了数千小时的工作,并针对架构和应用程序进行了优化以实现最佳性能。然而,最近非标准硬件、稀疏/量化张量和新算子的流行暴露了依赖这些算子库的一个缺点:它们不够灵活!如果你想在你的研究中使用像胶囊网络这样的新操作呢?现有的解决方案并不完美。如本文所述,GPU上现有的胶囊网络实现比最佳实现慢2个数量级。每个新的硬件架构、张量类或运算符都会显着增加问题的难度。已经有很多处理工具,比如Halide、TVM、PlaidML、TensorComprehensions、XLA、Taco等,但是还没有找到正确的方法。如果不解决这个问题,我们就会冒着将机器学习研究过度拟合到工具的风险。6.机器学习框架的未来对于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【本文是TheoriginaltranslationofthecolumnorganizationBigDataDigest,WeChat公众号"BigDataDigest(id:BigDataDigest)"]点此查看该作者更多好文