TensorFlow VS PyTorch下的深度學(xué)習(xí)框架之爭

姓名:韓宜真

學(xué)號(hào):17020120095

轉(zhuǎn)載自:https://mp.weixin.qq.com/s?__biz=MzI4Mzc5NjI3MQ==&mid=2247500171&idx=2&sn=923f16496a2e5a039e351634bb5f394c&chksm=eb87b7cbdcf03eddd95a94b459a8ba7f2c16f1fe14389337e9746e02b192c4a0d365df33345a&mpshare=1&scene=23&srcid=1216wc8SuKoT2AaL85EGpvZi&sharer_sharetime=1608098252873&sharer_shareid=3f1a3081900d54d7638a82ca5b9e8a0d#rd

【嵌牛導(dǎo)讀】本文介紹了兩種深度學(xué)習(xí)框架。

【嵌牛鼻子】TensorFlow? PyTorch

【嵌牛提問】 這兩種深度學(xué)習(xí)框架是什么?

【嵌牛正文】

對(duì)于廣大深度學(xué)習(xí)行業(yè)從業(yè)者而言,熟練掌握一種或多種深度學(xué)習(xí)框架,是日常煉丹的必備技能之一。深度學(xué)習(xí)框架市場經(jīng)歷了早期的混亂之后,逐漸形成了以 TensorFlow 和 PyTorch 兩家獨(dú)大的市場格局。

圖1是2019年各深度學(xué)習(xí)框架的綜合得分對(duì)比。可以看到,雖然過去一年之中PyTorch 發(fā)展勢頭迅猛,但 TensorFlow 仍然牢牢占據(jù)市場頭名。隨著2.0版本將 Keras 作為前端框架進(jìn)行集成,TensorFlow 在未來相當(dāng)長一段時(shí)間內(nèi)都會(huì)作為老大哥而存在。

回顧過去兩年 TensorFlow 和 PyTorch 的發(fā)展特點(diǎn)來看,TensorFlow 雖然由于各種原因在丟失一些市場份額,但在工業(yè)界落地中仍然是當(dāng)仁不讓的選擇。但在學(xué)術(shù)論文和研究領(lǐng)域,PyTorch 卻逐漸占據(jù)主導(dǎo)地位。

就國內(nèi)而言,這兩年深度學(xué)習(xí)市場的一個(gè)顯著特征是,國產(chǎn)深度學(xué)習(xí)框架開始多了起來。百度的飛槳、曠視的天元、清華的計(jì)圖以及華為的MindSpore等。在世界范圍內(nèi)深度學(xué)習(xí)框架競爭趨于穩(wěn)定的情況下,國產(chǎn)框架能在這兩年集中爆發(fā),不得不說是一個(gè)令人欣慰的現(xiàn)象。

PyTorch在學(xué)術(shù)界占主導(dǎo)地位

我們通過實(shí)際數(shù)據(jù)來看一下。下圖顯示了在近些年的研究頂會(huì)中,僅僅使用了 PyTorch 框架進(jìn)行研究的論文數(shù)和使用了 TensorFlow 或 PyTorch 的論文總數(shù)的比例。如圖所示,每條曲線(代表不同的會(huì)議)都向上傾斜(意味著 PyTorch 的占比越來越高),而且在 2019 年的每個(gè)主要的會(huì)議中,大多數(shù)的論文都采用 PyTorch 實(shí)現(xiàn)。

會(huì)議的圖例

數(shù)據(jù)收集過程的細(xì)節(jié)

圖表來源:https://chillee.github.io/pytorch-vs-tensorflow/

如果你需要更多的證據(jù)來說明 PyTorch 在研究社區(qū)中獲得關(guān)注的速度有多快,請(qǐng)看下面關(guān)于 PyTorch 和 TensorFlow 使用情況的原始統(tǒng)計(jì)圖。

在 2018 年,PyTorch 在深度學(xué)習(xí)框架中的占比還很小。而現(xiàn)在,PyTorch 已成占據(jù)壓倒性比重的多數(shù)。據(jù)統(tǒng)計(jì):69% 的 CVPR 論文、75% 以上的 NAACL 和 ACL 論文,以及 50% 以上的 ICLR 和 ICML 論文都選擇使用 PyTorch。PyTorch 在視覺和語言類的會(huì)議上(分別以 2:1 和 3:1 的比例超過了 TensorFlow)被使用的頻繁度最為明顯,而且 PyTorch 在ICLR 和ICML 等通用機(jī)器學(xué)習(xí)會(huì)議上也比 TensorFlow 更受歡迎。

