对比 | TensorFlow VS PyTorch下的深度学习框架之争

深度学习框架

Author:Horace He

Revise:louwill

 

source:https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/

对于广大深度学习行业从业者而言,熟练掌握一种或多种深度学习框架,是日常炼丹的必备技能之一。深度学习框架市场经历了早期的混乱之后,逐渐形成了以 TensorFlow 和 PyTorch 两家独大的市场格局。

图1是2019年各深度学习框架的综合得分对比。可以看到,虽然过去一年之中PyTorch 发展势头迅猛,但 TensorFlow 仍然牢牢占据市场头名。随着2.0版本将 Keras 作为前端框架进行集成,TensorFlow 在未来相当长一段时间内都会作为老大哥而存在。

回顾过去两年 TensorFlow 和 PyTorch 的发展特点来看,TensorFlow 虽然由于各种原因在丢失一些市场份额,但在工业界落地中仍然是当仁不让的选择。但在学术论文和研究领域,PyTorch 却逐渐占据主导地位。

就国内而言,这两年深度学习市场的一个显著特征是,国产深度学习框架开始多了起来。百度的飞桨、旷视的天元、清华的计图以及华为的MindSpore等。在世界范围内深度学习框架竞争趋于稳定的情况下,国产框架能在这两年集中爆发,不得不说是一个令人欣慰的现象。

PyTorch在学术界占主导地位

我们通过实际数据来看一下。下图显示了在近些年的研究顶会中,仅仅使用了 PyTorch 框架进行研究的论文数和使用了 TensorFlow 或 PyTorch 的论文总数的比例。如图所示,每条曲线(代表不同的会议)都向上倾斜(意味着 PyTorch 的占比越来越高),而且在 2019 年的每个主要的会议中,大多数的论文都采用 PyTorch 实现。

  • 会议的图例

  • 数据收集过程的细节

图表来源:https://chillee.github.io/pytorch-vs-tensorflow/

如果你需要更多的证据来说明 PyTorch 在研究社区中获得关注的速度有多快,请看下面关于 PyTorch 和 TensorFlow 使用情况的原始统计图。

在 2018 年,PyTorch 在深度学习框架中的占比还很小。而现在,PyTorch 已成占据压倒性比重的多数。据统计:69% 的 CVPR 论文、75% 以上的 NAACL 和 ACL 论文,以及 50% 以上的 ICLR 和 ICML 论文都选择使用 PyTorch。PyTorch 在视觉和语言类的会议上(分别以 2:1 和 3:1 的比例超过了 TensorFlow)被使用的频繁度最为明显,而且 PyTorch 在ICLR 和ICML 等通用机器学习会议上也比 TensorFlow 更受欢迎。

虽然有些人认为 PyTorch 仍然是一个处于萌芽期的框架,试图在 TensorFlow 主导的世界中开辟出一片市场,但真实的数据却说明事实并非如此。除了在 ICML 上,其它学术会议中使用 TensorFlow 的论文的增长率甚至还赶不上整体论文数量的增长率。在 NAACL、ICLR 和 ACL 上,今年使用 TensorFlow 的论文数量实际上比去年还少。这么看来,TensorFlow 确实需要对未来发展紧张起来。

