Skip to main content

谁是深度学习框架一哥?2022年,PyTorch和TensorFlow再争霸

 


你用PyTorch还是用TensorFlow?

 

对于不同人群可能有不同的答案,科研人员可能更偏爱PyTorch,因其简单易用,能够快速验证idea来抢占先机发论文。

 

虽然TensorFlow的差评如海,甚至有用户专门注册一个GitHub账号开个issue来骂TensorFlow,但TensorFlow在工业界大哥的地位PyTorch仍然无法撼动。

 

Image

 

所以,进入2022年,你决定用PyTorch还是TensorFlow?

 

旷日持久的甜咸之争


早在2015年11月9日,TensorFlow依据阿帕奇授权协议(Apache 2.0 open source license)就开放了源代码,其前身是谷歌的神经网络算法库DistBelief。TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现。

 

到了2017年1月,由Facebook人工智能研究院(FAIR,现在是MAIR)基于Torch推出了PyTorch,主要提供两个高级功能:


  1. 具有强大的GPU加速的张量计算(如NumPy)

  2. 包含自动求导系统的深度神经网络

 

最近Reddit上关于TensorFlow和PyTorch的讨论又引起了网友的关注。

 

Image

 

题主表示,两个框架和他们对应的两种生态系统发展的都是如此迅速,每个阵营都有自己的狂热支持者,也许是时候分析一下他们到底有什么不同了。

 

目前来说,PyTorch仍然是「研究型」框架,TensorFlow仍然是「工业型」框架,他们之间的争论主要可以归结为三个因素:模型可用性、模型部署、软件生态。

 

模型可用性


随着深度学习领域的逐年扩大,模型也变得越来越大,从头开始训练sota模型的成本太高,微调已经成为新主流。所以公开的sota模型采用什么框架对于后续的社区生态来说很重要。

 

在模型可用性方面,PyTorch 和 TensorFlow 分歧很大,PyTorch 和 TensorFlow 都有自己的官方模型存储库,但从业者可能希望利用多个来源的模型。

 

目前,PyTorch明显在研究领域已经赢麻了,大部分科研人员都在用,并且大多数出版论文和开源模型都在使用 PyTorch。

 

将过去几年八种顶级研究期刊的数据汇总以后可以看到,PyTorch越来越普遍,并且在短短几年内,论文中的使用率从大约 7% 增长到近 80%。

 

Image

 

虽然2019 年发布的 TensorFlow 2 中解决了大部分TensorFlow残存的问题,但 PyTorch 的发展势头足以让它维持自己在研究领域的地位,至少从社区的角度来看是这样。

 

Image

 

在Papers with Code网站上的论文中,大部分都使用的是PyTorch框架,并且还在逐渐上升,TensorFlow的市场份额在逐年下降。在过去的三个月里,总共创建了 4,500 个存储库中,其中60%使用 PyTorch 实现,只有11%使用 TensorFlow。

 

Image

 

虽然研究主流是PyTorch,但也有例外,Google、DeepMind显然都用TensorFlow来进行研究,OpenAI的一些旧的baseline也都是TensorFlow,直到2020年才全换到PyTorch。

 

模型部署


如果不能投入生产使用,那训练性能再好的模型都毫无意义。

 

所以,如何更有效率地完成模型部署至关重要,尤其是随着微服务业务模型的日益普及,高效的部署有可能决定以AI为核心竞争力的公司的成败问题。

 

TensorFlow 自成立以来一直是面向部署的应用程序的首选框架,TensorFlow Serving和TensorFlow Lite可让用户轻松地在云、服务器、移动设备和 IoT 设备上进行部署。

 

各大公司在招聘深度学习工程师时,大部分都要求掌握TensorFlow框架。

 

Image

 

从部署的角度来看,PyTorch 过去非常乏善可陈,但近年来它也一直致力于缩小这一差距,例如接连推出的TorchServe和PyTorch Live提供了本地部署工具,但仍然只针对移动端,许多部署工具还处于起步阶段。

 

所以部署便捷性上,TensorFlow完胜。

 

生态系统


目前深度学习已不再局限于高度受控环境中的特定用例,也就是说,AI可能应用在任何环境,移动端、手机端、网页端都有可能,因此一个具有更大生态系统的框架就显得很重要,它可以促进移动、本地和服务器应用程序的开发。

 