雖然有些人認(rèn)為 PyTorch 仍然是一個(gè)處于萌芽期的框架,試圖在 TensorFlow 主導(dǎo)的世界中開辟出一片市場,但真實(shí)的數(shù)據(jù)卻說明事實(shí)并非如此。除了在 ICML 上,其它學(xué)術(shù)會(huì)議中使用 TensorFlow 的論文的增長率甚至還趕不上整體論文數(shù)量的增長率。在 NAACL、ICLR 和 ACL 上,今年使用 TensorFlow 的論文數(shù)量實(shí)際上比去年還少。這么看來,TensorFlow?確實(shí)需要對(duì)未來發(fā)展緊張起來。

1、為什么研究人員青睞 PyTorch?

簡潔性。PyTorch 與 numpy 很相似,具有很強(qiáng)的 python 風(fēng)格,并且很容易與 Python 生態(tài)系統(tǒng)中的其它組件實(shí)現(xiàn)集成。例如,你可以簡單地在 PyTorch 模型中的任何地方添加「PDB」斷點(diǎn),然后就可以進(jìn)行調(diào)試。在 TensorFlow 框架中,想要進(jìn)行程序調(diào)試就需要一個(gè)運(yùn)行中的會(huì)話,這使得調(diào)試難以進(jìn)行。

易用的應(yīng)用程序接口(API)。相較于 TensorFlow 的 API,大多數(shù)研究人員更喜歡 PyTorch 提供的 API。這在一定程度上是由于 PyTorch 的設(shè)計(jì)更好,另一方面是因?yàn)?TensorFlow 需要多次切換 API(例如,「layers」->「slim」->「estimators」->「tf.keras」)從而限制了自己的易用性。

卓越的性能。盡管 PyTorch 的動(dòng)態(tài)圖留給我們優(yōu)化的機(jī)會(huì)很少,但是已經(jīng)有很多有趣的報(bào)道說明 PyTorch 的運(yùn)行速度和 TensorFlow 一樣快(https://www.reddit.com/r/MachineLearning/comments/cvcbu6/d_why_is_pytorch_as_fast_as_and_sometimes_faster/),甚至更快(https://arxiv.org/abs/1608.07249)。目前尚不清楚這種說法是否屬實(shí),但至少,TensorFlow 在這個(gè)方面并沒有獲得絕對(duì)的優(yōu)勢。

2、TensorFlow 在研究領(lǐng)域的前景如何?

即使 TensorFlow 在功能方面與 PyTorch 的水平差不多,但是 PyTorch 已經(jīng)擁有了研究社區(qū)中的大多數(shù)用戶。這意味著我們更容易找到 PyTorch 版本的算法實(shí)現(xiàn),而作者也會(huì)更有動(dòng)力發(fā)布 PyTorch版本的代碼(這樣人們就會(huì)使用它),而你的合作者們很可能也更喜歡 PyTorch。因此,如果將代碼移植回 TensorFlow 2.0 平臺(tái),這將會(huì)是一個(gè)很漫長的過程(如果真的這么做了)。

TensorFlow 在 Google/DeepMind 內(nèi)部總會(huì)有一批固定的用戶,但我不知道 Google 最終是否會(huì)放開這一點(diǎn)。即使是現(xiàn)在,很多 Google 想要招募的研究人員已經(jīng)在不同程度上更加青睞 PyTorch 了。我也聽到了一些抱怨,很多 Google 內(nèi)部的研究人員希望使用 TensorFlow 以外的框架。

此外,PyTorch 的統(tǒng)治地位可能會(huì)開始切斷 Google 研究人員與其它研究社區(qū)之間的聯(lián)系。不僅 Google的研究人員將更加難以在他人研究的基礎(chǔ)上構(gòu)建自己的工作,而且外部的研究人員也不太可能基于 Google 發(fā)布的代碼開展工作。

TensorFlow 2.0 是否能夠?yàn)?TensorFlow 挽回一部分研究人員用戶還有待觀察。盡管它的動(dòng)態(tài)圖模式(TensorFlow 2.0 的動(dòng)態(tài)圖模式)一定很吸引人,但是 Keras 的 API 就并非如此了。

