用PyTorch還是TensorFlow,對於大部分深度學習從業者來說真是一個頭疼的問題。最近Reddit上有個貼文從三個方面對比了兩個框架,結果竟然是平手?
你用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,因為靈活性更重要。
如果看完上面的討論,你還不知道怎麼選擇適合自己的框架,那英雄聯盟中的一位英雄臺詞或許能對這場甜鹹之爭帶來終極答案。
要問我更喜歡什麼工具,未免太幼稚了,但我的錘子是我最喜歡的。
參考資料:
https://www.reddit.com/r/MachineLearning/comments/rga91a/d_are_you_using_PyTorch_or_TensorFlow_going_into/