Pytorch OR TensorFlow

Posted 机器学习与NLP的故事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytorch OR TensorFlow相关的知识,希望对你有一定的参考价值。


近日,Facebook 在 PyTorch 开发者大会上给出一个数据:


仅在 2019 年上半年,ArXiv 论文中 PyTorch 的引用量增长了 194%;PyTorch 平台的贡献者数量比去年增长了 50% 以上,达到近 1200 人。


PyTorch 正在快速增长,尤其在学术圈中地位飙升,大有取代 “老大哥” TensorFlow,成为机器学习框架 No. 1 的势头。


不过,thegradient 利用多个数据来源,细致分析 2019 年机器学习框架现状,得出结论:PyTorch 主导了学术界,TensorFlow 主导了工业界


这一趋势也可能变化,因为就在昨天,微软、Uber 等宣布将使用 PyTorch 作为公司最重要的机器学习研究和产品工作负载的基础。



在 PyTorch 开发者大会上,Facebook 重磅发布了 PyTorch 1.3,推出一系列新特性,如支持无缝模型部署到移动设备,模型量化以在推理时获得更好的性能,以及前端改进,如命名张量 (name tensors) 等。此外,还推出了一大波工具和库,增加 Cloud TPU 和阿里云支持等。


Pytorch OR TensorFlow


接下来,我们先来看 PyTorch 1.3 的新特性和新工具,再对比 PyTorch 和 TensorFlow。





PyTorch 1.3一大波重磅升级


PyTorch 1.3 带来了一系列重要的新特性,包括对移动设备部署的实验支持、 8-bit 整数的 eager mode 量化,以及 name tensors 等。


命名张量 (Named tensors)


康奈尔大学的 Sasha Rush 认为,尽管张量在深度学习中无处不在,但是传统的张量实现存在明显的缺点,比如暴露私有维度、基于绝对位置的 broadcasting 以及在文档中保留类型信息。他提出将 named tensors 作为替代方法。


通过 named tensors,我们可以命名和访问维度:


Pytorch OR TensorFlow


命名也使代码更易于阅读和维护:


Pytorch OR TensorFlow


量化 (Quantization)


在开发 ML 应用程序时,有效地利用服务器端和设备上的计算资源非常重要。为了在服务器和边缘设备上支持更高效的部署,PyTorch 1.3 现在支持使用熟悉的 eager 模式 Python API 的 8-bit 模型量化。


量化是指用于执行精度较低的计算和存储的技术,如 8-bit 整数。当前的实验特性包括对训练后量化、动态量化和量化感知训练的支持。


要了解更多关于设计和架构的信息,请查看:  https://pytorch.org/docs/master/quantization.html


PyTorch mobile


在边缘设备上运行 ML 变得越来越重要,因为应用程序需要更低的延迟。它也是联邦学习等隐私保护技术的基础元素。为了在设备上实现更高效的 ML, PyTorch 1.3 现在支持从 Python 到在 iosandroid 上部署的端到端工作流。


了解更多:http://pytorch.org/mobile


用于模型可解释性和隐私性的新工具


Captum


随着模型变得越来越复杂,开发用于模型可解释性的新方法变得越来越重要。为了帮助解决这个需求,我们推出了 Captum,这是一个帮助 PyTorch 开发人员理解为什么他们的模型生成特定输出的工具。Captum 提供了最先进的工具来了解特定神经元和层的重要性,并影响模型的预测。Captum 的算法包括 integrated gradients,conductance, SmoothGrad 和 VarGrad,以及 DeepLift。


下面的例子展示了如何将模型可解释性算法应用到一个预训练好的 ResNet 模型上,然后将每个像素的属性叠加在图像上进行可视化。


noise_tunnel = NoiseTunnel(integrated_gradients) attributions_ig_nt, delta = noise_tunnel.attribute(input, n_samples=10, nt_type='smoothgrad_sq', target=pred_label_idx)_ = viz.visualize_image_attr_multiple(["original_image", "heat_map"], ["all", "positive"], np.transpose(attributions_ig_nt.squeeze().cpu().detach().numpy(), (1,2,0)), np.transpose(transformed_img.squeeze().cpu().detach().numpy(), (1,2,0)), cmap=default_cmap,  show_colorbar=True)


Pytorch OR TensorFlow

在该图中,使用 integrated gradients 计算特征属性,并显示在右侧的图像中。(图片由 Pixabay 提供。)


了解更多:https://www.captum.ai/


CrypTen


ML 通过基于云或机器学习即服务 (MLaaS) 平台的实际应用对安全性和隐私提出了一系列挑战。为了应对这些挑战,ML 社区正在探索各种技术方法,包括同态加密、安全多方计算、可信执行环境、设备上的计算和差异隐私。


为了更好地理解如何应用这些技术,我们发布了 CrypTen,这是一个新的基于社区的研究平台,用于推进隐私保护 ML 领域的发展。