1、为什么研究人员青睐 PyTorch?

  • 简洁性。PyTorch 与 numpy 很相似,具有很强的 python 风格,并且很容易与 Python 生态系统中的其它组件实现集成。例如,你可以简单地在 PyTorch 模型中的任何地方添加「PDB」断点,然后就可以进行调试。在 TensorFlow 框架中,想要进行程序调试就需要一个运行中的会话,这使得调试难以进行。

  • 易用的应用程序接口(API)。相较于 TensorFlow 的 API,大多数研究人员更喜欢 PyTorch 提供的 API。这在一定程度上是由于 PyTorch 的设计更好,另一方面是因为 TensorFlow 需要多次切换 API(例如,「layers」->「slim」->「estimators」->「tf.keras」)从而限制了自己的易用性。

  • 卓越的性能。尽管 PyTorch 的动态图留给我们优化的机会很少,但是已经有很多有趣的报道说明 PyTorch 的运行速度和 TensorFlow 一样快(https://www.reddit.com/r/MachineLearning/comments/cvcbu6/d_why_is_pytorch_as_fast_as_and_sometimes_faster/),甚至更快(https://arxiv.org/abs/1608.07249)。目前尚不清楚这种说法是否属实,但至少,TensorFlow 在这个方面并没有获得绝对的优势。

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

即使 TensorFlow 在功能方面与 PyTorch 的水平差不多,但是 PyTorch 已经拥有了研究社区中的大多数用户。这意味着我们更容易找到 PyTorch 版本的算法实现,而作者也会更有动力发布 PyTorch版本的代码(这样人们就会使用它),而你的合作者们很可能也更喜欢 PyTorch。因此,如果将代码移植回 TensorFlow 2.0 平台,这将会是一个很漫长的过程(如果真的这么做了)。

TensorFlow 在 Google/DeepMind 内部总会有一批固定的用户,但我不知道 Google 最终是否会放开这一点。即使是现在,很多 Google 想要招募的研究人员已经在不同程度上更加青睐 PyTorch 了。我也听到了一些抱怨,很多 Google 内部的研究人员希望使用 TensorFlow 以外的框架。

此外,PyTorch 的统治地位可能会开始切断 Google 研究人员与其它研究社区之间的联系。不仅 Google的研究人员将更加难以在他人研究的基础上构建自己的工作,而且外部的研究人员也不太可能基于 Google 发布的代码开展工作。

TensorFlow 2.0 是否能够为 TensorFlow 挽回一部分研究人员用户还有待观察。尽管它的动态图模式(TensorFlow 2.0 的动态图模式)一定很吸引人,但是 Keras 的 API 就并非如此了。

TensorFlow仍然是工业落地首选

虽然 PyTorch 现在在研究领域占据主导地位,但是我们快速分析一下工业界的情况就会发现,在工业界 TensorFlow 仍然是主流的框架。例如,2018 年到 2019 年的数据显示,在公开招聘网站上,涉及 TensorFlow 的新招聘信息有 1541 个,而涉及 PyTorch 的新招聘信息则是 1437 个;知名科技媒体「Medium」上有 3230 篇关于 TensorFlow 的新文章,而关于 PyTorch 的新文章只有 1200 篇;在 GitHub 上,用 TensorFlow 编写的项目获得了 13700 颗星,而用 PyTorch 编写的项目只获得了 7200 颗星。

那么,既然 PyTorch 在研究人员中是如此受欢迎,为什么它在工业界还没有取得同样的成功呢?第一个显而易见的答案就是:惯性。TensorFlow 比 PyTorch 早诞生数年,而且工业界采用新技术的速度比研究人员要慢一些。另一个原因是:TensorFlow 比 PyTorch 更适用于生产环境。但这意味着什么呢?

要想回答这个问题,我们需要知道研究人员和工业界的需求有何不同。

研究人员关心的是他们在研究中迭代的速度有多快,这通常是在相对较小的数据集(可以在一台机器上运行的数据集)上、使用少于 8 个 GPU 进行的。最大的限制因素往往不是出于性能的考虑,而是他们快速实现新思路的能力。相反,工业界认为性能是需要最优先考虑的。虽然运行时的速度提升 10% 对于研究人员来说基本没有意义,但这可以直接为公司节约数百万美元的成本。

另一个区别是部署。研究人员将在他们自己的机器或某个专门用于运行研究工作的服务器集群上进行实验。另一方面,工业界在部署方面则有一连串的限制/要求:

  • 不能使用 Python。对于一些公司运行的服务器来说,Python 运行时的计算开销太大了。

  • 移动性。你不能在移动端的二进制文件中嵌入 Python 解释器。

  • 服务性。需要满足各种需求,例如在不停机的状态下更新模型、在模型之间无缝切换、在推理时进行批处理,等等。

TensorFlow 是专门围绕这些需求构建的,并为所有这些问题提供了解决方案:计算图的版式和执行引擎本身并不需要Python,并且通过TensorFlow Lite 和 TensorFlow Serving 分别处理移动端和服务器端的问题。

在此前,PyTorch 还不能够很好地满足上述需求,因此大多数公司目前在生产环境下都选择使用 TensorFlow。但随着 PyTorch 1.6版本的发布,对生产环境的支持也更加友好,相信 PyTorch 会逐渐在此方面缩小与 TensorFlow 的差距。

竞相涌出的国产框架

进入2020年,我们惊喜的发现,国内顶级科技公司和研究机构逐渐开始开源自己的深度学习计算框架。包括百度的PaddlePaddle、旷视的MegEngine、清华的Jittor、华为的MindSpore以及一流科技的OneFlow等。

作为国产深度学习框架的老大哥,飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体。目前,飞桨累计开发者194万,服务企业8.4万家,基于飞桨开源深度学习平台产生了23.3万个模型。飞桨助力开发者快速实现AI想法,快速上线AI业务。帮助越来越多的行业完成AI赋能,实现产业智能化升级。

对比 | TensorFlow VS PyTorch下的深度学习框架之争_第1张图片

MegEngine 是 Brain++的核心组件,是与百度PaddlePaddle一样的为开发者和研究人员提供开发的国产原创深度学习框架。而Brain++是旷视一个具备大规模算法研发能力的端到端解决方案。这该框架主要用于旷视内部进行计算机视觉领域的算法开发工作,包括大规模的图像检测、分割、识别任务等,因此在计算机视觉领域具备独特的优势。

MegEngine示例代码:

import megengine as mge
import megengine.functional as F
import megengine.module as M
import numpy as np


# 经典的基于 Module 的网络搭建接口
class LeNet(M.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = M.Conv2d(1, 6, 5)
        self.relu1 = M.ReLU()
        self.pool1 = M.MaxPool2d(2, 2)
        # 省略部分代码...
        self.classifer = M.Linear(84, 10)


    # 符合 Pythonic 风格的计算流程代码
    def forward(self, x):
        x = self.pool1(self.relu1(self.conv1(x)))
        # 省略部分代码...
        x = self.classifer(x)
        return x

对比 | TensorFlow VS PyTorch下的深度学习框架之争_第2张图片

我国人工智能产业发展迅速,急需构建自己的开源深度学习生态。清华大学计算机系胡事民教授研究团队提出了一个全新的深度学习框架——计图(Jittor)。Jittor是一个采用元算子表达神经网络计算单元、完全基于动态编译(Just-in-Time)的深度学习框架。Jittor国内首个高校研究机构开源的深度学习框架。

深度学习采用的卷积神经网络是由算子(Operator)组成的一个计算网络。由于架构设计和不断扩充等原因,当前深度学习框架有多达2000种算子,系统复杂,优化和移植困难。Jittor则将算子运算进一步分解,形成了更加底层的三类20余种元算子闭包,目前神经网络常用算子均可以使用元算子的组合进行表达。面向未来深度学习框架的发展趋势,Jittor利用元算子组合表达的优势,提出统一计算图进行优化,并从底层开始设计了一个全新的动态编译架构。该架构支持多种编译器,实现了所有代码的即时编译和动态运行,确保了实现和优化分离,大幅提升了应用开发灵活性、可拓展性和可移植性。

你可能感兴趣的:(神经网络,算法,大数据,编程语言,python)