来源 | The Gradient
译者 | 夕颜
出品 | AI科技大本营(ID:rgznai100)
自 2012 自从深度学习再次受到重视以来,许多机器学习框架一直在努力成为研究人员和行业从业人员的新宠。从早期学术成果出发 Caffe 和 Theano ,背靠巨大的工业支持,背靠巨大的工业支持 PyTorch 和 TensorFlow,很多选择让我们很难跟踪哪个是最流行的框架。
假如你平时只看 Reddit,可能会认为每个人都在切换 PyTorch。如果根据 Francois Chollet 判断Twitter,TensorFlow / Keras 它可能是最受欢迎的,而且 PyTorch 但发展势头停滞不前。
在 2019 年,机器学习框架之战仍由两个主要竞争对手主导:PyTorch 和 TensorFlow。我的分析表明,研究人员正在放弃 TensorFlow 并大量涌向 PyTorch。同时,在行业中,Tensorflow 目前是首选平台,但从长远来看可能不是这样。
首先,让我们简单比较一下这两者的特点和一点:
TF是目前深度学习的主流框架,Tensorflow的主要特点:
-
Tensorflow支持python、JavaScript、C 、Java和Go,C#各种编程语言,如Julia。
-
TF不仅拥有强大的计算集群,还可以在iOS、Android等移动平台上运行模型。
-
很难开始TF编程。初学者需要仔细考虑神经网络的结构,正确评估输入和输出数据的维度和数量。
-
TF使用静态计算图操作 。 也就是说,我们需要先定义图形,然后操作计算。如果我们需要改变架构,我们将重新训练模型。 选择这种方法是为了提高效率,但许多现代神经网络工具可以在不显著降低学习速度的情况下考虑学习过程中的改进。 在这方面,Tensorflow的主要竞争对手是Pytorch 。
TensorFlow优点:
-
它非常适合创建和测试深度学习架构,便于数据集成,如输入图形、SQL表和图像。
-
它得到了谷歌的支持,这表明该模型在短期内不会被抛弃,因此值得投入时间学习。
Pytorch的基本特点:
-
与Tensorflow不同,Pytorch库使用动态更新图形进行操作 。 这意味着它可以在过程中改变系统结构。
-
在Pytorch中,您可以使用标准调试器 ,例如pdb或Pycharm。
PyTorch优点:
-
训练神经网络的过程简单明了。 同时,Pytorch支持数据并行和分布式学习模型,还包括许多预训练模型。
-
Pytorch更适合小项目和原型设计。
再来看看 PyTorch 如何逐渐缩小和 TensorFlow 之间的差距。
PyTorch在研究领域的主导地位不断提高
让我们看数据说话。下图显示了每个顶级研究会议上,使用 PyTorch 论文及使用 Tensorflow 或 PyTorch 论文的比例。2019年,所有直线都向上倾斜 年的每一个主要部分会议的论文都用 PyTorch 实现。
会议说明:
CVPR, ICCV, ECCV – 计算机视觉会议
NAACL, ACL, EMNLP – NLP会议
ICML, ICLR, NeurIPS – 综合 ML 会议
关于数据收集过程的详细信息
这张图是基于过去几年大规模的 ML 生成会议上发表的所有论文。是否根据论文提及 PyTorch 或者Tensorflow 分类,但不包括和 Google 或 Facebook 同时提到相关作者和作者 Tensorflow PyTorch 的论文。附录中可以找到这些去处因素 https://thegradient.pub/p/cef6dd26-f952-4265-a2bc-f8bfb9eb1efb/
图片交互式版本:https://chillee.github.io/pytorch-vs-tensorflow/
假如你需要更多的证据证明 PyTorch 研究界的发展速度,下面是 PyTorch 与 TensorFlow 原统计表。
2018 年,PyTorch 是少数派。2018 年,PyTorch 是少数派。现在,它已经占据了绝对的优势,使用它 PyTorch 的 CVPR 占 比 69%,NAACL 和 ACL 的占比在 75% 以上,而 ICLR 和 ICML 的占比在 50% 以上。PyTorch 不仅 视觉和语言
会议
统治地位最强(分别是 TensorFlow 的 2 倍和 3 倍),在诸如 ICLR 和 ICML 综合机器学习等
会议
上也比 TensorFlow 受欢迎。尽管有人认为 PyTorch 它仍然是一个新的贵族框架,试图在那里 TensorFlow 在主导世界中开拓一席之地,但数据揭示了另一个真相。除了 ICML 之外,TensorFlow 甚至不能与论文的增长率保持同步。在 NAACL、ICLR 和 ACL 上,今年 TensorFlow 实际实现的论文实际上比去年少。
不是 PyTorch 需要担心它的未来,而是 TensorFlow。
- 研究人员为什么喜欢? PyTorch?
-
简单。它与 numpy 类似,很有 python 风格可以很容易地与其他风格相匹配 Python 集成生态系统。例如,你可以在那里 PyTorch 简单地插入模型中的任何地方 pdb 可以使用断点。Tensorflow 调试模型需要有效的时间,而且要复杂得多。
-
很棒的 API。与 TensorFlow 的 API 大多数研究人员更喜欢它,而不是 PyTorch 的 API。一方面是因为 PyTorch 另一方面,设计更好, TensorFlow 多次切换 API(例如“图层”->“超薄”->“估算器”->“ 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 统治地位可能会开始切断 Google 研究人员与其他研究社区的联系。他们不仅很难在外部研究的基础上建立,而且外部研究人员也不太可能在外部研究的基础上建立 Google 在发布代码的基础上构建。
TensorFlow 2.0 是否会得到新的 TensorFlow 用户还有待观察。尽管 eager 模式肯定会很吸引人,但是对于 Keras API 不一定。
生产Pytorch和Tensorflow
尽管 PyTorch 现在在研究领域处于主导地位,但是如果你快速通过行业,你会发现,TensorFlow 仍然是主导框架。例如,基于 2018 年至 2019年 在公共招聘平台上,TensorFlow 招聘职位有 1541个,而 PyTorch 为 1437 个,Medium 文章中 TensorFlow 相关文章有 3230篇,PyTorch 为 1200 篇,GitHub 上 TensorFlow 和 PyTorch 的 Star 数分别为 1.37 万个和 7.2k。因此,如果 PyTorch 研究人员变得如此受欢迎,为什么它在工业上没有取得同样的成功?
因此,如果 PyTorch 研究人员变得如此受欢迎,为什么它在工业上没有取得同样的成功?显然,第一个答案是
惯性
。TensorFlow 早于 PyTorch 而且行业采用新技术的速度比研究人员慢。另一个原因是
TensorFlow 比较生产方面 PyTorch 更好
。但这是什么意思呢?
- 要回答这个问题,我们需要知道研究人员和行业的需求有什么不同。
-
研究人员关心他们能以多快的速度进行研究。这些研究通常运行在相对较小的数据集(可容纳在计算机上的数据集)上,并运行在计算机上 <8 个 GPU 上。通常,主要的决定因素不在于性能,而在于快速实现新想法的能力。另一方面,业界认为性能是重中之重。尽管增加了运行时间 10% 对研究人员来说毫无意义,但它可以直接为公司节省数百万美元。另一个区别是部署。研究人员将在自己的计算机或专门用于运行研究的服务器集群上进行实验。另一方面,行业有很多限制/要求。
-
没有 Python。一些公司使用服务器 运行 Python 开销太大。
-
移动。您不能在移动二进制文件中嵌入 Python 解释器。
服务
。综合功能,如无停机更新模型、模型间无缝切换、预测时批处理等。
TensorFlow 它是专门为这些要求而建立的,并为所有这些问题提供了解决方案:图形格式和执行引擎不需要 Python,TensorFlow Lite 和 TensorFlow Serving 分别解决了移动和服务的顾虑。
从历史上看,PyTorch 这些考虑没有得到满足,所以大多数公司目前在生产中使用 TensorFlow。
-
框架“融合”
2018 年底,两件重大事件使事情变得棘手:
PyTorch 引入了 JIT 编译器和“ TorchScript从而引入了基于图形的功能。
TensorFlow 在宣布默认情况下,它们将被转化为 eager 模式。
显然,这些都是试图解决自己弱点的行为。那么这些功能到底是什么呢?他们提供了什么?
PyTorch Torch脚本
PyTorch JIT 是 PyTorch 的中间表示(IR),称为 TorchScript。TorchScript 是 PyTorch “图形”表示。您可以使用跟踪或脚本模式 PyTorch 模型转换为 TorchScript。跟踪使用一个函数和一个输入,记录使用该输入执行的操作,并构造 IR。跟踪虽然简单明了,但也有其缺点。例如,它无法捕获未执行的控制流。再如,如果执行条件块,则无法捕获条件块的错误块。
脚本模式采用一个函数/类,重新解 释Python 代码并直接输出 TorchScript IR。这允许它支持任意代码,但是实际上它需要重新解释 Python。
一旦你的 PyTorch 模型进入此 IR,我们将获得图形模式的所有好处。我们可以在不依赖 Python的情况下以 C ++ 部署 PyTorch 模型,或对其进行优化。
Tensorflow Eager
在 API 层面,TensorFlow Eager 模式与 PyTorch 的Eager 模式基本相同,该模式最初因为 Chainer 流行起来。这为 TensorFlow 提供了 PyTorch Eager 模式的大多数优势(易于使用,可调试性等)。
但是,这也给 TensorFlow 带来了同样的缺点。TensorFlow Eager 模式无法导出到非 Python 环境,无法优化,无法在移动设备上运行等。
这使 TensorFlow 与 PyTorch 都面临着各自的问题,并且它们以基本相同的方式来解决——你可以跟踪代码(tf.function)或重新解释 Python 代码(Autograph)。
(图12-4 TensorFlow 如何使用 autograph 和跟踪生成图像)
因此,TensorFlow 的 Eager 模式并不能真正为你提供“两全其美”的体验。虽然确实可以使用tf.function 批注将 eager 代码转换成静态图形,但这绝不是一个无缝的过程(PyTorch 的TorchScript 也存在类似的问题)。跟踪从根本上受到限制,并且重新解释 Python 代码本质上需要重写许多 Python 编译器。当然,通过限制深度学习中使用的 Python 子集,可以
大大
缩小范围。
默认情况下,在启用 Eager 模式时,TensorFlow 会强制用户进行选择——使用 eager execution 以简化使用并需要重写以进行部署,或者完全不使用 eager execution。这一点TensorFlow 与 PyTorch 相同,但 PyTorch 的 TorchScript 可供选择,这可能比 TensorFlow 的“默认 eager”更让人愉快。
机器学习框架现状
- 因此,我们得出了 ML 框架的当前状态。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 在这方面的重大进展。
Google 在产业界的孤立会伤害到它吗?
Google 推动 TensorFlow 的主要原因之一是帮助其迅速发展的云服务。由于 Google 试图占整个 ML 框架垂直市场,这激励了 Google 的竞争对手(微软、亚马逊、英伟达)支持这个唯一可与之抗衡的机器学习框架。
下一步是什么?
机器学习框架对机器学习研究的影响也许被低估了。它们不仅支持机器学习研究,它们还促进或限制了研究人员轻松探索的想法。单是因为没有简单的方法可以在框架中表达,多少新生的想法被扼杀在摇篮之中?PyTorch 可能已经达到了本地研究的最低要求,但是继续挖掘其他框架能够提供的能力,以及它们可能带来的研究机会也是值得探索的。
高阶微分:
PyTorch 和 Tensorflow 的核心是自动分化框架。
也就是说,它们允许人们采用某些函数的导数。但是,有许多方法可以实现自动分化,而大多数现代 ML 框架选择的特定实现为“反向模式自动分化”,通常称为“反向传播”。事实证明,此实现对于采用神经网络极为有效。
但是,计算高阶导数(Hessian / Hessian 矢量乘积)时情况发生了改变。有效地计算这些值需要所谓的“前向模式自动分化”。如果没有此功能,则计算 Hessian Vector Products 的速度可能会慢几个数量级。
输入 Jax。Jax 和 Autograd 的发明者是同一拨人,并具有正向和反向模式自动分化功能。这使得高阶导数的计算速度比 PyTorch / TensorFlow 快。
但是,Jax 不仅提供高阶导数。Jax 开发人员将 Jax 视为组成任意功能转换的框架,包括vmap(用于自动批处理)或 pmap(用于自动并行化)。
最初的 autograd 拥有忠实的粉丝(尽管没有 GPU 支持,ICML 上仍 有 11 篇论文使用了它),而且 Jax 可能很快就会形成一个忠实社区,将其用于各种 n 阶导数。
代码生成当你运行 PyTorch / TensorFlow 模型时,大多数工作实际上不是在框架本身中完成的,而是由第三方内核完成的。这些内核通常由硬件供应商提供,并且由高级框架可以利用的 operator libraries 组成。这些就是 MKLDNN(用于CPU)或 cuDNN(用于Nvidia GPU)之类的东西。更高级别的框架将其计算图分成多个块,然后可以调用这些计算库。这些库代表数千个小时的人工,并且经常针对体系结构和应用程序进行优化,以产生最佳性能。
但是,最近对非标准硬件、稀疏/量化张量和新 operators 的兴趣暴露了依赖这些 operators libraries 的主要缺陷:它们不灵活。如果你想在研究中使用像胶囊网络这样的新operator 怎么办?如果要在 ML 框架没有很好支持的新硬件加速器上运行模型怎么办?现有的解决方案经常达不到要求,比如在 GPU 上实现胶囊网络比最佳实现要慢 2 个数量级。
每个新的硬件体系结构、张量类别或运算符,都会
大大
增加此问题的难度。有许多工具可以解决不同方面的问题(Halide、TVM、PlaidML、Tensor Comprehensions、XLA、Taco等),但是扔不清楚正确的方法到底是什么。
如果没有更多的工作来解决这个问题,我们就有将 ML 研究过度适合于我们拥有的工具的风险。
ML框架的未来
TensorFlow 和 PyTorch 的设计已经趋于一致,以至于任何一个框架都不会凭借其设计获得决定性的胜利。双方各占一方领土——一个拥有研究界,另一方拥有产业界。在我个人看来,在 PyTorch 和 TensorFlow 之间,我认为 PyTorch 更有优势。机器学习仍然是研究驱动的领域。产业界不能忽视研究成果,只要 PyTorch 主导研究,这将迫使公司做出选择。但是,正在快速发展的不仅是框架。机器学习研究本身也处于不断变化的状态。框架不仅会发生变化,而且 5 年内使用的模型/硬件/范例可能与我们今天使用的模型/外观大不相同。随着另一种计算模型的普及,也许 PyTorch 和 TensorFlow 之间的斗争将变得无关紧要。
在所有这些利益冲突以及机器学习带来的利益中,退一步海阔天空。我们大多数人都不是为了赚钱或为了协助公司的战略计划而开发机器学习软件。我们从事机器学习的原因是,我们关心、
关注
推进机器学习研究,使 AI 民主化,或者只是
关注
创造有趣的东西。无论你是喜欢 TensorFlow还是 PyTorch,我们都只是为了机器学习软件达到最佳状态。
最后补充一下,在机器学习框架之争中,除了 TensorFlow 和 PyTorch 之外,还有其他一些用户也很广泛的框架,比如 DeepMind 用于创建具有复杂架构的神经网络,建立在 TensorFlow 基础之上的 Sonnet,适合初学者快速入门机器学习的 Keras,高度可扩展的深度学习工具 MXNet,可以用来创建复杂的模型的 Gluon,通过直接与通用编程语言集成,可以表达更强大的算法的 Swift for TensorFlow,动态计算图或网络神经网络框架的“大前辈”Chainer,Java 深度学习框架 DL4J,集成各种深度学习框架优点的 ONNX 等,都是具有各自特点的机器学习框架,虽然不如 TensorFlow 和 PyTorch 的受众广,但是用于不同类型的任务还是显示出各自的优势。原文链接:https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/(*本文为AI科技大本营翻译文章,转载
请微
信联系 1092722531
)11.11惠不可挡!BDTC 2019双十一豪礼大放送,凡
11.11当天购买大会“单人票”,即可额外获得价值298元CSDN VIP年卡!(VIP年卡特权:全站免广告+600个资源免积分下载+学院千门课程免费看+购课9折)~
免责声明: 文章源于会员发布,不作为任何投资建议
如有侵权请联系我们删除,本文链接:https://www.sws100.com/baike/375733.html