
點擊上圖,查看教學大綱
坊間傳聞:「TensorFlow 適合業界,PyTorch 適合學界」。都 2022 年了,還是這樣嗎?快到 2022 了,你是選 PyTorch 還是 TensorFlow?之前有一種說法:TensorFlow 適合業界,PyTorch 適合學界。這種說法到 2022 年還成立嗎?在這篇文章中,作者從模型可用性、部署便捷度和生態系統三個方面對比了兩個框架的優缺點,並針對不同身份的讀者給出了不同的選擇建議。
在模型可用性方面,PyTorch 和 TensorFlow 表現出了明顯的區別。它們都有自己的官方模型庫,但是對於從業者來說,這些庫里的模型可能還不夠。因此,我們有必要比較一下這兩個框架官方模型庫之外的模型來源是否豐富。
HuggingFace 的存在使得深度學習從業者僅藉助幾行代碼就能將訓練、微調好的 SOTA 模型整合到其 pipeline 中。下圖顯示了兩個框架的 HuggingFace 模型可用情況。從圖中看出,HuggingFace 中大約有 85% 的模型只能在 PyTorch 上用,剩下的模型還有一半也可以在 PyTorch 上用。相比之下,只有 16% 的模型能在 TensorFlow 上用,只有 8% 是 TensorFlow 所獨有的。

如果把範圍縮小到 HuggingFace 上最受歡迎的 30 個模型,我們可以看到類似的結果。在這 30 個模型中,能在 TensorFlow 上用的還不到 2/3,但能在 PyTorch 上用的卻達到了 100%,沒有哪個模型只能在 TensorFlow 上用。

對於研究者來說,從最近發表的論文中獲取模型是非常重要的,它可以讓你專注於其他重要的工作。嘗試在不同的框架中重新創建新的模型會浪費寶貴的時間。
考慮到 PyTorch 實際上是一個研究型框架,作者預期在 HuggingFace 上觀察到的趨勢會蔓延至整個社區,結果不出所料。
如下圖所示,作者匯總了 8 個頂級研究期刊上的論文在過去幾年裡的框架採用情況。結果顯示,PyTorch 的採用率增長迅速,幾年時間就從原來的 7% 長到了近 80%。

PyTorch 的這種增長勢頭很大程度上是拜 TensorFlow 所賜。很多轉向 PyTorch 的研究者都表示 TensorFlow 1 太難用了。儘管 2019 年發布的 TensorFlow 2 改掉了一些問題,但彼時,PyTorch 的增長勢頭已經難以遏制。
如果看一下那些中途換框架的研究者的比例,我們也可以得出類似的結論。如下圖所示,在 2018 年還在用 TensorFlow 的論文作者中,有 55% 的人在 2019 年轉向了 PyTorch,但 2018 年就在用 PyTorch 的人有 85% 都留了下來。

最後我們來看一下 Papers with Code 網站。在這一部分,作者繪製了使用 PyTorch、TensorFlow 或其他框架的論文隨時間變化的比例。從中可以看出,使用 PyTorch 的論文在穩步增長:在本季度創建的 4500 個庫中,有 60% 是在 PyTorch 中實現的,只有 11% 是在 TensorFlow 中實現的。相比之下,TensorFlow 的使用率在穩步下降,2019 年 TensorFlow 2 的發布也沒有扭轉這一趨勢。

