1. 程式人生 > 其它 >TensorFlow與PyTorch模型部署效能比較

TensorFlow與PyTorch模型部署效能比較

TensorFlow與PyTorch模型部署效能比較

前言

2022了,選 PyTorch 還是 TensorFlow?之前有一種說法:TensorFlow 適合業界,PyTorch 適合學界。這種說法到 2022 年還成立嗎?從模型可用性、部署便捷度和生態系統三個方面對比了兩個框架的優缺點,針對不同身份的讀者給出了不同的選擇建議。

模型可用性對比:PyTorch 勝出
在模型可用性方面,PyTorch 和 TensorFlow 表現出了明顯的區別。都有官方模型庫,但是對於從業者來說,這些庫裡的模型可能還不夠。因此,有必要比較一下這兩個框架官方模型庫之外的模型來源是否豐富。
HuggingFace


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

最後看一下 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 就是一個面向部署的首選框架,因為有一系列可以提高階到端深度學習效率的工具,如 TensorFlow Serving 和 TensorFlow Lite。
相比之下,PyTorch 在部署方面一度表現平平,但近年來,在努力縮小這一差距。2020年推出的 TorchServe 和2021年推出的 PyTorch Live 為使用者提供了急需的本地部署工具。但二者之間的差距還有多大?看進一步的分析。
TensorFlow
TensorFlow 有靜態圖,可以優化推理效能。當使用 TensorFlow 部署模型時,可以根據具體應用選擇使用 TensorFlow Serving 或 TensorFlow Lite。
TensorFlow Serving:
TensorFlow Serving 用於在伺服器上部署 TensorFlow 模型,無論是在內部還是在雲上,在 TensorFlow Extended(TFX)端到端機器學習平臺中使用。Serving 使得用模型標記(model tag)將模型序列化到定義良好的目錄中變得很容易,可以選擇在保持伺服器架構和 API 靜態的情況下,使用哪個模型來進行推理請求。
Serving 可以幫使用者輕鬆地在 gRPC 伺服器上部署模型,這些伺服器執行谷歌為高效能 RPC 打造的開源框架。gRPC 的設計意圖是連線不同的微服務生態系統,這些伺服器非常適合模型部署。Serving 通過 Vertex AI 和 Google Cloud 緊密地整合在一起,與Kubernetes 以及 Docker 進行了整合。
TensorFlow Lite:
TensorFlow Lite 用於在移動或物聯網 / 嵌入式裝置上部署 TensorFlow 模型。TFLite 對這些裝置上的模型進行了壓縮和優化,解決了裝置上的 AI 的 5 個約束——延遲、連線、隱私、大小和功耗。可以使用相同的 pipeline,同時匯出基於標準 Keras 的 SavedModels(和 Serving 一起使用)和 TFLite 模型,這樣就能比較模型的質量。
TFLite 可用於 Android、iOS、微控制器和嵌入式 Linux。TensorFlow 針對 Python、Java、C++、JavaScript 和 Swift 的 API,為開發人員提供了廣泛的語言選項。
PyTorch
PyTorch 在簡化部署方面有所投入。以前,PyTorch 使用者需要使用 Flask 或 Django 在模型上構建一個 REST API,但現在有了 TorchServe 和 PyTorch Live 的本地部署選項。
TorchServe:
TorchServe 是 AWS 和 Facebook 合作的開源部署框架,於 2020 年釋出。具有端點規範、模型歸檔和指標觀測等基本功能,但仍然不如 TensorFlow。TorchServe 同時支援 REST 和 gRPC API。
PyTorch Live:
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。
生態系統對比:TensorFlow 勝出
2022 年,將 PyTorch 和 TensorFlow 分開考慮,一個重要的因素是所處的生態系統不同。PyTorch 和 TensorFlow 都提供了易於部署、管理、分散式訓練的工具,從建模的角度講都是能力很強的框架。相比之下,在生態系統方面的差異更重要。
PyTorch
Hub:
PyTorch Hub 作為面向研究的官方平臺,用於與預訓練模型共享儲存庫。Hub 擁有廣泛類別的模型,包括用於音訊、視覺、NLP 任務的模型,還有用於生成任務的 GAN 模型。
SpeechBrain:
SpeechBrain 是 PyTorch 的官方開源語音工具包。SpeechBrain 能夠完成自動語音識別(ASR)、說話人識別、驗證和分類等任務。如果不想構建任何模型,想要一個具有情感分析、實體檢測等功能的即插即用工具,可以選擇使用 AssemblyAI 的 Speech-to-Text API。
當然,PyTorch 的工具頁面還有很多其他有用的庫,包括為計算機視覺和自然語言處理量身定製的庫,如 fast.ai。
TorchElastic:
TorchElastic 是 AWS 和 Facebook 2020 年聯合釋出的分散式訓練工具,可管理工作程序並協調重啟行為,以便使用者在計算節點叢集上訓練模型,這些節點可以動態變化而不會影響訓練。因此,TorchElastic 可防止因伺服器維護或網路問題等導致的災難性故障,不會丟失訓練進度。TorchElastic 具有與 Kubernetes 整合的特性,已整合到 PyTorch 1.9+ 中。
TorchX:
TorchX 是一個用於快速構建和部署機器學習應用程式的 SDK。TorchX 包括 Training Session Manager API,可在支援的排程程式上啟動分散式 PyTorch 應用程式。TorchX 負責啟動分散式作業,原生支援由 TorchElastic 區域性管理的作業。
Lightning:
PyTorch Lightning 有時被稱為 PyTorch 的 Keras。雖然這種類比不準確,但 Lightning 的確是簡化 PyTorch 中模型工程和訓練過程的有用工具,自 2019 年首次釋出,已經逐漸趨於成熟。Lightning 以面向物件的方式處理建模過程,定義了可重用和可跨專案使用的可共享元件。
TensorFlow
Hub:
TensorFlow Hub 是一個經過訓練的機器學習模型庫,可以進行微調,只需幾行程式碼就能使用像 BERT 這樣的模型。Hub 包含適用於不同用例的 TensorFlow、TensorFlow Lite 和 TensorFlow.js 模型,可用於影象、視訊、音訊和文字處理。
Model Garden:
如果現成的預訓練模型不適用於使用者的應用,TensorFlow 的儲存庫 Model Garden 可以提供 SOTA 模型的原始碼。對於想要深入瞭解模型工作原理,或根據需要修改模型的使用者,Model Garden 將非常有用。
Model Garden 包含谷歌維護的官方模型、研究人員維護的研究模型和社群維護的精選社群模型。TensorFlow 的長期目標是在 Hub 上提供來自 Model Garden 的模型的預訓練版本,使 Hub 上的預訓練模型在 Model Garden 中具有可用的原始碼。
Extended(TFX):
TensorFlow Extended 是 TensorFlow 用於模型部署的端到端平臺。該平臺的功能強大,包括:載入、驗證、分析和轉換資料;訓練和評估模型;使用 Serving 或 Lite 部署模型;跟蹤 artifact 及其依賴項。TFX 還可以與 Jupyter 或 Colab 一起使用,可以使用 Apache Airflow/Beam 或 Kubernetes 進行編排。TFX 與 Google Cloud 緊密整合,可與 Vertex AI Pipelines 一起使用。
Vertex AI:
Vertex AI 是 Google Cloud 2021年剛剛釋出的統一機器學習平臺,旨在統一 GCP、AI Platform 和 AutoML,成為一個平臺。Vertex AI 能夠以無伺服器方式編排工作流,幫助使用者自動化、監控和管理機器學習系統。Vertex AI 可以儲存工作流的 artifact,讓使用者可以跟蹤依賴項和模型的訓練資料、超引數和原始碼。
Coral:
儘管有各種各樣的 SaaS 公司依賴基於雲的人工智慧,但許多行業對本地人工智慧的需求也在不斷增長,Google Coral 就是為了滿足這一需求建立的。Coral 是一個完整的工具包,可以使用本地 AI 構建產品。Coral 於 2020 年釋出,解決了部署部分 TFLite 中提到的實現板載 AI 的問題,克服了隱私和效率等方面的困難。
Coral 提供了一系列用於原型設計、生產和感測的硬體產品,一些本質上是增強型的樹莓派,專為 AI 應用程式建立,能夠利用 Edge TPU 在低功耗裝置上進行高效能推理。Coral 提供用於影象分割、姿態估計、語音識別等任務的預編譯模型,為希望建立本地 AI 系統的開發人員提供支援。建立模型的基本步驟如下面的流程圖所示。

