如些判断最流行的框架到底是什么?(下)

自从 2012 年深度学习重新崛起以来,许多机器学习框架争相成为研究人员和行业从业者的新宠。有这么多选择,很难说出最流行的框架是什么。

作者 | 贺拉斯

翻译 | 苏本如,主编 | 刘静出品 | CSDN(ID:CSDNnews)

以下为译文:

自从 2012 年深度学习重新崛起以来,许多机器学习框架争相成为研究人员和行业从业者的新宠。从早期的学术 Caffe(卷积神经网络框架)和 Theano(基于 Python 的深度学习库),到工业界支持的大规模 PyTorch 和 TensorFlow,面对如此多的选择,很难判断最流行的是什么正是框架。如果你只浏览 Reddit 网站,你可能会认为 PyTorch 正在如火如荼。但如果你再看看 Francois Chollet(谷歌 AI 研究员,Keras 创造者)从机器语言程序员看,你可能会再次认为 TensorFlow/Keras 正在成为主流框架,而 PyTorch 的势头正在停滞。2019 年,机器学习(ML)框架大战只剩下两个主要竞争者,即 PyTorch 和 TensorFlow。我的研究表明,研究人员正在逐渐放弃 TensorFlow,而纷纷涌向 PyTorch。同时,在工业领域,TensorFlow 仍然是首选平台,但这种局面可能不会持续太久。

PyTorch 在研究领域的主导地位日益增强

先说数据。下图显示了每个顶级研究会议接受的 PyTorch 论文与 TensorFlow 和 PyTorch 论文总和的比率。所有线条都是向上倾斜的从机器语言程序员看,这意味着被接受的 PyTorch 论文的比例正在增加。2019 年主要会议上的大部分论文都使用了 PyTorch。

会议名称 说明 CVPR, ICCV, ECCV – Conference on Computer Vision NAACL, ACL, EMNL P – Conference on NLP (Natural Language Processing) ICML, ICLR, NEURIPS – Conference on General Machine Learning 图数据收集过程的详细说明 这张图是通过计算过去几年在大型机器会议上发表的每篇论文生成。一篇论文是根据它是否提到 PyTorch 或 TensorFlow 进行分类的,不包括作者与 Google 或 Facebook 相关的论文,或者同时提到 TensorFlow 和 PyTorch 的论文。更多详情,请参阅此处的附录。可以在此处找到上述这些统计信息的交互式版本。如果你认为这些数据不足以证明 PyTorch 在研究界的发展速度,

在 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?

简单:它类似于 numpy,非常 Pythonic 并且易于与 Python 生态系统的其余部分集成。例如,您可以简单地在 PyTorch 模型中的任何位置插入一个 pdb 断点,它就会起作用。在 TensorFlow 中,调试模型需要一个活动会话,整个过程很棘手。

很棒的 AP​​I:与 TensorFlow 的 API 相比,大多数研究人员更喜欢 PyTorch 的 API。这部分是因为 PyTorch 设计得更好,部分是因为 TensorFlow 通过如此频繁地切换 API(例如“layers”->“slim”->“estimators”->“tf.keras”)使得使用自己变得非常困难。

卓越的性能:虽然 PyTorch 的动态图提供的优化机会很少,但有很多传言称 PyTorch 并不比 TensorFlow 快。目前尚不清楚这是否属实,但至少,TensorFlow 在这方面并没有获得决定性的优势。

TensorFlow 在研究领域的未来是什么?

