關注"Python學習與數(shù)據(jù)挖掘",
坊間傳聞:「TensorFlow 適合業(yè)界,PyTorch 適合學界」。都快到 2022 年了,還是這樣嗎?快到 2022 了,你是選 PyTorch 還是 TensorFlow?之前有一種說法:TensorFlow 適合業(yè)界,PyTorch 適合學界。這種說法到 2022 年還成立嗎?在這篇文章中,作者從模型可用性、部署便捷度和生態(tài)系統(tǒng)三個方面對比了兩個框架的優(yōu)缺點,并針對不同身份的讀者給出了不同的選擇建議。在模型可用性方面,PyTorch 和 TensorFlow 表現(xiàn)出了明顯的區(qū)別。它們都有自己的官方模型庫,但是對于從業(yè)者來說,這些庫里的模型可能還不夠。因此,我們有必要比較一下這兩個框架官方模型庫之外的模型來源是否豐富。HuggingFace 的存在使得深度學習從業(yè)者僅借助幾行代碼就能將訓練、微調好的 SOTA 模型整合到其 pipeline 中。下圖顯示了兩個框架的 HuggingFace 模型可用情況。從圖中看出,HuggingFace 中大約有 85% 的模型只能在 PyTorch 上用,剩下的模型還有一半也可以在 PyTorch 上用。相比之下,只有 16% 的模型能在 TensorFlow 上用,只有 8% 是 TensorFlow 所獨有的。
如果把范圍縮小到 HuggingFace 上最受歡迎的 30 個模型,我們可以看到類似的結果。在這 30 個模型中,能在 TensorFlow 上用的還不到 2/3,但能在 PyTorch 上用的卻達到了 100%,沒有哪個模型只能在 TensorFlow 上用。
對于研究者來說,從最近發(fā)表的論文中獲取模型是非常重要的,它可以讓你專注于其他重要的工作。嘗試在不同的框架中重新創(chuàng)建新的模型會浪費寶貴的時間。考慮到 PyTorch 實際上是一個研究型框架,作者預期在 HuggingFace 上觀察到的趨勢會蔓延至整個社區(qū),結果不出所料。如下圖所示,作者匯總了 8 個頂級研究期刊上的論文在過去幾年里的框架采用情況。結果顯示,PyTorch 的采用率增長迅速,幾年時間就從原來的 7% 長到了近 80%。
PyTorch 的這種增長勢頭很大程度上是拜 TensorFlow 所賜。很多轉向 PyTorch 的研究者都表示 TensorFlow 1 太難用了。盡管 2019 年發(fā)布的 TensorFlow 2 改掉了一些問題,但彼時,PyTorch 的增長勢頭已經(jīng)難以遏制。如果看一下那些中途換框架的研究者的比例,我們也可以得出類似的結論。如下圖所示,在 2018 年還在用 TensorFlow 的論文作者中,有 55% 的人在 2019 年轉向了 PyTorch,但 2018 年就在用 PyTorch 的人有 85% 都留了下來。
最后我們來看一下 Papers with Code 網(wǎng)站。在這一部分,作者繪制了使用 PyTorch、TensorFlow 或其他框架的論文隨時間變化的比例。從中可以看出,使用 PyTorch 的論文在穩(wěn)步增長:在本季度創(chuàng)建的 4500 個庫中,有 60% 是在 PyTorch 中實現(xiàn)的,只有 11% 是在 TensorFlow 中實現(xiàn)的。相比之下,TensorFlow 的使用率在穩(wěn)步下降,2019 年 TensorFlow 2 的發(fā)布也沒有扭轉這一趨勢。
從以上數(shù)據(jù)可以明顯看出,PyTorch 目前在研究領域占據(jù)主導地位。雖然 TensorFlow 2 解決了研究者使用該框架進行研究的一些痛點,但 PyTorch 卻沒有給研究者回頭的理由。此外,TensorFlow 兩大版本之間的向后兼容性問題只會讓這種趨勢愈演愈烈。Google AI:谷歌發(fā)布的論文自然會用 TensorFlow。鑒于在論文方面谷歌比 Facebook 更高產(chǎn),一些研究者可能會發(fā)現(xiàn)掌握 TensorFlow 還是很有用的。DeepMind:DeepMind 也用 TensorFlow,而且也比 Facebook 高產(chǎn)。他們創(chuàng)建了一個名叫 Sonnet 的 TensorFlow 高級 API,用于研究目的。有人管這個 API 叫「科研版 Keras」,那些考慮用 TensorFlow 做研究的人可能會用到它。此外,DeepMind 的 Acme 框架可能對于強化學習研究者很有用。OpenAI:OpenAI 在 2020 年宣布了全面擁抱 PyTorch 的決定。但他們之前的強化學習基線庫都是在 TensorFlow 上部署的。基線提供了高質量強化學習算法的實現(xiàn),因此 TensorFlow 可能還是強化學習從業(yè)者的最佳選擇。JAX:谷歌還有另一個框架——JAX,它在研究社區(qū)中越來越受歡迎。與 PyTorch 和 TensorFlow 相比,JAX 的開銷要小得多。但同時,JAX 和前兩個框架差別也很大,因此遷移到 JAX 對于大多數(shù)人來說可能并不是一個好選擇。目前,有越來越多的模型 / 論文已經(jīng)在用 JAX,但未來幾年的趨勢依然不甚明朗。所以總體來看,在第一輪(模型可用性)的對比中,PyTorch 完勝。從一開始,TensorFlow 就是一個面向部署的首選框架,因為它有一系列可以提高端到端深度學習效率的工具,比如 TensorFlow Serving 和 TensorFlow Lite。相比之下,PyTorch 在部署方面一度表現(xiàn)平平,但近年來,它也在努力縮小這一差距。去年推出的 TorchServe 和前幾周推出的 PyTorch Live 為用戶提供了急需的本地部署工具。但二者之間的差距還有多大?我們來看進一步的分析。TensorFlow 有靜態(tài)圖,可以優(yōu)化推理性能。當使用 TensorFlow 部署模型時,你可以根據(jù)具體應用選擇使用 TensorFlow Serving 或 TensorFlow Lite。TensorFlow Serving 用于在服務器上部署 TensorFlow 模型,無論是在內部還是在云上,并在 TensorFlow Extended(TFX)端到端機器學習平臺中使用。Serving 使得用模型標記(model tag)將模型序列化到定義良好的目錄中變得很容易,并且可以選擇在保持服務器架構和 API 靜態(tài)的情況下使用哪個模型來進行推理請求。Serving 可以幫用戶輕松地在 gRPC ?服務器上部署模型,這些服務器運行谷歌為高性能 RPC 打造的開源框架。gRPC 的設計意圖是連接不同的微服務生態(tài)系統(tǒng),因此這些服務器非常適合模型部署。Serving 通過 Vertex AI 和 Google Cloud 緊密地集成在一起,還和 Kubernetes 以及 Docker 進行了集成。TensorFlow Lite 用于在移動或物聯(lián)網(wǎng) / 嵌入式設備上部署 TensorFlow 模型。TFLite 對這些設備上的模型進行了壓縮和優(yōu)化,并解決了設備上的 AI 的 5 個約束——延遲、連接、隱私、大小和功耗。可以使用相同的 pipeline 同時導出基于標準 Keras 的 SavedModels(和 Serving 一起使用)和 TFLite 模型,這樣就能比較模型的質量。TFLite 可用于 Android、iOS、微控制器和嵌入式 Linux。TensorFlow 針對 Python、Java、C++、JavaScript 和 Swift 的 API 為開發(fā)人員提供了廣泛的語言選項。PyTorch 在簡化部署方面有所投入。以前,PyTorch 用戶需要使用 Flask 或 Django 在模型之上構建一個 REST API,但現(xiàn)在他們有了 TorchServe 和 PyTorch Live 的本地部署選項。TorchServe 是 AWS 和 Facebook 合作的開源部署框架,于 2020 年發(fā)布。它具有端點規(guī)范、模型歸檔和指標觀測等基本功能,但仍然不如 TensorFlow。TorchServe 同時支持 REST 和 gRPC API。PyTorch 于 2019 年首次發(fā)布 PyTorch Mobile,旨在為部署優(yōu)化的機器學習模型創(chuàng)建端到端工作流,適用于 Android、iOS 和 Linux。PyTorch Live 于 12 月初發(fā)布,以移動平臺為基礎。它使用 JavaScript 和 React Native 來創(chuàng)建帶有相關 UI 的跨平臺 iOS 和 Android AI 應用。設備上的推理仍然由 PyTorch Mobile 執(zhí)行。Live 提供了示例項目來輔助入門,并計劃在未來支持音頻和視頻輸入。目前,TensorFlow 依然在部署方面占有優(yōu)勢。Serving 和 TFLite 比 PyTorch 的同類型工具要穩(wěn)健一些。而且,將 TFLite 與谷歌的 Coral 設備一起用于本地 AI 的能力是許多行業(yè)的必備條件。相比之下,PyTorch Live 只專注于移動平臺,而 TorchServe 仍處于起步階段。因此綜合來看,第二輪(部署便捷性)的勝出者是 TensorFlow。如果你既想用 TensorFlow 的部署基礎設施,又想訪問只能在 PyTorch 中使用的模型,作者推薦使用 ONNX 將模型從 PyTorch 移植到 TensorFlow。生態(tài)系統(tǒng)對比:TensorFlow 勝出2022 年,將 PyTorch 和 TensorFlow 分開考慮,一個重要的因素是它們所處的生態(tài)系統(tǒng)不同。PyTorch 和 TensorFlow 都提供了易于部署、管理、分布式訓練的工具,從建模的角度講都是能力很強的框架。相比之下,它們在生態(tài)系統(tǒng)方面的差異更重要。PyTorch Hub 作為面向研究的官方平臺,用于與預訓練模型共享存儲庫。Hub 擁有廣泛類別的模型,包括用于音頻、視覺、NLP 任務的模型,還有用于生成任務的 GAN 模型。SpeechBrain 是 PyTorch 的官方開源語音工具包。SpeechBrain 能夠完成自動語音識別(ASR)、說話人識別、驗證和分類等任務。如果你不想構建任何模型,而是想要一個具有情感分析、實體檢測等功能的即插即用工具,你可以選擇使用 AssemblyAI 的 Speech-to-Text API。當然,PyTorch 的工具頁面還有很多其他有用的庫,包括為計算機視覺和自然語言處理量身定制的庫,例如 fast.ai。TorchElastic 是 AWS 和 Facebook 2020 年聯(lián)合發(fā)布的分布式訓練工具,可管理工作進程并協(xié)調重啟行為,以便用戶在計算節(jié)點集群上訓練模型,這些節(jié)點可以動態(tài)變化而不會影響訓練。因此,TorchElastic 可防止因服務器維護或網(wǎng)絡問題等導致的災難性故障,不會丟失訓練進度。TorchElastic 具有與 Kubernetes 集成的特性,并已集成到 PyTorch 1.9+ 中。TorchX 是一個用于快速構建和部署機器學習應用程序的 SDK。TorchX 包括 Training Session Manager API,可在支持的調度程序上啟動分布式 PyTorch 應用程序。TorchX 負責啟動分布式作業(yè),同時原生支持由 TorchElastic 局部管理的作業(yè)。PyTorch Lightning 有時被稱為 PyTorch 的 Keras。雖然這種類比并不準確,但 Lightning 的確是簡化 PyTorch 中模型工程和訓練過程的有用工具,自 2019 年首次發(fā)布以來已經(jīng)逐漸趨于成熟。Lightning 以面向對象的方式處理建模過程,定義了可重用和可跨項目使用的可共享組件。TensorFlow Hub 是一個經(jīng)過訓練的機器學習模型庫,可以進行微調,讓用戶只需幾行代碼就能使用像 BERT 這樣的模型。Hub 包含適用于不同用例的 TensorFlow、TensorFlow Lite 和 TensorFlow.js 模型,可用于圖像、視頻、音頻和文本處理。如果現(xiàn)成的預訓練模型不適用于用戶的應用,那么 TensorFlow 的存儲庫 Model Garden 可以提供 SOTA 模型的源代碼。對于想要深入了解模型工作原理,或根據(jù)自己的需要修改模型的用戶,Model Garden 將非常有用。Model Garden 包含谷歌維護的官方模型、研究人員維護的研究模型和社區(qū)維護的精選社區(qū)模型。TensorFlow 的長期目標是在 Hub 上提供來自 Model Garden 的模型的預訓練版本,并使 Hub 上的預訓練模型在 Model Garden 中具有可用的源代碼。TensorFlow Extended 是 TensorFlow 用于模型部署的端到端平臺。該平臺的功能強大,包括:加載、驗證、分析和轉換數(shù)據(jù);訓練和評估模型;使用 Serving 或 Lite 部署模型;跟蹤 artifact 及其依賴項。TFX 還可以與 Jupyter 或 Colab 一起使用,并且可以使用 Apache Airflow/Beam 或 Kubernetes 進行編排。TFX 與 Google Cloud 緊密集成,可與 Vertex AI Pipelines 一起使用。Vertex AI 是 Google Cloud 今年剛剛發(fā)布的統(tǒng)一機器學習平臺,旨在統(tǒng)一 GCP、AI Platform 和 AutoML,成為一個平臺。Vertex AI 能夠以無服務器方式編排工作流,幫助用戶自動化、監(jiān)控和管理機器學習系統(tǒng)。Vertex AI 還可以存儲工作流的 artifact,讓用戶可以跟蹤依賴項和模型的訓練數(shù)據(jù)、超參數(shù)和源代碼。盡管有各種各樣的 SaaS 公司依賴基于云的人工智能,但許多行業(yè)對本地人工智能的需求也在不斷增長,Google Coral 就是為了滿足這一需求而創(chuàng)建的。Coral 是一個完整的工具包,可以使用本地 AI 構建產(chǎn)品。Coral 于 2020 年發(fā)布,解決了部署部分 TFLite 中提到的實現(xiàn)板載 AI 的問題,克服了隱私和效率等方面的困難。Coral 提供了一系列用于原型設計、生產(chǎn)和傳感的硬件產(chǎn)品,其中一些本質上是增強型的樹莓派,專為 AI 應用程序創(chuàng)建,能夠利用 Edge TPU 在低功耗設備上進行高性能推理。Coral 還提供用于圖像分割、姿態(tài)估計、語音識別等任務的預編譯模型,為希望創(chuàng)建本地 AI 系統(tǒng)的開發(fā)人員提供支持。創(chuàng)建模型的基本步驟如下面的流程圖所示。
TensorFlow.js 是一個用于機器學習的 JavaScript 庫,允許用戶使用 Node.js 在瀏覽器和服務器端訓練和部署模型。TensorFlow Cloud 是一個可以將本地環(huán)境連接到 Google Cloud 的庫,它的 API 旨在彌補本地機器上模型構建和調試與 GCP 上分布式訓練和超參數(shù)調整之間的差距,而無需使用 Cloud Console。Google Colab 是一個基于云的 notebook 環(huán)境,與 Jupyter 非常相似。Colab 易于連接到 Google Cloud 進行 GPU 或 TPU 訓練,并且 Colab 還可以和 PyTorch 一起使用。Playground 是一個小而精致的可視化工具,用于幫助用戶理解神經(jīng)網(wǎng)絡的基礎知識。要戶可以更改 Playground 內置神經(jīng)網(wǎng)絡的層數(shù)和大小,以實時查看神經(jīng)網(wǎng)絡是如何學習特征的,用戶還可以看到改變學習率和正則化強度等超參數(shù)如何影響不同數(shù)據(jù)集的學習過程。Playground 允許實時播放學習過程,以高度直觀的方式查看輸入在訓練過程中是如何轉換的。Playground 還提供了一個開源的小型神經(jīng)網(wǎng)絡庫,是它自身的構建基礎,用戶能夠查看其源代碼的具體細節(jié)。谷歌研究院的 Datasets 是谷歌定期發(fā)布的數(shù)據(jù)集的整合資源。谷歌還提供了數(shù)據(jù)集搜索以訪問更廣泛的數(shù)據(jù)集資源。當然,PyTorch 用戶也可以利用這些數(shù)據(jù)集。總的來說,盡管 PyTorch 和 TensorFlow 有很多相似和共享的資源,但在生態(tài)系統(tǒng)方面,終究是 TensorFlow 更勝一籌。谷歌投入巨資確保深度學習的每個相關領域都有完善的產(chǎn)品。與 Google Cloud 和 TFX 的緊密集成使端到端的開發(fā)過程變得輕而易舉,而將模型移植到 Google Coral 設備的便利性讓 TensorFlow 在某些行業(yè)取得了壓倒性的勝利。我應該選 PyTorch 還是 TensorFlow?正如期望的那樣,PyTorch 與 TensorFlow 還沒有決出明確的勝負。只能說,某一個框架在特定用例方面是優(yōu)于另一個框架的。為了幫助讀者做出選擇,作者匯總了一些建議。在下面的流程圖中,每個圖表都針對不同的興趣領域量身定制。
如果在工業(yè)界執(zhí)行深度學習工程任務,你很可能會使用 TensorFlow,并且應該堅持使用它。對于需要將模型投入生產(chǎn)的人來說,TensorFlow 強大的部署框架和端到端的 TensorFlow Extended 平臺是很珍貴的。能在 gRPC 服務器上進行輕松部署以及模型監(jiān)控和工件跟蹤是行業(yè)應用的關鍵。鑒于 PyTorch 最近發(fā)布了 TorchServe,如果你需要訪問僅在 PyTorch 中可用的 SOTA 模型,那也可以考慮使用 PyTorch。在這種情況下,請考慮使用 ONNX 在 TensorFlow 的部署工作流中部署轉換后的 PyTorch 模型。如果你正在構建移動應用,鑒于 PyTorch 最近發(fā)布了 PyTorch Live,可以考慮使用 PyTorch。如果你需要音頻或視頻輸入,在這種情況下還是應該使用 TensorFlow。如果你正在構建使用 AI 的嵌入式系統(tǒng)或 IoT 設備,鑒于 TFLite + Coral 生態(tài)系統(tǒng),你仍然應該使用 TensorFlow。總之,在工業(yè)界,如果必須選擇一種框架,請選擇 TensorFlow。
如果是一名研究人員,你大概率會使用 PyTorch,你應該堅持使用它,大多數(shù) SOTA 模型都適用于 PyTorch。當然,這條規(guī)則有幾個值得注意的例外,最值得注意的是:強化學習領域的一些研究應該考慮使用 TensorFlow。TensorFlow 有一個用于強化學習的原生 Agents 庫,并且 DeepMind 的 Acme 框架是在 TensorFlow 中實現(xiàn)的。OpenAI 的 baseline 模型存儲庫也是在 TensorFlow 中實現(xiàn)的,盡管 OpenAI 的 Gym 在 TensorFlow 或 PyTorch 中都能使用。如果你打算使用 TensorFlow 進行研究,還應該查看 DeepMind 的 Sonnet 以獲得更高級別的抽象。如果不想使用 TensorFlow,比如你正在做 TPU 訓練,那么應該考慮探索谷歌的 JAX。JAX 本身不是神經(jīng)網(wǎng)絡框架,而是更接近于具有自動微分能力的 GPU/TPU 的 NumPy 實現(xiàn)。DeepMind 的 Haiku,被稱為「Sonnet for JAX」,是一個建立在 JAX 之上的神經(jīng)網(wǎng)絡庫,如果你正在考慮 JAX,那么 Haiku 值得你去探索。如果你不進行 TPU 訓練,那最好是堅持使用 PyTorch。無論選擇哪種框架,你都應該在 2022 年密切關注 JAX。總之,在學術界,如果需要選擇一個框架,請選擇 PyTorch。
如果你是一位教授,在深度學習課程中使用哪種框架取決于每一門課程的目標。如果課程的重點是培養(yǎng)具備行業(yè)技能的深度學習工程師,讓他們可以勝任整個端到端深度學習任務,而不僅僅是掌握深度學習理論,那么你應該使用 TensorFlow。在這種情況下,接觸 TensorFlow 生態(tài)系統(tǒng)及其工具以及端到端的實踐項目將非常有價值。如果課程的重點是深度學習理論和理解深度學習模型的底層原理,那么應該使用 PyTorch。如果你正在教授讓學生為深度學習研究做好準備的高級本科課程或早期研究生課程,那你更應該選 PyTorch。理想情況下,學生應該接觸每個框架,盡管單個學期的時間有限,但花一些時間來了解框架之間的差異可能很有價值。如果課程是機器學習大型課程的一部分,其中有許多課程專門針對不同的主題,最好堅持使用最適合課程材料的框架,而不是嘗試同時接觸兩者。
如果想在職業(yè)生涯中尋求一些轉變,PyTorch 或 TensorFlow 都是不錯的選擇。在這種情況下,你可以做的最重要的事情是證明自己可以帶來額外價值,因此擁有復合項目經(jīng)驗至關重要。將深度學習應用于創(chuàng)造性用例來打破常規(guī),或者通過端到端的項目表明自己已做好迎接行業(yè)的準備,都能讓自己處于不敗之地。因此,建議使用可以讓你工作更輕松的任何框架,這比熟悉特定框架的 API 重要得多。話雖如此,如果你對框架完全不熟悉,請使用 TensorFlow,因為它是首選的行業(yè)框架。下圖中匯總了各種職業(yè)網(wǎng)站的每個框架職位的發(fā)布數(shù)量,TensorFlow 遠遠超過了 PyTorch。
總之,如果你有使用 PyTorch 的特定原因,例如為 OpenAI 工作,或者使用 TensorFlow 對你來說非常不直觀,那么請隨意。但一般的建議是專注于 TensorFlow。
如果你是個深度學習愛好者,那么你使用的框架將取決于你的目標。如果將深度學習模型作為某個較大項目的一部分來實施,那么 TensorFlow 可能是你想要使用的,尤其是在部署到物聯(lián)網(wǎng) / 嵌入式設備時。鑒于 PyTorch Live 已經(jīng)發(fā)布,你可以將 PyTorch 用于移動應用,但目前 TensorFlow + TFLite 仍然是首選方法。如果你的目標是為了使用深度學習而學習,那使用哪種框架取決于你的背景。一般來說,PyTorch 可能是更好的選擇,特別是如果你一直習慣使用 Python 工作。
如果你是一個對深度學習感興趣并且只是想入門的初學者,建議使用 Keras。利用其高級組件,你可以輕松地開始了解深度學習的基礎知識。不過,一旦準備更深入地了解深度學習的具體細節(jié),你會面臨幾個選擇:如果你不想安裝新框架,并且擔心能否適應新的 API,那可以嘗試從 Keras 「下降」到 TensorFlow。如果 TensorFlow 令你困惑,請嘗試轉向 PyTorch。如果你想要一個更像 Python 的框架,那么遷移到 PyTorch 可能是你最好的選擇。在這種情況下,必須安裝新框架并可能重寫自定義腳本。此外,如果 PyTorch 對你來說有點麻煩,你可以使用 PyTorch Lightning 劃分你的代碼并擺脫一些樣板。如果你是一個完完全全的初學者,可以考慮觀看一些 TensorFlow 和 PyTorch 的 YouTube 教程,以確定哪個框架對自己來說更直觀。PyTorch 與 TensorFlow 之爭是一場微妙的辯論,格局一直在不斷變化。至少在 2022 年,PyTorch 和 TensorFlow 都已經(jīng)是非常成熟的框架,二者的核心深度學習功能重疊明顯。今天,考慮每個框架的實際因素,比如它們的模型可用性、部署時間和相關的生態(tài)系統(tǒng),都比只討論它們的技術差異更有意義。選擇任一框架都不會出錯,因為它們都有完備的文檔、學習資源和活躍的社區(qū)。希望你能選到最適合的那一個框架。原文鏈接:https://www.assemblyai.com/blog/pytorch-vs-tensorflow-in-2022/
長按或掃描下方二維碼,后臺回復:加群,即可申請入群。一定要備注:來源+研究方向+學校/公司,否則不拉入群中,見諒!
(長按三秒,進入后臺)