TensorFlow.js:

TensorFlow.js 是一個用於機器學習的 JavaScript 庫,允許使用者使用 Node.js 在瀏覽器和伺服器端訓練和部署模型。
Cloud:
TensorFlow Cloud 是一個可以將本地環境連線到 Google Cloud 的庫,API 旨在彌補本地機器上模型構建和除錯與 GCP 上分散式訓練和超引數調整間的差距,而無需使用 Cloud Console。
Colab:
Google Colab 是一個基於雲的 notebook 環境,與 Jupyter 非常相似。Colab 易於連線到 Google Cloud 進行 GPU 或 TPU 訓練,Colab 可以和 PyTorch 一起使用。
Playground:
Playground 是一個小而精緻的視覺化工具,用於幫助使用者理解神經網路的基礎知識。要戶可以更改 Playground 內建神經網路的層數和大小,實時檢視神經網路是如何學習特徵的,使用者還可以看到改變學習率和正則化強度等超引數,如何影響不同資料集的學習過程。Playground 允許實時播放學習過程,高度直觀的方式檢視輸入在訓練過程中是如何轉換的。Playground 提供了一個開源的小型神經網路庫,是自身的構建基礎,使用者能夠檢視其原始碼的具體細節。
Datasets:
谷歌研究院的 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/

人工智慧晶片與自動駕駛