TensorFlow仍然是工業(yè)落地首選

雖然 PyTorch 現(xiàn)在在研究領(lǐng)域占據(jù)主導(dǎo)地位,但是我們快速分析一下工業(yè)界的情況就會(huì)發(fā)現(xiàn),在工業(yè)界 TensorFlow 仍然是主流的框架。例如,2018 年到 2019 年的數(shù)據(jù)顯示,在公開招聘網(wǎng)站上,涉及 TensorFlow 的新招聘信息有 1541 個(gè),而涉及 PyTorch 的新招聘信息則是 1437 個(gè);知名科技媒體「Medium」上有 3230 篇關(guān)于 TensorFlow 的新文章,而關(guān)于 PyTorch 的新文章只有 1200 篇;在 GitHub 上,用 TensorFlow 編寫的項(xiàng)目獲得了 13700 顆星,而用 PyTorch 編寫的項(xiàng)目只獲得了 7200 顆星。

那么,既然 PyTorch 在研究人員中是如此受歡迎,為什么它在工業(yè)界還沒有取得同樣的成功呢?第一個(gè)顯而易見的答案就是:慣性。TensorFlow 比 PyTorch 早誕生數(shù)年,而且工業(yè)界采用新技術(shù)的速度比研究人員要慢一些。另一個(gè)原因是:TensorFlow 比 PyTorch 更適用于生產(chǎn)環(huán)境。但這意味著什么呢?

要想回答這個(gè)問題,我們需要知道研究人員和工業(yè)界的需求有何不同。

研究人員關(guān)心的是他們?cè)谘芯恐械乃俣扔卸嗫?,這通常是在相對(duì)較小的數(shù)據(jù)集(可以在一臺(tái)機(jī)器上運(yùn)行的數(shù)據(jù)集)上、使用少于 8 個(gè) GPU 進(jìn)行的。最大的限制因素往往不是出于性能的考慮,而是他們快速實(shí)現(xiàn)新思路的能力。相反,工業(yè)界認(rèn)為性能是需要最優(yōu)先考慮的。雖然運(yùn)行時(shí)的速度提升 10% 對(duì)于研究人員來說基本沒有意義,但這可以直接為公司節(jié)約數(shù)百萬美元的成本。

另一個(gè)區(qū)別是部署。研究人員將在他們自己的機(jī)器或某個(gè)專門用于運(yùn)行研究工作的服務(wù)器集群上進(jìn)行實(shí)驗(yàn)。另一方面,工業(yè)界在部署方面則有一連串的限制/要求:

不能使用 Python。對(duì)于一些公司運(yùn)行的服務(wù)器來說,Python 運(yùn)行時(shí)的計(jì)算開銷太大了。

移動(dòng)性。你不能在移動(dòng)端的二進(jìn)制文件中嵌入 Python 解釋器。

服務(wù)性。需要滿足各種需求,例如在不停機(jī)的狀態(tài)下更新模型、在模型之間無縫切換、在推理時(shí)進(jìn)行批處理,等等。

TensorFlow 是專門圍繞這些需求構(gòu)建的,并為所有這些問題提供了解決方案:計(jì)算圖的版式和執(zhí)行引擎本身并不需要Python,并且通過TensorFlow Lite 和 TensorFlow Serving 分別處理移動(dòng)端和服務(wù)器端的問題。

在此前,PyTorch 還不能夠很好地滿足上述需求,因此大多數(shù)公司目前在生產(chǎn)環(huán)境下都選擇使用 TensorFlow。但隨著 PyTorch 1.6版本的發(fā)布,對(duì)生產(chǎn)環(huán)境的支持也更加友好,相信PyTorch?會(huì)逐漸在此方面縮小與TensorFlow?的差距。

競相涌出的國產(chǎn)框架

進(jìn)入2020年,我們驚喜的發(fā)現(xiàn),國內(nèi)頂級(jí)科技公司和研究機(jī)構(gòu)逐漸開始開源自己的深度學(xué)習(xí)計(jì)算框架。包括百度的PaddlePaddle、曠視的MegEngine、清華的Jittor、華為的MindSpore以及一流科技的OneFlow等。