從以上數據可以明顯看出,PyTorch 目前在研究領域占據主導地位。雖然 TensorFlow 2 解決了研究者使用該框架進行研究的一些痛點,但 PyTorch 卻沒有給研究者回頭的理由。此外,TensorFlow 兩大版本之間的向後兼容性問題只會讓這種趨勢愈演愈烈。
Google AI:谷歌發布的論文自然會用 TensorFlow。鑑於在論文方面谷歌比 Facebook 更高產,一些研究者可能會發現掌握 TensorFlow 還是很有用的。
DeepMind:DeepMind 也用 TensorFlow,而且也比 Facebook 高產。他們創建了一個名叫 Sonnet 的 TensorFlow 高級 API,用於研究目的。有人管這個 API 叫「科研版 Keras」,那些考慮用 TensorFlow 做研究的人可能會用到它。此外,DeepMind 的 Acme 框架可能對於強化學習研究者很有用。
OpenAI:OpenAI 在 2020 年宣布了全面擁抱 PyTorch 的決定。但他們之前的強化學習基線庫都是在 TensorFlow 上部署的。基線提供了高質量強化學習算法的實現,因此 TensorFlow 可能還是強化學習從業者的最佳選擇。
JAX:谷歌還有另一個框架——JAX,它在研究社區中越來越受歡迎。與 PyTorch 和 TensorFlow 相比,JAX 的開銷要小得多。但同時,JAX 和前兩個框架差別也很大,因此遷移到 JAX 對於大多數人來說可能並不是一個好選擇。目前,有越來越多的模型 / 論文已經在用 JAX,但未來幾年的趨勢依然不甚明朗。
所以總體來看,在第一輪(模型可用性)的對比中,PyTorch 完勝。
從一開始,TensorFlow 就是一個面向部署的首選框架,因為它有一系列可以提高端到端深度學習效率的工具,比如 TensorFlow Serving 和 TensorFlow Lite。
相比之下,PyTorch 在部署方面一度表現平平,但近年來,它也在努力縮小這一差距。去年推出的 TorchServe 和前幾周推出的 PyTorch Live 為用戶提供了急需的本地部署工具。但二者之間的差距還有多大?我們來看進一步的分析。
TensorFlow 有靜態圖,可以優化推理性能。當使用 TensorFlow 部署模型時,你可以根據具體應用選擇使用 TensorFlow Serving 或 TensorFlow Lite。
TensorFlow Serving 用於在服務器上部署 TensorFlow 模型,無論是在內部還是在雲上,並在 TensorFlow Extended(TFX)端到端機器學習平台中使用。Serving 使得用模型標記(model tag)將模型序列化到定義良好的目錄中變得很容易,並且可以選擇在保持服務器架構和 API 靜態的情況下使用哪個模型來進行推理請求。
Serving 可以幫用戶輕鬆地在 gRPC 服務器上部署模型,這些服務器運行谷歌為高性能 RPC 打造的開源框架。gRPC 的設計意圖是連接不同的微服務生態系統,因此這些服務器非常適合模型部署。Serving 通過 Vertex AI 和 Google Cloud 緊密地集成在一起,還和 Kubernetes 以及 Docker 進行了集成。
TensorFlow Lite 用於在移動或物聯網 / 嵌入式設備上部署 TensorFlow 模型。TFLite 對這些設備上的模型進行了壓縮和優化,並解決了設備上的 AI 的 5 個約束——延遲、連接、隱私、大小和功耗。可以使用相同的 pipeline 同時導出基於標準 Keras 的 SavedModels(和 Serving 一起使用)和 TFLite 模型,這樣就能比較模型的質量。
TFLite 可用於 Android、iOS、微控制器和嵌入式 Linux。TensorFlow 針對 Python、Java、C++、JavaScript 和 Swift 的 API 為開發人員提供了廣泛的語言選項。
PyTorch 在簡化部署方面有所投入。以前,PyTorch 用戶需要使用 Flask 或 Django 在模型之上構建一個 REST API,但現在他們有了 TorchServe 和 PyTorch Live 的本地部署選項。
TorchServe 是 AWS 和 Facebook 合作的開源部署框架,於 2020 年發布。它具有端點規範、模型歸檔和指標觀測等基本功能,但仍然不如 TensorFlow。TorchServe 同時支持 REST 和 gRPC API。
PyTorch 於 2019 年首次發布 PyTorch Mobile,旨在為部署優化的機器學習模型創建端到端工作流,適用於 Android、iOS 和 Linux。
PyTorch Live 於 12 月初發布,以移動平台為基礎。它使用 JavaScript 和 React Native 來創建帶有相關 UI 的跨平台 iOS 和 Android AI 應用。設備上的推理仍然由 PyTorch Mobile 執行。Live 提供了示例項目來輔助入門,並計劃在未來支持音頻和視頻輸入。
目前,TensorFlow 依然在部署方面占有優勢。Serving 和 TFLite 比 PyTorch 的同類型工具要穩健一些。而且,將 TFLite 與谷歌的 Coral 設備一起用於本地 AI 的能力是許多行業的必備條件。相比之下,PyTorch Live 只專注於移動平台,而 TorchServe 仍處於起步階段。因此綜合來看,第二輪(部署便捷性)的勝出者是 TensorFlow。
如果你既想用 TensorFlow 的部署基礎設施,又想訪問只能在 PyTorch 中使用的模型,作者推薦使用 ONNX 將模型從 PyTorch 移植到 TensorFlow。
2022 年,將 PyTorch 和 TensorFlow 分開考慮,一個重要的因素是它們所處的生態系統不同。PyTorch 和 TensorFlow 都提供了易於部署、管理、分布式訓練的工具,從建模的角度講都是能力很強的框架。相比之下,它們在生態系統方面的差異更重要。
PyTorch Hub 作為面向研究的官方平台,用於與預訓練模型共享存儲庫。Hub 擁有廣泛類別的模型,包括用於音頻、視覺、NLP 任務的模型,還有用於生成任務的 GAN 模型。
SpeechBrain 是 PyTorch 的官方開源語音工具包。SpeechBrain 能夠完成自動語音識別(ASR)、說話人識別、驗證和分類等任務。如果你不想構建任何模型,而是想要一個具有情感分析、實體檢測等功能的即插即用工具,你可以選擇使用 AssemblyAI 的 Speech-to-Text API。
當然,PyTorch 的工具頁面還有很多其他有用的庫,包括為計算機視覺和自然語言處理量身定製的庫,例如 fast.ai。
TorchElastic 是 AWS 和 Facebook 2020 年聯合發布的分布式訓練工具,可管理工作進程並協調重啟行為,以便用戶在計算節點集群上訓練模型,這些節點可以動態變化而不會影響訓練。因此,TorchElastic 可防止因服務器維護或網絡問題等導致的災難性故障,不會丟失訓練進度。TorchElastic 具有與 Kubernetes 集成的特性,並已集成到 PyTorch 1.9+ 中。
TorchX 是一個用於快速構建和部署機器學習應用程序的 SDK。TorchX 包括 Training Session Manager API,可在支持的調度程序上啟動分布式 PyTorch 應用程序。TorchX 負責啟動分布式作業,同時原生支持由 TorchElastic 局部管理的作業。
PyTorch Lightning 有時被稱為 PyTorch 的 Keras。雖然這種類比並不準確,但 Lightning 的確是簡化 PyTorch 中模型工程和訓練過程的有用工具,自 2019 年首次發布以來已經逐漸趨於成熟。Lightning 以面向對象的方式處理建模過程,定義了可重用和可跨項目使用的可共享組件。
TensorFlow Hub 是一個經過訓練的機器學習模型庫,可以進行微調,讓用戶只需幾行代碼就能使用像 BERT 這樣的模型。Hub 包含適用於不同用例的 TensorFlow、TensorFlow Lite 和 TensorFlow.js 模型,可用於圖像、視頻、音頻和文本處理。
如果現成的預訓練模型不適用於用戶的應用,那麼 TensorFlow 的存儲庫 Model Garden 可以提供 SOTA 模型的源代碼。對於想要深入了解模型工作原理,或根據自己的需要修改模型的用戶,Model Garden 將非常有用。
Model Garden 包含谷歌維護的官方模型、研究人員維護的研究模型和社區維護的精選社區模型。TensorFlow 的長期目標是在 Hub 上提供來自 Model Garden 的模型的預訓練版本,並使 Hub 上的預訓練模型在 Model Garden 中具有可用的源代碼。
TensorFlow Extended 是 TensorFlow 用於模型部署的端到端平台。該平台的功能強大,包括:加載、驗證、分析和轉換數據;訓練和評估模型;使用 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,讓用戶可以跟蹤依賴項和模型的訓練數據、超參數和源代碼。
儘管有各種各樣的 SaaS 公司依賴基於雲的人工智能,但許多行業對本地人工智能的需求也在不斷增長,Google Coral 就是為了滿足這一需求而創建的。Coral 是一個完整的工具包,可以使用本地 AI 構建產品。Coral 於 2020 年發布,解決了部署部分 TFLite 中提到的實現板載 AI 的問題,克服了隱私和效率等方面的困難。
Coral 提供了一系列用於原型設計、生產和傳感的硬件產品,其中一些本質上是增強型的樹莓派,專為 AI 應用程序創建,能夠利用 Edge TPU 在低功耗設備上進行高性能推理。Coral 還提供用於圖像分割、姿態估計、語音識別等任務的預編譯模型,為希望創建本地 AI 系統的開發人員提供支持。創建模型的基本步驟如下面的流程圖所示。