此外,专用机器学习硬件,例如 Google 的Edge TPU的出现则意味着从业者需要使用可以与该硬件很好地集成的框架。

 

Image

 

PyTorch和TensorFlow的相关生态都做得很好。

 

PyTorch的Hub除了HuggingFace,还有官方的PyTorch Hub,包括用于音频、视觉和 NLP 的模型。它还有一些生成模型,包括用于生成名人面孔的高质量图像的GAN。

 

Image

 

SpeechBrain是 PyTorch 的官方开源语音工具包,支持 ASR、说话人识别、验证和分类等。如果您不想构建任何模型,而是想要一个具有自动章节、情感分析、实体检测等功能的即插即用工具,也是十分方便!

 

PyTorch Lightning有时被称为 PyTorch 的 Keras,可以简化 PyTorch 中模型工程和训练过程,自 2019 年首次发布以来,已经逐渐成熟。Lightning 以面向对象的方式处理建模过程,定义了一些可重用和可跨项目使用的共享组件。

 

还有分布式训练工具TorchElastic,可管理工作进程并协调重启行为,以便用户可以在计算节点集群上训练模型,这些节点可以动态变化而不会影响训练,还可防止因服务器维护事件或网络问题等问题而导致的宕机,并且不会因此丢失训练进度。

 

TorchX是一个用于快速构建和部署机器学习应用程序的 SDK。TorchX 包括 Training Session Manager API,可将分布式 PyTorch 应用程序启动到受支持的调度程序上。它负责启动分布式作业,同时原生支持由 TorchElastic本地管理的作业。

 

Image

 

在TensorFlow阵营,TensorFlow Hub是一个经过训练的机器学习模型库,可以进行微调,用户只需几行代码就可以使用像 BERT 这样的模型,Hub中包含适用于不同用例的 TensorFlow、TensorFlow Lite 和 TensorFlow.js 模型,模型可用于图像、视频、音频和文本问题。

 

Image

 

TensorFlow Extended是 TensorFlow 用于模型部署的端到端平台,用户可以加载、验证、分析和转换数据;训练和评估模型;使用 Serving 或 Lite 部署模型;然后跟踪工件及其依赖项。TFX 可以与 Jupyter 或 Colab 一起使用,并且可以使用 Apache Airflow / Beam或 Kubernetes 进行编排。TFX 与Google Cloud紧密集成,可与 Vertex AI Pipelines 一起使用。

 

MediaPipe是用于构建多模式、跨平台应用机器学习管道的框架,可用于人脸检测、多手跟踪、对象检测等。该项目是开源的,并绑定了多种语言,包括 Python、C++ 和 JavaScript。

 

Image

 

TensorFlow.js是一个用于机器学习的 JavaScript 库,允许您使用 Node.js 在浏览器和服务器端训练和部署模型。

 

TensorFlow Cloud可让用户将本地环境连接到 Google Cloud。提供的 API 能够弥补从本地机器上的模型构建和调试到 GCP 上的分布式训练和超参数调整之间的差距,而无需使用 Cloud Console。

 

Google Colab是一个基于云的笔记本环境,与 Jupyter 非常相似。将 Colab 连接到 Google Cloud 进行 GPU 或 TPU 训练很容易,并且PyTorch 也可以与 Colab 一起使用。

 

三项对此完,这两个框架可以说是神仙打架了,各有优劣。

 

但评论区也有网友表示,我一只脚踏入工业界,但另一只脚还在学术界,不过我在教课的时候还是选择PyTorch,因为TF太不可靠了,接口总是变,尤其是从TF1迁移到TF2的时候。

 

并且在公司也同样使用PyTorch,因为灵活性更重要。

 

Image

 

如果看完上面的讨论,你还不知道怎么选择适合自己的框架,那英雄联盟中的一位英雄台词或许能对这场甜咸之争带来终极答案。

 

Image

 

要问我更喜欢什么工具,未免太幼稚了,但我的锤子是我最喜欢的。


参考资料:

https://www.reddit.com/r/MachineLearning/comments/rga91a/d_are_you_using_PyTorch_or_TensorFlow_going_into/

Comments

Popular posts from this blog

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into /opt/course/1/context_default_no_kubectl.sh , but without the use of k

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checking a shared sec