程序员控制网站速度-PyTorch成为程序员的“新宠”,TensorFlow不再风光?

出品| CSDN(ID:CSDNnews)

以下为译文:

自2012年深度学习再次崛起以来,众多机器学习框架竞相成为研究者和行业从业者的新宠。 从最初学术界的Caffe(前馈神经网络框架)和Theano(基于Python的深度学习库),到业界支持的大规模PyTorch和TensorFlow,人们在面对这么多选择。 流行的框架到底有哪些?

如果你只浏览 Reddit 网站,你可能会认为 PyTorch 正在如火如荼地进行。 而如果你浏览 Francois Chollet(微软 AI 研究员、Keras 创建者)的 Facebook,你可能会觉得 TensorFlow/Keras 正在成为主流框架,而 PyTorch 的势头却停滞不前。

到 2019 年,机器学习 (ML) 框架之战只剩下两个主要竞争者:PyTorch 和 TensorFlow。 我的研究表明,研究人员正在逐渐放弃 TensorFlow,转而涌向 PyTorch。 同时,在工业领域,TensorFlow仍然是首选平台,但这些情况可能不会持续太久。

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

让我们从数据开始。

右图显示了每个顶级研究会议接受的 PyTorch 论文占 TensorFlow 和 PyTorch 论文总和的百分比。 所有腰围都向下倾斜,这意味着接受的 PyTorch 论文比例不断增加。 2019年各大会议的论文大部分都使用了PyTorch。

会议名称说明

CVPR、ICCV、ECCV-计算机视觉会议

NAACL、ACL、EMNLP-NLP(自然语言处理)会议

ICML、ICLR、NEURIPS - 机器学习大会

图表数据收集过程的详细描述

程序员控制网站速度-PyTorch成为程序员的“新宠”,TensorFlow不再风光?

该图表是通过统计过去几年在大型机器会议上发表的每篇论文而生成的。 论文根据是否讨论 PyTorch 还是 TensorFlow 进行分组,不包括与 Microsoft 或 Twitter 相关的作者的论文,或同时提及 TensorFlow 和 PyTorch 的论文。 详情请参阅此处附表。

可以在此处找到上述统计数据的交互式版本。

如果你觉得这样的数据还不足以证明PyTorch在研究社区的发展速度,这里有一个PyTorch和TensorFlow的论文数量原始数据对比图。

2018 年,PyTorch 上的论文数量仍然是少数,而今天,它已经占据了压倒性的多数。 69% 的 CVPR 论文、超过 75% 的 NAACL 和 ACL 论文以及超过 50% 的 ICLR 和 ICML 论文都在使用 PyTorch。 PyTorch 不仅在视觉和语言会议上拥有最强优势(分别以 2:1 和 3:1 压倒 TensorFlow),而且在 ICLR、ICML 等一般机器学习会议上也比 TensorFlow 更受欢迎。

尽管有些人认为 PyTorch 仍然是一个新兴框架,并试图在 TensorFlow 主导的全球市场中分一杯羹,但数据却告诉我们事实并非如此。 除了 ICML 之外,任何其他会议的 TensorFlow 论文数量都没有出现实质性下降,或者与论文整体下降的速度保持同步。 在NAACL、ICLR、ACL会议上,TensorFlow去年的论文数量实际上比今年要少。

因此,害怕未来的不应该是PyTorch,而是TensorFlow。

为什么研究人员喜欢 PyTorch?

TensorFlow 在研究领域的前景如何?

虽然 TensorFlow 在功能上与 PyTorch 相当,但 PyTorch 已经覆盖了大部分机器学习社区。 这意味着 PyTorch 实现将更容易找到,研究人员将更有动力在 PyTorch 中发布代码(因为人们会使用它),但您的合作者可能更喜欢 PyTorch。 因此,任何回归 TensorFlow 2.0 的过程都可能会很缓慢(如果真的发生的话)。

TensorFlow 在 Microsoft/DeepMind 上总会有一些不太情愿的受众,但我不知道微软最终是否会停止坚持这一点。 虽然现在微软希望招募的很多研究人员已经在不同程度上更加倾向于PyTorch,而且我也看到了微软内部研究人员的一些抱怨,他们中很多人希望使用TensorFlow以外的框架。

据悉,PyTorch 的主导地位可能会开始切断微软研究人员与其他研究小组之间的联系。 这样一来,微软研究人员无法在外部研究的基础上进行改进,但外部研究人员也不太可能根据微软发布的代码进行改进。

程序员控制网站速度-PyTorch成为程序员的“新宠”,TensorFlow不再风光?

TensorFlow 2.0是否会帮助TensorFlow吸引受众回到某些研究领域还有待观察。 虽然 Eager 模式肯定很有吸引力,但对于 Keras API 来说,这些吸引力可能为零。

适用于工业生产环境的 PyTorch 和 TensorFlow

