誰是深度學習框架一哥?2022年,PyTorch和TensorFlow再爭霸
你用PyTorch還是用TensorFlow?
對于不同人群可能有不同的答案,科研人員可能更偏愛PyTorch,因其簡單易用,能夠快速驗證idea來搶占先機發論文。
雖然TensorFlow的差評如海,甚至有用戶專門注冊一個GitHub賬號開個issue來罵TensorFlow,但TensorFlow在工業界大哥的地位PyTorch仍然無法撼動。

所以,進入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,主要提供兩個高級功能:
- 具有強大的GPU加速的張量計算(如NumPy)
- 包含自動求導系統的深度神經網絡
最近Reddit上關于TensorFlow和PyTorch的討論又引起了網友的關注。
題主表示,兩個框架和他們對應的兩種生態系統發展的都是如此迅速,每個陣營都有自己的狂熱支持者,也許是時候分析一下他們到底有什么不同了。
目前來說,PyTorch仍然是「研究型」框架,TensorFlow仍然是「工業型」框架,他們之間的爭論主要可以歸結為三個因素:模型可用性、模型部署、軟件生態。
模型可用性
隨著深度學習領域的逐年擴大,模型也變得越來越大,從頭開始訓練sota模型的成本太高,微調已經成為新主流。所以公開的sota模型采用什么框架對于后續的社區生態來說很重要。
在模型可用性方面,PyTorch 和 TensorFlow 分歧很大,PyTorch 和 TensorFlow 都有自己的官方模型存儲庫,但從業者可能希望利用多個來源的模型。
目前,PyTorch明顯在研究領域已經贏麻木了,大部分科研人員都在用,并且大多數出版論文和開源模型都在使用 PyTorch。
將過去幾年八種頂級研究期刊的數據匯總以后可以看到,PyTorch越來越普遍,并且在短短幾年內,論文中的使用率從大約 7% 增長到近 80%。

雖然2019 年發布的 TensorFlow 2 中解決了大部分TensorFlow殘存的問題,但 PyTorch 的發展勢頭足以讓它維持自己在研究領域的地位,至少從社區的角度來看是這樣。

在Papers with Code網站上的論文中,大部分都使用的是PyTorch框架,并且還在逐漸上升,TensorFlow的市場份額在逐年下降。在過去的三個月里,總共創建了 4,500 個存儲庫中,其中60%使用 PyTorch 實現,只有11%使用 TensorFlow。

雖然研究主流是PyTorch,但也有例外,Google、DeepMind顯然都用TensorFlow來進行研究,OpenAI的一些舊的baseline也都是TensorFlow,直到2020年才全換到PyTorch。
模型部署
如果不能投入生產使用,那訓練性能再好的模型都毫無意義。
所以,如何更有效率地完成模型部署至關重要,尤其是隨著微服務業務模型的日益普及,高效的部署有可能決定以AI為核心競爭力的公司的成敗問題。
TensorFlow 自成立以來一直是面向部署的應用程序的首選框架,TensorFlow Serving和TensorFlow Lite可讓用戶輕松地在云、服務器、移動設備和 IoT 設備上進行部署。
各大公司在招聘深度學習工程師時,大部分都要求掌握TensorFlow框架。

從部署的角度來看,PyTorch 過去非常乏善可陳,但近年來它也一直致力于縮小這一差距,例如接連推出的TorchServe和PyTorch Live提供了本地部署工具,但仍然只針對移動端,許多部署工具還處于起步階段。
所以部署便捷性上,TensorFlow完勝。
生態系統
目前深度學習已不再局限于高度受控環境中的特定用例,也就是說,AI可能應用在任何環境,移動端、手機端、網頁端都有可能,因此一個具有更大生態系統的框架就顯得很重要,它可以促進移動、本地和服務器應用程序的開發。
此外,專用機器學習硬件,例如 Google 的Edge TPU的出現則意味著從業者需要使用可以與該硬件很好地集成的框架。

PyTorch和TensorFlow的相關生態都做得很好。
PyTorch的Hub除了HuggingFace,還有官方的PyTorch Hub,包括用于音頻、視覺和 NLP 的模型。它還有一些生成模型,包括用于生成名人面孔的高質量圖像的GAN。

SpeechBrain是 PyTorch 的官方開源語音工具包,支持 ASR、說話人識別、驗證和分類等。如果您不想構建任何模型,而是想要一個具有自動章節、情感分析、實體檢測等功能的即插即用工具,也是十分方便!
PyTorch Lightning有時被稱為 PyTorch 的 Keras,可以簡化 PyTorch 中模型工程和訓練過程,自 2019 年首次發布以來,已經逐漸成熟。Lightning 以面向對象的方式處理建模過程,定義了一些可重用和可跨項目使用的共享組件。
還有分布式訓練工具TorchElastic,可管理工作進程并協調重啟行為,以便用戶可以在計算節點集群上訓練模型,這些節點可以動態變化而不會影響訓練,還可防止因服務器維護事件或網絡問題等問題而導致的宕機,并且不會因此丟失訓練進度。
TorchX是一個用于快速構建和部署機器學習應用程序的 SDK。TorchX 包括 Training Session Manager API,可將分布式 PyTorch 應用程序啟動到受支持的調度程序上。它負責啟動分布式作業,同時原生支持由 TorchElastic本地管理的作業。

在TensorFlow陣營,TensorFlow Hub是一個經過訓練的機器學習模型庫,可以進行微調,用戶只需幾行代碼就可以使用像 BERT 這樣的模型,Hub中包含適用于不同用例的 TensorFlow、TensorFlow Lite 和 TensorFlow.js 模型,模型可用于圖像、視頻、音頻和文本問題。

TensorFlow Extended是 TensorFlow 用于模型部署的端到端平臺,用戶可以加載、驗證、分析和轉換數據;訓練和評估模型;使用 Serving 或 Lite 部署模型;然后跟蹤工件及其依賴項。TFX 可以與 Jupyter 或 Colab 一起使用,并且可以使用 Apache Airflow / Beam或 Kubernetes 進行編排。TFX 與Google Cloud緊密集成,可與 Vertex AI Pipelines 一起使用。
MediaPipe是用于構建多模式、跨平臺應用機器學習管道的框架,可用于人臉檢測、多手跟蹤、對象檢測等。該項目是開源的,并綁定了多種語言,包括 Python、C++ 和 JavaScript。

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,因為靈活性更重要。

如果看完上面的討論,你還不知道怎么選擇適合自己的框架,那英雄聯盟中的一位英雄臺詞或許能對這場甜咸之爭帶來終極答案。

要問我更喜歡什么工具,未免太幼稚了,但我的錘子是我最喜歡的。