你用的是PyTorch还是TensorFlow?不同的人群可能会有不同的答案,研究人员可能更喜欢PyTorch,因为它简单易用,可以快速验证想法从而抓住发表论文的机会。虽然TensorFlow差评如潮,甚至有用户注册了GitHub账号开issue骂TensorFlow,但TensorFlow在业界老大的地位依然是PyTorch无法撼动的。那么,进入2022年,你决定使用PyTorch还是TensorFlow?旷日持久的酸甜苦辣之争早在2015年11月9日,TensorFlow就在Apache2.0开源许可下开放了源代码。它的前身是谷歌的神经网络算法库DistBelief。TensorFlow是一个基于数据流编程的符号数学系统,被广泛应用于各种机器学习算法的编程中。2017年1月,Facebook人工智能研究院(FAIR,现为MAIR)基于Torch推出PyTorch,主要提供两个高级特性:具有强大GPU加速能力的Tensor计算(如NumPy)包含自动推导系统最近关于TensorFlow的讨论而Reddit上的PyTorch也引起了网友们的关注。题主表示,这两个框架及其对应的生态系统发展如此迅速,各个阵营都有自己的狂热支持者。也许是时候分析一下它们之间的区别了。目前,PyTorch仍然是一个“研究”框架,而TensorFlow仍然是一个“工业”框架。他们之间的争论主要可以归结为三个因素:模型可用性、模型部署和软件生态。模型可用性随着深度学习领域的逐年扩大,模型变得越来越大。从头开始训练sota模型成本太高,fine-tuning成为新的主流。所以publicsota模型所采用的框架对于后续的社区生态来说是非常重要的。在模型可用性方面,PyTorch和TensorFlow存在很大差异。PyTorch和TensorFlow都有自己的官方模型存储库,但从业者可能希望利用来自多个来源的模型。目前,PyTorch在研究领域明显麻木,大多数研究人员都在使用它,大多数发表的论文和开源模型都在使用PyTorch。汇总过去几年八种顶级研究期刊的数据表明,PyTorch越来越受欢迎,论文中的使用率在短短几年内从大约7%增长到近80%。虽然TensorFlow的大部分挥之不去的问题在2019年发布的TensorFlow2中得到了解决,但PyTorch的势头强劲到足以维持其在研究领域的地位,至少从社区的角度来看是这样。PaperswithCode网站上的大部分论文使用的是PyTorch框架,而且还在不断上升,而TensorFlow的市场份额逐年下降。在过去三个月创建的总共4,500个存储库中,60%是使用PyTorch实现的,只有11%使用了TensorFlow。虽然研究的主流是PyTorch,但也有例外。谷歌和DeepMind显然使用TensorFlow进行研究。OpenAI的一些老基线也是TensorFlow,要到2020年才会全面切换到PyTorch,如果模型部署不能投入生产使用,训练性能最好的模型就没有意义。因此,如何更高效地完成模型部署至关重要,尤其是随着微服务业务模型的日益普及,高效的部署可能决定以AI为核心竞争力的企业的成败。TensorFlow自诞生以来一直是面向部署的应用程序的首选框架,TensorFlowServing和TensorFlowLite允许用户轻松部署在云端、服务器、移动设备和物联网设备上。各大公司招聘深度学习工程师时,大多要求掌握TensorFlow框架。从部署的角度来看,PyTorch曾经非常乏善可陈,但近年来也在努力弥补这一差距。比如相继推出的TorchServe和PyTorchLive,都提供了本地部署工具,但仍然只针对移动端。处于起步阶段。因此,在部署便利性方面,TensorFlow胜出。生态系统目前,深度学习不再局限于高度受控环境中的特定用例。也就是说,AI可以应用在任何环境中,比如移动端、移动端、Web端。因此,更大的生态系统框架对于促进移动、本机和服务器应用程序的开发非常重要。此外,专用机器学习硬件(例如Google的EdgeTPU)的出现意味着从业者需要使用与该硬件良好集成的框架。PyTorch和TensorFlow的相关生态做得很好。除了HuggingFace,PyTorch的Hub还有官方的PyTorchHub,包括音频、视觉和NLP的模型。它还有一些生成模型,包括用于生成高质量名人面孔图像的GAN。SpeechBrain是PyTorch官方开源的语音工具包,支持ASR、说话人识别、验证和分类等。如果你不想构建任何模型,但想要一个具有自动分章功能的即插即用工具,它也很方便,情绪分析、实体检测等等!PyTorchLightning,有时被称为PyTorch的Keras,简化了PyTorch中的模型工程和训练,自2019年首次发布以来已经成熟。Lightning以面向对象的方式处理建模过程,定义了一些可重用和跨平台使用的共享组件项目。还有一个分布式训练工具TorchElastic,它管理工作进程并协调重启行为,以便用户可以在不影响训练的情况下在可以动态变化的计算节点集群上训练模型,并防止服务器维护事件或网络问题引起的问题,等问题导致的停机时间不丢失训练进度。TorchX是一个用于快速构建和部署机器学习应用程序的SDK。TorchX包括一个培训课程管理器API,可将分布式PyTorch应用程序启动到受支持的调度程序上。它负责启动分布式作业,同时原生支持由TorchElastic在本地管理的作业。在TensorFlow阵营中,TensorFlowHub是一个训练有素的机器学习模型库,可以进行微调。用户只需几行代码就可以使用像BERT这样的模型。该中心包括TensorFlow、TensorFlowLite和用于不同用例的TensorFlow。js模型,模型可用于图像、视频、音频和文本问题。TensorFlowExtended是TensorFlow端到端的模型部署平台,用户可以在其中加载、验证、分析和转换数据;训练和评估模型;使用Serving或Lite部署模型;然后跟踪工件及其依赖关系。TFX可以与Jupyter或Colab一起使用,并且可以使用ApacheAirflow/Beam或Kubernetes进行编排。TFX与GoogleCloud紧密集成,并与VertexAIPipelines配合使用。MediaPipe是一个框架,用于构建用于人脸检测、多手跟踪、对象检测等的多模式、跨平台应用机器学习管道。该项目是开源的,并且绑定了多种语言,包括Python、C++和JavaScript。TensorFlow.js是一个用于机器学习的JavaScript库,可让您使用Node.js在浏览器和服务器端训练和部署模型。TensorFlowCloud允许用户将他们的本地环境连接到谷歌云。提供一个API,在不使用CloudConsole的情况下弥合从本地机器上的模型构建和调试到GCP上的分布式训练和超参数调整的差距。GoogleColab是一个基于云的笔记本环境,与Jupyter非常相似。很容易将Colab连接到GoogleCloud进行GPU或TPU训练,PyTorch也可以与Colab一起使用。三项说完了,这两个框架可以说是神仙打架,各有优劣。不过评论区有网友说,我一只脚在工业界,另一只脚还在学术界,但是教学的时候还是选择了PyTorch,因为TF太不靠谱了,界面一直在变,尤其是它的是时候从TF1迁移到TF2了。而且在公司也用PyTorch,因为灵活性比较重要。如果看完上面的讨论,你还不知道如何选择适合自己的框架,那么英雄联盟的一条英雄线或许会为这场酸甜苦辣的战斗带来终极答案。如果问我更喜欢哪种工具,那就太天真了,但我最喜欢的是锤子。