TensorFlow.js 是一個用於機器學習的 JavaScript 庫,允許用戶使用 Node.js 在瀏覽器和服務器端訓練和部署模型。
TensorFlow Cloud 是一個可以將本地環境連接到 Google Cloud 的庫,它的 API 旨在彌補本地機器上模型構建和調試與 GCP 上分布式訓練和超參數調整之間的差距,而無需使用 Cloud Console。
Google Colab 是一個基於雲的 notebook 環境,與 Jupyter 非常相似。Colab 易於連接到 Google Cloud 進行 GPU 或 TPU 訓練,並且 Colab 還可以和 PyTorch 一起使用。
Playground 是一個小而精緻的可視化工具,用於幫助用戶理解神經網絡的基礎知識。要戶可以更改 Playground 內置神經網絡的層數和大小,以實時查看神經網絡是如何學習特徵的,用戶還可以看到改變學習率和正則化強度等超參數如何影響不同數據集的學習過程。Playground 允許實時播放學習過程,以高度直觀的方式查看輸入在訓練過程中是如何轉換的。Playground 還提供了一個開源的小型神經網絡庫,是它自身的構建基礎,用戶能夠查看其源代碼的具體細節。
谷歌研究院的 Datasets 是谷歌定期發布的數據集的整合資源。谷歌還提供了數據集搜索以訪問更廣泛的數據集資源。當然,PyTorch 用戶也可以利用這些數據集。
總的來說,儘管 PyTorch 和 TensorFlow 有很多相似和共享的資源,但在生態系統方面,終究是 TensorFlow 更勝一籌。谷歌投入巨資確保深度學習的每個相關領域都有完善的產品。與 Google Cloud 和 TFX 的緊密集成使端到端的開發過程變得輕而易舉,而將模型移植到 Google Coral 設備的便利性讓 TensorFlow 在某些行業取得了壓倒性的勝利。
我應該選 PyTorch 還是 TensorFlow?
正如期望的那樣,PyTorch 與 TensorFlow 還沒有決出明確的勝負。只能說,某一個框架在特定用例方面是優於另一個框架的。為了幫助讀者做出選擇,作者匯總了一些建議。在下面的流程圖中,每個圖表都針對不同的興趣領域量身定製。