虽然PyTorch目前在研究领域占据主导地位,但放眼业界,TensorFlow始终是主导框架。 例如,根据2018年至2019年的数据,TensorFlow在公开就业机会列表中有1,541个新职位空缺,而PyTorch有1,437个职位空缺。 TensorFlow 在 Medium 上有 3230 篇新文章,而 PyTorch 只有 1200 篇。TensorFlow 在 GitHub 上有 13.7K 新星 (Star),而 PyTorch 只有 7.2K...

那么,如果 PyTorch 在研究人员中如此受欢迎,为什么它在工业环境中没有取得同样的成功呢? 第一个显而易见的答案是惯性。 TensorFlow 比 PyTorch 早几年问世,而业界采用新技术的速度始终慢于研究人员。 另一个激励因素是 TensorFlow 在工业生产环境中的表现优于 PyTorch。 但是,这是什么意思?

要回答这个问题,我们需要了解研究人员的需求与工业界的需求之间的差异。

研究人员关心他们的研究迭代速度,他们通常处理相对较小的数据集(适合单台机器的数据集),但运行在 8 个以上 GPU 上的环境。 这就决定了他们一般不会把性能作为主要考虑因素,而是看重自己快速实现新想法的能力。 另一方面,在工业生产环境中,性能至关重要。 即使运行速度提高 10%,对研究人员来说也毫无意义,直接为公司节省了数百万欧元。

另一个区别是部署。 研究人员在自己的机器或专用于运行研究工作的服务器集群上进行实验。 另一方面,工业生产环境有一系列约束/要求。

TensorFlow 是专门针对这一需求而创建的,但所有此类问题都有解决方案:图格式和执行引擎本身不需要 Python,而 TensorFlowLite 和 TensorFlowServing 分别考虑了联通端和服务器端的需求。

由于历史原因,PyTorch 在满足这一要求方面做得还不够,因此大多数公司在工业生产环境中仍然使用 TensorFlow。

框架“融合”

然而,2018年底发生的两件大事彻底改变了这种情况:

PyTorch 引入了 JIT 编译器和“TorchScript”,后者又引入了基于图形的功能。

程序员控制网站速度-PyTorch成为程序员的“新宠”,TensorFlow不再风光?

TensorFlow 宣布他们在 2.0 中默认使用 Eager 模式。

事实上,这种举措是为了解决PyTorch和TensorFlow各自的弱点。 那么这些功能到底是什么?它们提供了什么?

PyTorchTorchScript

PyTorchJIT 是 PyTorch 的中间表示(Intermediate Representation,IR),称为 TorchScript。 TorchScript 是 PyTorch 的“图形”表示。 您可以使用跟踪或脚本模式将常规 PyTorch 模型转换为 TorchScript。 Trace 接受一个函数和一个输入,记录如何处理该输入,并构造 IR。 虽然跟踪很简单,但它也有其缺点。 例如,它无法捕获未实现的控制流。 例如,如果它在条件块中执行 True 块,则它无法捕获 False 块。

脚本模式采用函数/类,重新解释Python代码并直接输出TorchScriptIR。 这使得它可以支持任意代码,但实际上它需要重新解释Python。

一旦你的 PyTorch 模型进入这个 IR,我们就可以得到图模式的所有用处。 我们可以在不依赖Python的情况下用C++部署PyTorch模型,或者对其进行优化。

TensorFlow 渴望

在API层面,TensorFlow的Eager模式与PyTorch的Eager模式基本相同,后者最初是由Chainer推广的。 这为 TensorFlow 提供了 PyTorchEager 模式的大部分优点(易于使用、可调试性等)。

然而,这也给 TensorFlow 带来了同样的问题。 例如,TensorFlowEager模型无法导入非Python环境、无法优化、无法在联通设备上运行等等。

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

因此,TensorFlow的Eager模式并不能真正做到“两全其美”。 虽然您可以使用 tf.function 注释将 Eager 的代码转换为静态图,但这绝不是无缝转换(PyTorch 的 TorchScript 也有类似的问题)。 跟踪从根本上来说是有限的,重新解释 Python 代码本质上需要重新绘制 Python 编译器的大部分功能。 事实上,通过限制深度学习中使用的 Python 子集可以大大简化范围。

默认启用 Eager 模式时,TensorFlow 会强制用户做出选择:为了方便而使用 EagerExecution 并需要重绘进行部署,或者根本不使用 EagerExecution。其实这和 PyTorch 的情况是一样的,只不过选择加入PyTorch 的 TorchScript 功能可能比 TensorFlow 的“默认 Eager 模式”更容易被接受

机器学习框架的现状

从前面的分析我们可以得出,当前机器学习框架的现状是:PyTorch抓住了研究领域的优势,并试图将这种成功延伸到工业生产领域。 而TensorFlow正试图在不牺牲工业生产领域太多优势的情况下挽回在研究领域的损失。 尽管 TensorFlow 在扁平化工业生产领域的地位已经根深蒂固,但 PyTorch 肯定需要很长时间才能对工业生产领域产生有意义的影响。 然而,从 TensorFlow 1.0 到 2.0 的过渡将会很困难,这为 PyTorch 提供了业界评估的绝佳机会。