尽管 TensorFlow 在功能上与 PyTorch 相当,但 PyTorch 已经覆盖了机器学习社区的很大一部分。这意味着 PyTorch 实现将更容易找到,研究人员将更有动力在 PyTorch 中发布代码(因为人们会使用它),并且您的合作者可能更喜欢 PyTorch。因此,任何向 TensorFlow 2.0 的回迁都可能很慢,如果这种情况发生的话。TensorFlow 在谷歌/DeepMind 总会有一些不情愿的观众,但我不知道谷歌最终是否会停止坚持这一点。即使是现在,谷歌正在招聘的许多研究人员已经在不同程度上倾向于 PyTorch,而且我听到了谷歌内部研究人员的一些抱怨,他们中的许多人想要使用 TensorFlow 以外的框架。此外,PyTorch 的主导地位可能会开始切断谷歌研究人员与其他研究小组之间的联系。不仅谷歌研究人员很难在外部研究的基础上进行构建,而且外部研究人员也不太可能在谷歌发布的代码上进行构建。TensorFlow 2.0 是否会帮助 TensorFlow 在某些研究领域吸引回观众还有待观察。虽然 Eager 模式肯定很有吸引力,但对于 Keras API 来说,这种吸引力可能为零。0 将帮助 TensorFlow 在某些研究领域吸引回头客。虽然 Eager 模式肯定很有吸引力,但对于 Keras API 来说,这种吸引力可能为零。0 将帮助 TensorFlow 在某些研究领域吸引回头客。虽然 Eager 模式肯定很有吸引力,但对于 Keras API 来说,这种吸引力可能为零。

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

尽管 PyTorch 目前在研究领域占据主导地位,但在整个行业中,TensorFlow 仍然是主导框架。例如,根据 2018 年至 2019 年的数据,TensorFlow 在公开职位列表中有 1,541 个新职位空缺,而 PyTorch 有 1,437 个职位空缺。TensorFlow 在 Medium 上有 3230 篇新文章,而 PyTorch 只有 1200 篇。GitHub 上的 TensorFlow 新星数为 13.7K,而 PyTorch 只有 7.2K……..所以,如果PyTorch 在研究人员中如此受欢迎,为什么它在工业环境中没有看到同样的成功?一个明显的第一个答案是惯性。TensorFlow 比 PyTorch 早几年问世,业界采用新技术的速度总是比研究人员慢。另一个原因是 TensorFlow 在工业生产环境中的表现优于 PyTorch。但是,这是什么意思?要回答这个问题,我们需要了解研究人员和行业的需求之间的区别。研究人员关心他们在研究中迭代的速度,他们通常处理相对较小的数据集(适合单台机器运行的数据集)和运行少于 8 个 GPU 的环境。这就是为什么他们通常不会将性能作为首要考虑因素,而是将注意力集中在快速实施新想法的能力上。另一方面,在工业生产环境中,性能是最重要的。虽然运行速度提高 10% 对研究人员来说毫无意义,但它可以直接为公司节省数百万美元。另一个区别是部署。研究人员在他们自己的机器或专门用于运行研究的服务器集群上进行实验。另一方面,工业生产环境有一组限制/要求。

没有 Python:有些公司运行的服务器不支持 Python,运行额外 Python 的开销太大而无法接受;

Mobile(移动支持):您不能在移动二进制文件中嵌入 Python 解释器;

Serving:需要支持多种功能,包括但不限于:不停机更新模型、无缝切换模型、预测时间批处理作业等。

TensorFlow 是专门为这些需求而构建的,并为所有这些需求提供了解决方案:图形格式和执行引擎本身不需要 Python,而 TensorFlow Lite 和 TensorFlow Serving 分别考虑了移动和服务器端的需求。由于历史原因,PyTorch 在满足这些要求方面做得还不够,所以大多数公司仍然在工业生产环境中使用 TensorFlow。

框架“融合”

然而,接近 2018 年底的两个重大事件极大地改变了这种情况:PyTorch 引入了 JIT 编译器和“TorchScript”,它引入了基于图形的特性。TensorFlow 宣布他们在 2.0 中默认使用 Eager 模式。显然,这些举措旨在解决 PyTorch 和 TensorFlow 各自的弱点。那么这些功能究竟是什么,它们提供了什么?

PyTorch 火炬脚本