如果在工業界執行深度學習工程任務,你很可能會使用 TensorFlow,並且應該堅持使用它。對於需要將模型投入生產的人來說,TensorFlow 強大的部署框架和端到端的 TensorFlow Extended 平台是很珍貴的。能在 gRPC 服務器上進行輕鬆部署以及模型監控和工件跟蹤是行業應用的關鍵。
鑑於 PyTorch 最近發布了 TorchServe,如果你需要訪問僅在 PyTorch 中可用的 SOTA 模型,那也可以考慮使用 PyTorch。在這種情況下,請考慮使用 ONNX 在 TensorFlow 的部署工作流中部署轉換後的 PyTorch 模型。
如果你正在構建移動應用,鑑於 PyTorch 最近發布了 PyTorch Live,可以考慮使用 PyTorch。如果你需要音頻或視頻輸入,在這種情況下還是應該使用 TensorFlow。如果你正在構建使用 AI 的嵌入式系統或 IoT 設備,鑑於 TFLite + Coral 生態系統,你仍然應該使用 TensorFlow。
總之,在工業界,如果必須選擇一種框架,請選擇 TensorFlow。

如果是一名研究人員,你大概率會使用 PyTorch,你應該堅持使用它,大多數 SOTA 模型都適用於 PyTorch。
當然,這條規則有幾個值得注意的例外,最值得注意的是:強化學習領域的一些研究應該考慮使用 TensorFlow。TensorFlow 有一個用於強化學習的原生 Agents 庫,並且 DeepMind 的 Acme 框架是在 TensorFlow 中實現的。OpenAI 的 baseline 模型存儲庫也是在 TensorFlow 中實現的,儘管 OpenAI 的 Gym 在 TensorFlow 或 PyTorch 中都能使用。如果你打算使用 TensorFlow 進行研究,還應該查看 DeepMind 的 Sonnet 以獲得更高級別的抽象。
如果不想使用 TensorFlow,比如你正在做 TPU 訓練,那麼應該考慮探索谷歌的 JAX。JAX 本身不是神經網絡框架,而是更接近於具有自動微分能力的 GPU/TPU 的 NumPy 實現。DeepMind 的 Haiku,被稱為「Sonnet for JAX」,是一個建立在 JAX 之上的神經網絡庫,如果你正在考慮 JAX,那麼 Haiku 值得你去探索。如果你不進行 TPU 訓練,那最好是堅持使用 PyTorch。
無論選擇哪種框架,你都應該在 2022 年密切關注 JAX。
總之,在學術界,如果需要選擇一個框架,請選擇 PyTorch。