了解更多:https://facebookresearch.github.io/CrypTen/


用于多模态 AI 系统的工具


数字内容通常由几种形式组成,如文本、图像、音频和视频。PyTorch 丰富的工具和库提供了强大的方法来解决构建多模式 ML 系统的挑战。以下是最新推出的库:


Detectron2


这是一个在 PyTorch 中实现的对象检测库。Detectron2 提供对最新模型和任务的支持,增强的灵活性以帮助进行计算机视觉研究,并改善了可维护性和可扩展性以支持生产用例。


fairseq 的语音扩展


语言翻译和音频处理是搜索、翻译、语音和助手等系统和应用程序中的关键组件。近年来,随着 transformers 等新架构的发展,以及大规模的预训练方法,这些领域取得了巨大的进步。我们扩展了 fairseq,这是一个用于序列到序列应用 (如语言翻译) 的框架,包括对语音和音频识别任务的端到端学习的支持。


云和硬件生态系统支持


AWS、Microsoft Azure 和谷歌云等云提供商为任何希望在 PyTorch 上开发 ML 并将其部署到生产环境中的人提供了广泛的支持。


现在,PyTorch 已经广泛支持谷歌云 TPU,并与阿里云进行了新的整合。




2019年机器学习框架之战,PyTorch还是TensorFlow?

自2012年深度学习重新获得重视以来,许多机器学习框架便争相成为研究人员和行业从业人员的新宠。从早期的学术成果Caffe和Theano到庞大的产业支持的PyTorch和TensorFlow,在这么多选择中,到底最流行的是哪一个?


如果你只浏览Reddit,则可能会假设每个人都在用PyTorch。若从Francois Chollet的Twitter来判断,TensorFlow或Keras可能是主流,而PyTorch却停滞不前。


在2019年,机器学习框架之战还有两个主要竞争者:PyTorch和TensorFlow。分析表明,研究人员正在放弃TensorFlow并大量涌向PyTorch。同时,在行业中,Tensorflow当前是首选平台,但从长远来看可能并非如此。
Pytorch OR TensorFlow

PyTorch在研究领域的主导地位不断提升


先来看看数据。 下图显示了从2017~2019年,在主要机器学习顶会上,仅提及PyTorch的论文和使用TensorFlow或PyTorch的论文之间的比例。 可以看出,所有的线条都在向上倾斜,并且在2019年的每个主要会议上,大多数论文都在PyTorch中实现。


Pytorch OR TensorFlow
详见:https://chillee.github.io/pytorch-vs-tensorflow/


如果你需要更多证据证明PyTorch在学术界的发展有多快,下面是PyTorch与TensorFlow被提及数量的对比图。


Pytorch OR TensorFlow
PyTorch和TensorFlow被单独提及的数量
Pytorch OR TensorFlow


在2018年,PyTorch还是少数。现在,PyTorch已是主流,CVPR使用PyTorch的占 69%,NAACL和ACL中占75%以上,而ICLR和ICML中占50%以上。虽然PyTorch在视觉和语言会议上的统治地位最强(PyTorch与TensorFlow相比是2:1和3:1),但在ICLR和ICML等常规机器学习会议上,PyTorch也比TensorFlow受欢迎。


虽然有人认为PyTorch仍然是一个新兴的框架,试图在TensorFlow主导的世界中开拓一席之地,但数据显示并非如此。除了ICML之外,在任何一次会议上,TensorFlow的增长都与论文的总体增长保持一致。在NAACL、ICLR和ACL,Tensorflow今年的论文数量实际上比去年少。


PyTorch不用担心自己的未来,需要担心的是TensorFlow。


为什么研究人员喜欢PyTorch?


  • 简单。它类似于numpy,非常具有python风格,并且可以轻松地与Python生态系统的其余部分集成。例如,只需在PyTorch模型中的任何地方插入一个pdb断点,它就可以工作了。在TensorFlow中,调试模型需要一个活动会话 (active session),并且最终变得更加棘手。
  • 很棒的API。与TensorFlow的API相比,大多数研究人员更喜欢PyTorch的API。一个原因是PyTo rch的设计更好,另一个原因是TensorFlow通过多次切换API(例如‘layers’ -> ‘slim’ -> ‘estimators’ -> ‘tf.keras’)把自己搞残 了。
  • 性能。尽管事实上PyTorch的动态图提供的优化机会很少,但是有许多传闻称PyTorch的速度和TensorFlow一样快,甚至比TensorFlow还快。目前尚不清楚这是否真的成立,但至少,TensorFlow在这一领域还没有获得决定性的优势。


TensorFlow的研究前景如何?


即使TensorFlow在功能方面与PyTorch不相上下,但PyTorch已经覆盖了社区的大部分。这意味着PyTorch将更容易找到,作者将更有动力在PyTorch中发布代码(以便人们使用它),并且你的合作者很可能会更喜欢PyTorch。因此,如果真的发生的话,任何回到Tensorflow 2.0的迁移都可能很慢。