PyTorch JIT 是 PyTorch 的中间表示 (IR),称为 TorchScript。TorchScript 是 PyTorch 的“图形”表示。您可以使用跟踪或脚本模式将常规 PyTorch 模型转换为 TorchScript。Trace 接受一个函数和一个输入,记录使用该输入执行的操作,并构造一个 IR。尽管跟踪很简单,但它也有其缺点。例如,它不能捕获未执行的控制流。例如,如果它在条件块中执行 True 块,则无法捕获 False 块。脚本模式采用函数/类,重新解释 Python 代码并直接输出 TorchScript IR。这允许它支持任意代码,但实际上它需要重新解释 Python。

一旦您的 PyTorch 模型在此 IR 中,我们将获得图形模式的所有好处。我们可以在不依赖 Python 的情况下在 C++ 中部署 PyTorch 模型,或者对其进行优化。

TensorFlow 渴望

在 API 层面,TensorFlow 的 Eager 模式与 PyTorch 的 Eager 模式基本相同,PyTorch 的 Eager 模式最初是由 Chainer 推广的。这为 TensorFlow 提供了 PyTorch Eager 模式的大部分好处(易用性、可调试性等)。然而,这给 TensorFlow 带来了同样的问题。例如,TensorFlow Eager 模型无法导出到非 Python 环境,无法优化,无法在移动设备上运行等。这使 TensorFlow 与 PyTorch 处于同一位置,并且它们的解析方式基本相同:您可以跟踪代码 (tf.function) 或重新解释 Python 代码 (Autograph)。

因此,TensorFlow 的 Eager 模式并没有真正做到“两全其美”。虽然可以使用 tf.function 注解将 Eager 的代码转换为静态图,但这绝不是无缝过渡(PyTorch 的 TorchScript 也有类似的问题)。跟踪从根本上是有限的,重新解释 Python 代码本质上需要重写 Python 编译器的大部分功能。当然,通过限制在深度学习中使用的 Python 子集,可以大大简化范围。默认情况下启用 Eager 模式时,TensorFlow 会强制用户做出选择:使用 Eager Execution 以方便使用,但需要覆盖以进行部署,或者根本不使用 Eager Execution。虽然这与 PyTorch 所处的情况相同,但 PyTorch 的选择加入功能

机器学习框架的现状

通过以上分析,我们可以得出结论,机器学习框架的现状是 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 的主要原因之一是帮助其新兴的云服务。由于谷歌试图拥有整个机器学习垂直领域,这将促使与谷歌竞争的公司(例如微软、亚马逊、英伟达)选择支持唯一的替代机器学习框架:PyTorch。

下一步是什么?

机器学习框架影响机器学习研究的程度可能被低估了。它们不仅支持机器学习研究,还支持研究人员可以轻松探索的想法。有多少新生的想法仅仅因为没有一种简单的方法在框架中表达它们而被粉碎?PyTorch 可能使研究工作成为局部最低限度,但值得研究其他框架提供的内容以及它们为研究工作提供的机会。

高阶导数问题:

PyTorch 和 TensorFlow 本质上都是自动微分(automatic contrast)框架。也就是说,它们允许人们区分功能。但是,实现自动微分(推导)的方法有很多,而大多数现代机器学习框架选择的具体实现方式是“反向模式自动微分”,也就是所谓的“反向传播”算法。事实证明,这种方法对于计算神经网络的导数非常有效。但是,当计算高阶导数(Hessian/Hessian 向量积)时,情况会发生变化。有效地计算这些需要所谓的“前向模式自动微分”。如果没有这种能力,计算 Hessian 矢量积可能会慢几个数量级。让’ s 看看 Jax。Jax 由最初构建 Autograd 的同一个人构建,具有正向和反向模式的自动区分功能。这使得计算高阶导数比 PyTorch/TensorFlow 更快。而且,Jax 可以提供的不仅仅是高阶导数。Jax 开发人员将 Jax 视为编排任意函数转换的框架,包括 vmap(用于自动批处理)或 pmap(用于自动并行化)。最初的 Autograd 有其忠实的追随者(尽管没有 GPU 支持,ICML 有 11 篇论文使用它),Jax 很可能很快会找到一个类似的忠实社区并将其应用于各种 n 阶导数运算。这使得计算高阶导数比 PyTorch/TensorFlow 更快。而且,Jax 可以提供的不仅仅是高阶导数。Jax 开发人员将 Jax 视为编排任意函数转换的框架,包括 vmap(用于自动批处理)或 pmap(用于自动并行化)。最初的 Autograd 有其忠实的追随者(尽管没有 GPU 支持,ICML 有 11 篇论文使用它),Jax 很可能很快会找到一个类似的忠实社区并将其应用于各种 n 阶导数运算。这使得计算高阶导数比 PyTorch/TensorFlow 更快。而且,Jax 可以提供的不仅仅是高阶导数。Jax 开发人员将 Jax 视为编排任意函数转换的框架,包括 vmap(用于自动批处理)或 pmap(用于自动并行化)。最初的 Autograd 有其忠实的追随者(尽管没有 GPU 支持,ICML 有 11 篇论文使用它),Jax 很可能很快会找到一个类似的忠实社区并将其应用于各种 n 阶导数运算。