如果你是一位教授,在深度學習課程中使用哪種框架取決於每一門課程的目標。如果課程的重點是培養具備行業技能的深度學習工程師,讓他們可以勝任整個端到端深度學習任務,而不僅僅是掌握深度學習理論,那麼你應該使用 TensorFlow。在這種情況下,接觸 TensorFlow 生態系統及其工具以及端到端的實踐項目將非常有價值。
如果課程的重點是深度學習理論和理解深度學習模型的底層原理,那麼應該使用 PyTorch。如果你正在教授讓學生為深度學習研究做好準備的高級本科課程或早期研究生課程,那你更應該選 PyTorch。
理想情況下,學生應該接觸每個框架,儘管單個學期的時間有限,但花一些時間來了解框架之間的差異可能很有價值。如果課程是機器學習大型課程的一部分,其中有許多課程專門針對不同的主題,最好堅持使用最適合課程材料的框架,而不是嘗試同時接觸兩者。

如果想在職業生涯中尋求一些轉變,PyTorch 或 TensorFlow 都是不錯的選擇。在這種情況下,你可以做的最重要的事情是證明自己可以帶來額外價值,因此擁有複合項目經驗至關重要。將深度學習應用於創造性用例來打破常規,或者通過端到端的項目表明自己已做好迎接行業的準備,都能讓自己處於不敗之地。
因此,建議使用可以讓你工作更輕鬆的任何框架,這比熟悉特定框架的 API 重要得多。話雖如此,如果你對框架完全不熟悉,請使用 TensorFlow,因為它是首選的行業框架。下圖中匯總了各種職業網站的每個框架職位的發布數量,TensorFlow 遠遠超過了 PyTorch。

總之,如果你有使用 PyTorch 的特定原因,例如為 OpenAI 工作,或者使用 TensorFlow 對你來說非常不直觀,那麼請隨意。但一般的建議是專注於 TensorFlow。

如果你是個深度學習愛好者,那麼你使用的框架將取決於你的目標。如果將深度學習模型作為某個較大項目的一部分來實施,那麼 TensorFlow 可能是你想要使用的,尤其是在部署到物聯網 / 嵌入式設備時。鑑於 PyTorch Live 已經發布,你可以將 PyTorch 用於移動應用,但目前 TensorFlow + TFLite 仍然是首選方法。
如果你的目標是為了使用深度學習而學習,那使用哪種框架取決於你的背景。一般來說,PyTorch 可能是更好的選擇,特別是如果你一直習慣使用 Python 工作。

如果你是一個對深度學習感興趣並且只是想入門的初學者,建議使用 Keras。利用其高級組件,你可以輕鬆地開始了解深度學習的基礎知識。不過,一旦準備更深入地了解深度學習的具體細節,你會面臨幾個選擇:
如果你不想安裝新框架,並且擔心能否適應新的 API,那可以嘗試從 Keras 「下降」到 TensorFlow。如果 TensorFlow 令你困惑,請嘗試轉向 PyTorch。
如果你想要一個更像 Python 的框架,那麼遷移到 PyTorch 可能是你最好的選擇。在這種情況下,必須安裝新框架並可能重寫自定義腳本。此外,如果 PyTorch 對你來說有點麻煩,你可以使用 PyTorch Lightning 劃分你的代碼並擺脫一些樣板。
如果你是一個完完全全的初學者,可以考慮觀看一些 TensorFlow 和 PyTorch 的 YouTube 教程,以確定哪個框架對自己來說更直觀。
PyTorch 與 TensorFlow 之爭是一場微妙的辯論,格局一直在不斷變化。至少在 2022 年,PyTorch 和 TensorFlow 都已經是非常成熟的框架,二者的核心深度學習功能重疊明顯。今天,考慮每個框架的實際因素,比如它們的模型可用性、部署時間和相關的生態系統,都比只討論它們的技術差異更有意義。
選擇任一框架都不會出錯,因為它們都有完備的文檔、學習資源和活躍的社區。希望你能選到最適合的那一個框架。
原文鏈接:https://www.assemblyai.com/blog/pytorch-vs-tensorflow-in-2022/

鑽石舞台 發表在 痞客邦 留言(0) 人氣()