TensorFlow在Google / DeepMind中将始终拥有一定的受众群体,但不知道Google是否最终会放弃。即使是现在,Google想要招募的许多研究人员已经在不同层次上偏爱PyTorch,而且还听到有人抱怨说Google内部的许多研究人员都希望使用TensorFlow以外的框架。


此外,PyTorch的统治地位可能会开始将Google研究人员与其他研究群体隔离开来。他们不仅很难在外部研究的基础上进行构建,而且外部研究人员也不太可能在Google发布的代码基础上进行构建。


PyTorch和TensorFlow用于生产


尽管PyTorch现在在研究领域占据主导地位,但纵观业界,TensorFlow仍然是主导框架。例如,根据2018年至2019年的招聘网站数据,TensorFlow有1541个新职位,PyTorch有1437个新职位。TensorFlow的Medium文章有3230篇,PyTorch则有1200篇;TensorFlow有13700颗GitHub新星,PyTorch有7200颗,等等。


因此,如果PyTorch在学界中如此流行,为什么它没有在业界获得同样的成功呢?一个显而易见的第一个答案就是懒(inertia)。Tensorflow比PyTorch早几年问世,业界采用新技术的速度比研究人员慢。另一个原因是TensorFlow在生产方面比PyTorch更好。但是,这是什么意思?


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


研究人员在意他们能够以多快的速度进行研究,该研究通常是在相对较小的数据集(可以放在一台机器上的数据集)上运行的,并且运行在<8个GPU上。通常,研究人员考虑的是速度而非性能,即哪个能让他们快速实践新想法。相反,业界认为性能是重中之重。尽管将运行速度提高10%对研究人员来说毫无意义,但这可以直接为公司节省数百万美元的费用。


另一个区别是部署。研究人员将在自己的计算机或专用于运行研究工作的服务器群集上进行实验。相反,业界有很多限制/要求:


  • 无Python。一些公司会运行服务器,而高昂的Python运行开销无法承受。
  • 移动。无法在mobile binary中嵌入Python interpreter。
  • 服务。一个全面的功能,如不停机更新模型,无缝切换模型,在预测时间批处理,等等。


TensorFlow是专门针对这些需求而构建的,并为所有这些问题提供了解决方案:图形格式和执行引擎本来就不需要Python,TensorFlow Lite和TensorFlow Serving服务分别考虑了移动和服务。


从历史上看,PyTorch未能满足这些考虑,因此大多数公司目前在生产中使用TensorFlow。
Tensorflow Eager
在 API 级别,TensorFlow eager 模式与 PyTorch 的 eager 模式本质上是相同的。 eager 模式为 TensorFlow 提供了 PyTorch 的大部分优势  (易用性、可调试性等)。


然而,这也给了 TensorFlow 带来了同样的缺点。TensorFlow eager 模型不能导出到非 python 环境,不能进行优化,不能在移动设备上运行,等等。


这将 TensorFlow 置于与 PyTorch 相同的位置,它们以本质上相同的方式进行解析 —— 你可以跟踪代码 (tf.function) 或重新解释 Python 代码 (Autograph)。



因此,TensorFlow 的 eager 模式并不能真正做到 “两全其美”。尽管可以使用 tf 将代码转换为静态图,但这不是一个无缝的过程。跟踪代码会受到限制,重新解释 Python 代码本质上需要重写大部分 Python 编译器。当然,通过将范围限制为用于深度学习的 Python 子集,可以大大简化范围。


PyTorch占领研究界,TensorFlow统治工业界


至此,我们得出了机器学习框架当前的现状:


  • 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 来说已经取得了重大进展。


  • 谷歌在行业上的孤立会伤害它吗?


谷歌推动 TensorFlow 的主要原因之一是帮助其迅速发展的云服务。由于谷歌试图拥有整个 ML 垂直市场,这可能激励竞争的公司 (微软、亚马逊、英伟达等) 支持唯一的替代机器学习框架,即 PyTorch。


读者朋友,你正在用的是 PyTorch 还是 TensorFlow?欢迎来AI朋友圈参与投票,选出你最看好的机器学习框架~



参考链接:
https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/
https://ai.facebook.com/blog/pytorch-13-adds-mobile-privacy-quantization-and-named-tensors/


以上是关于Pytorch OR TensorFlow的主要内容,如果未能解决你的问题,请参考以下文章

一行代码切换TensorFlow与PyTorch,模型训练也能用俩框架

剑指TensorFlow,PyTorch Hub官方模型库一行代码复现主流模型

一个很赞NLP入门代码练习库(含Pytorch和Tensorflow版本)

Pytorch

图像艺术化-基于TensorFlow和PyTorch

编程55--代码share&debug14Tensorflow,Pytorch 出现 ‘Tensor‘ object is not callable解决办法