谁能在未来大放异彩,取决于谁能最好地回答以下问题。

当你拿起它时会发生什么?

机器学习框架对机器学习研究的影响程度可能尚未得到充分认识。 它们不仅使机器学习研究成为可能,而且还使研究人员能够轻松探索的见解成为可能。 有多少新生的想法仅仅因为没有简单的方法在框架内表达它们而被粉碎? PyTorch 可能已经启用了研究的局部最小值,值得考虑其他框架提供的功能以及它们为研究提供的机会。

高阶行列式问题:

PyTorch 和 TensorFlow 的核心都是手动微分(手动导数)框架。 也就是说,它们允许人们对函数求导。 然而,实现手动微分(导数)的方法有很多种,大多数现代机器学习框架选择的具体实现方法是“反向模式手动微分”,俗称“反向传播”算法。 事实证明,这些方法对于神经网络中的行列式计算特别有效。

然而,在估计高阶行列式(Hessian/Hessian 向量积)时,情况会发生变化。 有效地估计这一点需要所谓的“前向模式手动微分”。 如果没有这些功能,估计 Hessian 向量积可能会慢几个数量级。

我们来看看贾克斯。 Jax 是由最初构建 Autograd 的同一个人构建的,它具有在正向和反向模式下手动微分的功能。 这使得估计高阶行列式的速度比 PyTorch/TensorFlow 更快。

但贾克斯不仅仅是高阶决定因素。 Jax 开发人员将 Jax 视为编排任意功能转换的框架,包括 vmap(用于手动批处理)或 pmap(用于手动并行化)。

最初的 Autograd 有其忠实的追随者(11 篇 ICML 论文使用了它,尽管没有 GPU 支持),Jax 可能很快就会找到一个类似的忠诚社区,并将其应用于各种 n 阶行列式运算。

框架灵活性问题

运行 PyTorch/TensorFlow 模型时,大部分工作实际上并不是在框架本身中完成,而是由第三方核心库完成。 此类核心库通常由硬件供应商提供,例如 MKLDNN(针对 CPU)或 cuDNN(针对 Nvidia GPU),并且由中级框架可以使用的算子库组成。 中间框架将其估计图分解为块,然后这些块调用这些估计库。 此类库通常需要数千个工时进行计算,并且通常需要对架构和应用程序进行优化以获得最佳性能。

然而,最近对非标准硬件、稀疏/量化张量和新运算符的兴趣暴露了依赖此类运算符库的一个主要缺点:它们不够灵活。 如果您想在研究中使用新的算子(例如 CapsuleNetwork)怎么办? 如果您想在机器框架不支持的新硬件加速器上运行模型怎么办? 现有的解决方案常常达不到要求。 正如本文所述,GPU 上现有的软膏网络实现比最佳实现慢 2 个数量级。

每一个新的硬件结构、张量或运算符的类别,都大大降低了这个问题的难度。 已经有很多工具可以处理不同的方面(Halide、TVM、PlaidML、TensorCompressives、XLA、Taco 等),但尚未找到正确的方法。

如果我们不采取更多措施来解决这个问题,我们都会面临机器学习研究和现有工具过度拟合的风险。

机器学习框架的未来

对于 TensorFlow 和 PyTorch 的未来来说,这是一个激动人心的时刻。 他们的设计已经趋同到这样的程度,两个框架都无法凭借其设计赢得最后的胜利,但各自都有自己的领地:一个有研究领域,另一个有工业生产领域。

就我个人而言,在 PyTorch 和 TensorFlow 之间,我认为 PyTorch 更占主导地位。 机器学习一直是一个研究驱动的领域。 业界不能忽视研究成果。 只要 PyTorch 在研究领域占据主导地位,企业最终就会被迫转向。

但发展迅速的不仅仅是框架。 机器学习研究本身正处于一场巨大的革命之中。 除了框架发生变化之外,五年后使用的模型/硬件/范式可能与我们今天和明天使用的非常不同。 如果未来有另一种估计模型占据主导地位程序员控制网站速度程序员控制网站速度,PyTorch 和 TensorFlow 之间的战斗将显得微不足道。

考虑到所有这些利益冲突,以及所有的资金都投入到机器学习上,退后一步是件好事。 我们大多数人构建机器学习软件并不是为了钱,也不是为了协助公司的战略计划。 我们进行机器学习是因为我们关心推进机器学习研究、使人工智能民主化,或者只是构建一些很酷的东西。 无论您喜欢 TensorFlow 还是 PyTorch,我们的目标只有一个,那就是让机器学习软件成为最好的!

作者简介:Horace 他是康奈尔学院的一名中学生,研究兴趣是编译器和机器学习的交叉领域。 明年春天,他将在 PyTorchJIT 团队实习,但本文/数据是独立于 PyTorch 团队编译/收集的。 在 Facebook 上关注他,了解机器学习社区未来数据的更新。

原来的:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 程序员控制网站速度-PyTorch成为程序员的“新宠”,TensorFlow不再风光? https://www.wkzy.net/game/155841.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务