誰是深度學(xué)習(xí)框架一哥?2022年,PyTorch和TensorFlow再爭霸
你用PyTorch還是用TensorFlow?
對(duì)于不同人群可能有不同的答案,科研人員可能更偏愛PyTorch,因其簡單易用,能夠快速驗(yàn)證idea來搶占先機(jī)發(fā)論文。
雖然TensorFlow的差評(píng)如海,甚至有用戶專門注冊(cè)一個(gè)GitHub賬號(hào)開個(gè)issue來罵TensorFlow,但TensorFlow在工業(yè)界大哥的地位PyTorch仍然無法撼動(dòng)。

所以,進(jìn)入2022年,你決定用PyTorch還是TensorFlow?
曠日持久的甜咸之爭
早在2015年11月9日,TensorFlow依據(jù)阿帕奇授權(quán)協(xié)議(Apache 2.0 open source license)就開放了源代碼,其前身是谷歌的神經(jīng)網(wǎng)絡(luò)算法庫DistBelief。TensorFlow是一個(gè)基于數(shù)據(jù)流編程(dataflow programming)的符號(hào)數(shù)學(xué)系統(tǒng),被廣泛應(yīng)用于各類機(jī)器學(xué)習(xí)(machine learning)算法的編程實(shí)現(xiàn)。
到了2017年1月,由Facebook人工智能研究院(FAIR,現(xiàn)在是MAIR)基于Torch推出了PyTorch,主要提供兩個(gè)高級(jí)功能:
- 具有強(qiáng)大的GPU加速的張量計(jì)算(如NumPy)
- 包含自動(dòng)求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)
最近Reddit上關(guān)于TensorFlow和PyTorch的討論又引起了網(wǎng)友的關(guān)注。
題主表示,兩個(gè)框架和他們對(duì)應(yīng)的兩種生態(tài)系統(tǒng)發(fā)展的都是如此迅速,每個(gè)陣營都有自己的狂熱支持者,也許是時(shí)候分析一下他們到底有什么不同了。
目前來說,PyTorch仍然是「研究型」框架,TensorFlow仍然是「工業(yè)型」框架,他們之間的爭論主要可以歸結(jié)為三個(gè)因素:模型可用性、模型部署、軟件生態(tài)。
模型可用性
隨著深度學(xué)習(xí)領(lǐng)域的逐年擴(kuò)大,模型也變得越來越大,從頭開始訓(xùn)練sota模型的成本太高,微調(diào)已經(jīng)成為新主流。所以公開的sota模型采用什么框架對(duì)于后續(xù)的社區(qū)生態(tài)來說很重要。
在模型可用性方面,PyTorch 和 TensorFlow 分歧很大,PyTorch 和 TensorFlow 都有自己的官方模型存儲(chǔ)庫,但從業(yè)者可能希望利用多個(gè)來源的模型。
目前,PyTorch明顯在研究領(lǐng)域已經(jīng)贏麻木了,大部分科研人員都在用,并且大多數(shù)出版論文和開源模型都在使用 PyTorch。
將過去幾年八種頂級(jí)研究期刊的數(shù)據(jù)匯總以后可以看到,PyTorch越來越普遍,并且在短短幾年內(nèi),論文中的使用率從大約 7% 增長到近 80%。

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

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

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

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

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

SpeechBrain是 PyTorch 的官方開源語音工具包,支持 ASR、說話人識(shí)別、驗(yàn)證和分類等。如果您不想構(gòu)建任何模型,而是想要一個(gè)具有自動(dòng)章節(jié)、情感分析、實(shí)體檢測(cè)等功能的即插即用工具,也是十分方便!
PyTorch Lightning有時(shí)被稱為 PyTorch 的 Keras,可以簡化 PyTorch 中模型工程和訓(xùn)練過程,自 2019 年首次發(fā)布以來,已經(jīng)逐漸成熟。Lightning 以面向?qū)ο蟮姆绞教幚斫_^程,定義了一些可重用和可跨項(xiàng)目使用的共享組件。
還有分布式訓(xùn)練工具TorchElastic,可管理工作進(jìn)程并協(xié)調(diào)重啟行為,以便用戶可以在計(jì)算節(jié)點(diǎn)集群上訓(xùn)練模型,這些節(jié)點(diǎn)可以動(dòng)態(tài)變化而不會(huì)影響訓(xùn)練,還可防止因服務(wù)器維護(hù)事件或網(wǎng)絡(luò)問題等問題而導(dǎo)致的宕機(jī),并且不會(huì)因此丟失訓(xùn)練進(jìn)度。
TorchX是一個(gè)用于快速構(gòu)建和部署機(jī)器學(xué)習(xí)應(yīng)用程序的 SDK。TorchX 包括 Training Session Manager API,可將分布式 PyTorch 應(yīng)用程序啟動(dòng)到受支持的調(diào)度程序上。它負(fù)責(zé)啟動(dòng)分布式作業(yè),同時(shí)原生支持由 TorchElastic本地管理的作業(yè)。

在TensorFlow陣營,TensorFlow Hub是一個(gè)經(jīng)過訓(xùn)練的機(jī)器學(xué)習(xí)模型庫,可以進(jìn)行微調(diào),用戶只需幾行代碼就可以使用像 BERT 這樣的模型,Hub中包含適用于不同用例的 TensorFlow、TensorFlow Lite 和 TensorFlow.js 模型,模型可用于圖像、視頻、音頻和文本問題。

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

TensorFlow.js是一個(gè)用于機(jī)器學(xué)習(xí)的 JavaScript 庫,允許您使用 Node.js 在瀏覽器和服務(wù)器端訓(xùn)練和部署模型。
TensorFlow Cloud可讓用戶將本地環(huán)境連接到 Google Cloud。提供的 API 能夠彌補(bǔ)從本地機(jī)器上的模型構(gòu)建和調(diào)試到 GCP 上的分布式訓(xùn)練和超參數(shù)調(diào)整之間的差距,而無需使用 Cloud Console。
Google Colab是一個(gè)基于云的筆記本環(huán)境,與 Jupyter 非常相似。將 Colab 連接到 Google Cloud 進(jìn)行 GPU 或 TPU 訓(xùn)練很容易,并且PyTorch 也可以與 Colab 一起使用。
三項(xiàng)對(duì)此完,這兩個(gè)框架可以說是神仙打架了,各有優(yōu)劣。
但評(píng)論區(qū)也有網(wǎng)友表示,我一只腳踏入工業(yè)界,但另一只腳還在學(xué)術(shù)界,不過我在教課的時(shí)候還是選擇PyTorch,因?yàn)門F太不可靠了,接口總是變,尤其是從TF1遷移到TF2的時(shí)候。
并且在公司也同樣使用PyTorch,因?yàn)殪`活性更重要。

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

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



