作為國產(chǎn)深度學(xué)習(xí)框架的老大哥,飛槳(PaddlePaddle)以百度多年的深度學(xué)習(xí)技術(shù)研究和業(yè)務(wù)應(yīng)用為基礎(chǔ),是中國首個(gè)開源開放、技術(shù)領(lǐng)先、功能完備的產(chǎn)業(yè)級(jí)深度學(xué)習(xí)平臺(tái),集深度學(xué)習(xí)核心訓(xùn)練和推理框架、基礎(chǔ)模型庫、端到端開發(fā)套件和豐富的工具組件于一體。目前,飛槳累計(jì)開發(fā)者194萬,服務(wù)企業(yè)8.4萬家,基于飛槳開源深度學(xué)習(xí)平臺(tái)產(chǎn)生了23.3萬個(gè)模型。飛槳助力開發(fā)者快速實(shí)現(xiàn)AI想法,快速上線AI業(yè)務(wù)。幫助越來越多的行業(yè)完成AI賦能,實(shí)現(xiàn)產(chǎn)業(yè)智能化升級(jí)。

MegEngine 是 Brain++的核心組件,是與百度PaddlePaddle一樣的為開發(fā)者和研究人員提供開發(fā)的國產(chǎn)原創(chuàng)深度學(xué)習(xí)框架。而Brain++是曠視一個(gè)具備大規(guī)模算法研發(fā)能力的端到端解決方案。這該框架主要用于曠視內(nèi)部進(jìn)行計(jì)算機(jī)視覺領(lǐng)域的算法開發(fā)工作,包括大規(guī)模的圖像檢測、分割、識(shí)別任務(wù)等,因此在計(jì)算機(jī)視覺領(lǐng)域具備獨(dú)特的優(yōu)勢。

MegEngine示例代碼:

import megengine as mgeimport megengine.functional as Fimport megengine.moduleas Mimport numpy as np# 經(jīng)典的基于 Module 的網(wǎng)絡(luò)搭建接口classLeNet(M.Module):def__init__(self):super(LeNet,self).__init__()self.conv1 = M.Conv2d(1,6,5)self.relu1 = M.ReLU()self.pool1 = M.MaxPool2d(2,2)# 省略部分代碼...self.classifer = M.Linear(84,10)# 符合 Pythonic 風(fēng)格的計(jì)算流程代碼defforward(self, x):x =self.pool1(self.relu1(self.conv1(x)))# 省略部分代碼...x =self.classifer(x)returnx

我國人工智能產(chǎn)業(yè)發(fā)展迅速,急需構(gòu)建自己的開源深度學(xué)習(xí)生態(tài)。清華大學(xué)計(jì)算機(jī)系胡事民教授研究團(tuán)隊(duì)提出了一個(gè)全新的深度學(xué)習(xí)框架——計(jì)圖(Jittor)。Jittor是一個(gè)采用元算子表達(dá)神經(jīng)網(wǎng)絡(luò)計(jì)算單元、完全基于動(dòng)態(tài)編譯(Just-in-Time)的深度學(xué)習(xí)框架。Jittor國內(nèi)首個(gè)高校研究機(jī)構(gòu)開源的深度學(xué)習(xí)框架。

深度學(xué)習(xí)采用的卷積神經(jīng)網(wǎng)絡(luò)是由算子(Operator)組成的一個(gè)計(jì)算網(wǎng)絡(luò)。由于架構(gòu)設(shè)計(jì)和不斷擴(kuò)充等原因,當(dāng)前深度學(xué)習(xí)框架有多達(dá)2000種算子,系統(tǒng)復(fù)雜,優(yōu)化和移植困難。Jittor則將算子運(yùn)算進(jìn)一步分解,形成了更加底層的三類20余種元算子閉包,目前神經(jīng)網(wǎng)絡(luò)常用算子均可以使用元算子的組合進(jìn)行表達(dá)。面向未來深度學(xué)習(xí)框架的發(fā)展趨勢,Jittor利用元算子組合表達(dá)的優(yōu)勢,提出統(tǒng)一計(jì)算圖進(jìn)行優(yōu)化,并從底層開始設(shè)計(jì)了一個(gè)全新的動(dòng)態(tài)編譯架構(gòu)。該架構(gòu)支持多種編譯器,實(shí)現(xiàn)了所有代碼的即時(shí)編譯和動(dòng)態(tài)運(yùn)行,確保了實(shí)現(xiàn)和優(yōu)化分離,大幅提升了應(yīng)用開發(fā)靈活性、可拓展性和可移植性。

—— /?END?/?——

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容