框架灵活性

在运行 PyTorch/TensorFlow 模型时,大部分工作实际上并不是在框架本身中完成,而是由第三方核心库完成。这些核心库通常由硬件供应商提供,例如 MKLDNN(用于 CPU)或 cuDNN(用于 Nvidia GPU),并且由高级框架可以使用的运算符库组成。高级框架将其计算图分解为块,然后调用这些计算库。这些库通常需要数千工时来计算,并且通常需要架构和应用程序优化以获得最佳性能。然而,最近对非标准硬件、稀疏/量化张量和新算子的兴趣暴露了依赖这些算子库的一个主要缺点:它们不够灵活。如果你想在你的研究中使用一个新的算子(比如 Capsule Network)怎么办?如果您想在机器框架不支持的新硬件加速器上运行模型怎么办?现有的解决方案往往达不到要求。如本文所述,GPU 上胶囊网络的现有实现比最优实现慢 2 个数量级。每一个新的硬件结构,张量或算子的类别,都大大增加了这个问题的难度。已经有很多工具可以处理不同的方面(Halide、TVM、PlaidML、Tensor Comprehensions、XLA、Taco 等),但还没有找到正确的方法。如果我们不做更多的工作来解决这个问题,我们就会冒机器学习研究和过度拟合现有工具的风险。

机器学习框架的未来

对于 TensorFlow 和 PyTorch 的未来来说,这是一个激动人心的时刻。他们的设计融合到了这样的程度,以至于任何一个框架都无法凭借其设计取胜,并且每个框架都有自己的地盘:一个拥有研究领域,另一个拥有工业生产领域。就个人而言,在 PyTorch 和 TensorFlow 之间,我会发现 PyTorch 更占优势。机器学习仍然是一个研究驱动的领域。行业不能忽视研究成果,只要 PyTorch 主导研究领域,最终企业将被迫转换。然而,快速发展的不仅仅是框架。机器学习研究本身正处于巨大的转变之中。不仅框架发生了变化,5年后使用的模型/硬件/范式可能与我们今天使用的有很大不同。如果另一个计算模型占主导地位,PyTorch 和 TensorFlow 之间的战斗在未来将是微不足道的。考虑到所有这些相互冲突的利益,以及投资于机器学习的所有资金,退后一步是件好事。我们中的大多数人开发机器学习软件不是为了钱,也不是为了协助公司的战略计划。我们进行机器学习是因为我们关心推进机器学习的研究,我们关心人工智能的民主化,或者我们只是想构建一些很酷的东西。无论您更喜欢 TensorFlow 还是 PyTorch,我们的目标是一个,让机器学习软件做到最好!关于作者:Horace He 是康奈尔大学的一名学生,研究兴趣是编译器和机器学习的交叉领域。今年夏天他在 PyTorch JIT 团队实习,但是这篇文章/数据是独立于 PyTorch 团队编写/收集的。在 Twitter 上关注他,以获取有关机器学习社区数据的未来更新。原文:本文由CSDN翻译,转载请注明出处。

【结尾】

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论