本文共 3669 字,大约阅读时间需要 12 分钟。
PyTorch vs TensorFlow:在2022年的框架较量
坊间传闻:「TensorFlow 适合业界,PyTorch 适合学界」。这种说法到 2022 年还成立吗?在这篇文章中,我们从模型可用性、部署便捷度和生态系统三个方面对比了PyTorch和TensorFlow,分析它们在不同场景中的优劣势,并为不同身份的读者提供选择建议。
在模型可用性方面,PyTorch和TensorFlow表现出了明显的区别。它们都有自己的官方模型库,但对于从业者来说,这些库里的模型可能还不够。我们需要比较这两个框架官方模型库之外的模型来源是否丰富。
HuggingFace的存在使得深度学习从业者仅借助几行代码就能将训练、微调好的SOTA模型整合到其pipeline中。数据显示,HuggingFace中大约有85%的模型只能在PyTorch上用,剩下的模型还有一半也可以在PyTorch上用。相比之下,只有16%的模型能在TensorFlow上用,8%是TensorFlow所独有的。
如果将范围缩小到HuggingFace上最受欢迎的30个模型,我们可以看到类似的结果。在这30个模型中,能在TensorFlow上用的还不到2/3,但能在PyTorch上用的却达到了100%,没有哪个模型只能在TensorFlow上用。
对于研究者来说,从最近发表的论文中获取模型是非常重要的。PyTorch作为一个研究型框架,其在HuggingFace上的优势趋势会蔓延至整个社区。数据显示,PyTorch在顶级研究期刊上的采用率从7%增长到80%,TensorFlow的采用率相对下降。
PyTorch的这种增长势头很大程度上是拜TensorFlow所赐。许多研究者表示,TensorFlow1太难用了。尽管2019年发布的TensorFlow2改掉了一些问题,但PyTorch的增长势头已经难以遏制。在2018年还在用TensorFlow的论文作者中,有55%的人在2019年转向了PyTorch。
从一开始,TensorFlow就是一个面向部署的首选框架,因为它有一系列可以提高端到端深度学习效率的工具,比如TensorFlowServing和TensorFlowLite。
TensorFlowServing用于在服务器上部署TensorFlow模型,无论是在内部还是在云上,并在TensorFlowExtended(TFX)端到端机器学习平台中使用。Serving使得用模型标记(model tag)将模型序列化到定义良好的目录中变得很容易,并且可以选择在保持服务器架构和API静态的情况下使用哪个模型来进行推理请求。
TensorFlowLite用于在移动或物联网/嵌入式设备上部署TensorFlow模型。TFLite对这些设备上的模型进行了压缩和优化,并解决了设备上的AI的5个约束——延迟、连接、隐私、大小和功耗。TensorFlow还提供了广泛的语言选项,支持Python、Java、C++、JavaScript和Swift。
PyTorch在简化部署方面有所投入。以前,PyTorch用户需要使用Flask或Django在模型之上构建一个REST API,但现在他们有了TorchServe和PyTorch Live的本地部署选项。
TorchServe是AWS和Facebook合作的开源部署框架,于2020年发布。它具有端点规范、模型归档和指标观测等基本功能,但仍然不如TensorFlow。TorchServe同时支持REST和gRPCAPI。
PyTorch Live于2019年首次发布PyTorch Mobile,旨在为部署优化的机器学习模型创建端到端工作流,适用于Android、iOS和Linux。PyTorch Live于12月初发布,以移动平台为基础。它使用JavaScript和React Native来创建带有相关UI的跨平台iOS和AndroidAI应用。设备上的推理仍然由PyTorch Mobile执行。
2022年,将PyTorch和TensorFlow分开考虑,一个重要的因素是它们所处的生态系统不同。PyTorch和TensorFlow都提供了易于部署、管理、分布式训练的工具,但它们在生态系统方面的差异更为重要。
TensorFlow的生态系统以其强大的部署能力和端到端平台著称。TensorFlowHub是一个经过训练的机器学习模型库,可以进行微调,让用户只需几行代码就能使用像BERT这样的模型。Model Garden提供了谷歌维护的官方模型、研究人员维护的研究模型和社区维护的精选社区模型。
TensorFlowExtended(TFX)是TensorFlow用于模型部署的端到端平台。TFX包括加载、验证、分析和转换数据;训练和评估模型;使用Serving或Lite部署模型;跟踪artifact及其依赖项。TFX还可以与Jupyter或Colab一起使用,并且可以使用Apache Airflow/Beam或Kubernetes进行编排。TFX与Google Cloud紧密集成,可与Vertex AI Pipelines一起使用。
Vertex AI是Google Cloud今年刚刚发布的统一机器学习平台,旨在统一GCP、AI Platform和AutoML,成为一个平台。Vertex AI能够以无服务器方式编排工作流,帮助用户自动化、监控和管理机器学习系统。Vertex AI还可以存储工作流的artifact,让用户可以跟踪依赖项和模型的训练数据、超参数和源代码。
Coral是Google为满足本地AI需求而创建的工具包。Coral于2020年发布,解决了部署部分TFLite中提到的实现板载AI的难题,克服了隐私和效率等方面的困难。Coral提供了一系列用于原型设计、生产和传感的硬件产品,其中一些本质上是增强型的树莓派,专为AI应用程序创建,能够利用EdgeTPU在低功耗设备上进行高性能推理。
PyTorch和TensorFlow还没有决出明确的胜负,只能说某一个框架在特定用例方面是优于另一个框架的。以下是对不同身份读者的选择建议:
如果你需要将模型投入生产,TensorFlow是更好的选择。TensorFlow的强大部署框架和端到端的TensorFlow Extended平台是行业应用的关键。TensorFlow的Serving和TFLite使得模型部署更加简单高效。此外,TensorFlow在云计算和大数据集群中的优势也让它成为企业级应用的首选框架。
如果你是一名研究人员,你大概率会使用PyTorch。你应该坚持使用它,因为大多数SOTA模型都适用于PyTorch。PyTorch的灵活性和可调试性使其成为研究人员的首选框架。当然,有一些例外,如强化学习领域的一些研究可能更适合TensorFlow。
如果你是一位教授,在深度学习课程中使用哪种框架取决于每一门课程的目标。如果课程的重点是培养具备行业技能的深度学习工程师,让他们可以胜任整个端到端深度学习任务,那么你应该使用TensorFlow。在这种情况下,接触TensorFlow生态系统及其工具以及端到端的实践项目将非常有价值。
如果你想在职业生涯中寻求一些转变,PyTorch或TensorFlow都是不错的选择。在这种情况下,你可以做的最重要的事情是证明自己可以带来额外价值,因此拥有复合项目经验至关重要。将深度学习应用于创造性用例来打破常规,或者通过端到端的项目表明自己已做好迎接行业的准备,都能让自己处于不败之地。
如果你是一个对深度学习感兴趣并且只是想入门的初学者,建议使用Keras。利用其高级组件,你可以轻松地开始了解深度学习的基础知识。不过,一旦准备更深入地了解深度学习的具体细节,你会面临几个选择:
如果你不想安装新框架,并且担心能否适应新的API,那可以尝试从Keras「下降」到TensorFlow。如果TensorFlow令你困惑,请尝试转向PyTorch。
PyTorch与TensorFlow之争是一场微妙的辩论,格局一直在不断变化。至少在2022年,PyTorch和TensorFlow已经是非常成熟的框架,二者的核心深度学习功能重叠明显。今天,考虑每个框架的实际因素,比如它们的模型可用性、部署时间和相关的生态系统,都比只讨论它们的技术差异更有意义。
选择任一框架都不会出错,因为它们都有完备的文档、学习资源和活跃的社区。希望你能选到最适合的那一个框架。
转载地址:http://vjgfk.baihongyu.com/