深度學(xué)習(xí)編程框架對(duì)比

1|前言

深度學(xué)習(xí)編程框架提供了用于深度學(xué)習(xí)設(shè)計(jì)、訓(xùn)練株搔,驗(yàn)證等功能的基本模塊使用架提供的高級(jí)API筑辨,用戶可以簡(jiǎn)單方便地實(shí)現(xiàn)各種深度學(xué)習(xí)以及機(jī)器算法目前总滩,市面上有很多流行的開(kāi)源框架纲堵,每個(gè)框架都有自己的用戶群和優(yōu)缺點(diǎn)。幾乎所有的框架都支持CPU和GPU設(shè)備闰渔,使用了常見(jiàn)的基于設(shè)備的加速庫(kù)席函,如BLAS, cuBLAS冈涧、NCCL等茂附。選取 TensorFlow、 PyTorch督弓、Cafe营曼、 MXNet、paddlepaddle這五個(gè)相對(duì)有代表性的框架進(jìn)行全面的對(duì)比愚隧。

首先我們統(tǒng)計(jì)了各框架在社區(qū)的活躍程度蒂阱,如圖1所示,從開(kāi)源社區(qū) Github上統(tǒng)計(jì)了各框架的星標(biāo)(Star)數(shù)狂塘、倉(cāng)庫(kù)復(fù)制Fork)數(shù)录煤、討論帖(Issue)數(shù)和代碼提交請(qǐng)求(Pull Request)數(shù)。這四個(gè)指標(biāo)大致反映了一個(gè)框架的受歡迎程度和活躍程度其中荞胡, TensorFlow在三項(xiàng)中都具有明顯的優(yōu)勢(shì)妈踊。 PyTorch的代碼提交請(qǐng)求數(shù)排第一,說(shuō)明它也是一個(gè)非忱崞活躍的有著眾多用戶的框架廊营。

1-1.png
1-2.png

表1中列出了這些框架的其他比較項(xiàng),包括主要維護(hù)團(tuán)體萝勤、框架支持的前端語(yǔ)言支持的操作系統(tǒng)平臺(tái)露筒、支持的操作系統(tǒng)平臺(tái)、編程模式以及現(xiàn)階段輔助工具生態(tài)等纵刘。下面我們從這些角度分別計(jì)論各個(gè)框架的情況邀窃。


表1 主流開(kāi)源編程框架的對(duì)比

1 | TensorFlow

TensorFlow是一個(gè)規(guī)模較大的框架,在開(kāi)源之前就已經(jīng)在 Google內(nèi)部得到了廣泛的應(yīng)用假哎。開(kāi)源后很快成為社區(qū)最受歡迎的框架之一。

TensorFlow功能強(qiáng)大鞍历,覆蓋面廣舵抹,支持眾多常見(jiàn)的前端語(yǔ)言,覆蓋云端到終端幾乎所有的平臺(tái)劣砍,同時(shí)也有眾多的輔助工具來(lái)支持多平臺(tái)多設(shè)備使用惧蛹。例如,可視化計(jì)算圖工具 Tensor Board既可以讓用戶查看計(jì)算圖結(jié)構(gòu),也能讓用戶追蹤訓(xùn)練過(guò)程香嗓,如Loss收斂情況等迅腔; TFLite則可以將訓(xùn)練好的模型導(dǎo)出為終端設(shè)備使用的輕量模型,方便手機(jī)或嵌入式設(shè)備使用</u>靠娱;Profiler則是性能剖析工具沧烈,可以幫助使用者分析和優(yōu)化模型性能。

TensorFlow社區(qū)力量強(qiáng)大像云,文檔完善锌雀,對(duì)初學(xué)者較為友好從圖1中我們就能看到, Tensor Flow的使用者非常多迅诬,這些用戶在 Gthub腋逆、 Stackoverflo 、CSON侈贷、 Merium等社區(qū)網(wǎng)站留下了大量的教程和使用經(jīng)驗(yàn)惩歉,初學(xué)者很容易就能查到之前遇到的問(wèn)題此外, TensorFlow自身也提供了豐富的教程和開(kāi)源模型(tensorflow/models)俏蛮,幫助大家更好地學(xué)習(xí)和使用柬泽。

當(dāng)然, TensorFlow也有很多廣為使用者病的缺點(diǎn)嫁蛇,如API較為混亂锨并、聲明式編程不方便調(diào)試等。因此睬棚,在最新版的 TensorFlow 2.0中對(duì)于眾多API做了系統(tǒng)性梳理掉了一些余重復(fù)的API第煮,更重要的是, TensorFlow在2.0版本中默認(rèn)采用適合快速開(kāi)發(fā)和調(diào)試的命令式編程(即Eager模式)抑党,不需啟動(dòng)會(huì)話(Session)即可逐條執(zhí)行程序員編寫的命令包警,得到結(jié)果。 Eager模式還高度集成了更高層 Keras API底靠,使用起來(lái)更加方便害晦。當(dāng)然命令式編程無(wú)法對(duì)于整個(gè)計(jì)算圖做全局優(yōu)化,執(zhí)行速度較低暑中,因此壹瘟,在大規(guī)模部署的生產(chǎn)環(huán)境下,建議采用基于 Session的聲明式編程鳄逾,通過(guò)提供 兩種編程模式稻轨,TensorFlow 2.0既能滿足學(xué)術(shù)研究人員即寫即用、方便調(diào)試雕凹、快速驗(yàn)證想法的靈活性需求殴俱,又能繼續(xù)提供工業(yè)界大型項(xiàng)目所需的高效性和高可靠性

2 | PyTorch

PyTorch目前主要由 Facebook維護(hù)政冻。相對(duì)于TensorFlow, PyTorch顯得小而靈活线欲。

PyTorch前端支持 Python和C++明场,尤其是對(duì) Python用戶非常友好。 PyTorch支持的自動(dòng)求導(dǎo)和 TensorFlow不同李丰,后者在添加新算子時(shí)需要自己實(shí)現(xiàn)求導(dǎo)函數(shù)苦锨,但 PyTorch不用。此外嫌套, PyTorch的模塊化編程方法對(duì)復(fù)用網(wǎng)絡(luò)架構(gòu)特別適用逆屡,可以極大提高開(kāi)發(fā)效率, PyTorch一直支持動(dòng)態(tài)圖命令式的編程模式踱讨,雖然犧牲了靜態(tài)圖優(yōu)化的運(yùn)行效率優(yōu)勢(shì)魏蔗,但更加好用(比如在復(fù)雜循環(huán)網(wǎng)絡(luò))和方便調(diào)試(比如直接使用 Python的調(diào)試工具pdb),因此廣受歡迎 PyTorch的輔助工具也非常多痹筛,除了自身提供的可視化工具 Torch Vision之外也支持模型在 Tensor Board上的可視化莺治,同時(shí)也提供了豐富的模型庫(kù)。隨著使用人數(shù)的增加帚稠,社區(qū)內(nèi)容也日趨完善谣旁。基于上述優(yōu)點(diǎn)滋早,在小規(guī)模的使用場(chǎng)景和學(xué)術(shù)界榄审, PyTorch使用數(shù)量迅猛增長(zhǎng),有趕超TensorFlow的趨勢(shì)杆麸。

此外我們也看到搁进,目前 Py Torch無(wú)法全面支持各種平臺(tái),這意味著訓(xùn)練好的模型不能很方便地轉(zhuǎn)移到其他平臺(tái)或設(shè)備上使用昔头,因此對(duì)生產(chǎn)環(huán)境來(lái)說(shuō)饼问, PyTorch目前還不是首選。

3| MXNet

MXNet是一款針對(duì)效率和靈活性而設(shè)計(jì)的深度學(xué)習(xí)框架揭斧。它和 TensorFlow一樣支持聲明式編程莱革,也支持命令式編程(MXNet Gluon),用戶可以混用聲明式編程和命令式編程以最大化開(kāi)發(fā)效率讹开。 MXNet支持的語(yǔ)言很豐富盅视,如R、 Julia和Go等 MXNet的總體框架類似 TensorFlow萧吠,但是后端代碼比 TensorFlow輕量得多 MXNet基于動(dòng)態(tài)依賴調(diào)度器左冬,并且能夠高效支持多設(shè)備和多機(jī)器。

4| Caffe
Calfe是出現(xiàn)最早的框架之一纸型,最開(kāi)始由加州大學(xué)伯克利分校所開(kāi)發(fā),后由開(kāi)區(qū)維護(hù)
相對(duì)于 TensorFlow的計(jì)算圖以算子為單位, Caffe的計(jì)算以層(layer)為粒度狰腌,對(duì)應(yīng)神經(jīng)網(wǎng)絡(luò)中的層除破, Caffe為每一層給出了前向?qū)崿F(xiàn)和反向?qū)崿F(xiàn),并采用 prototxt格式表示網(wǎng)絡(luò)結(jié)構(gòu)的層次堆疊琼腔,相對(duì)于 TensorBoard里呈現(xiàn)的分散算子瑰枫,如果 TensorFlow在實(shí)現(xiàn)網(wǎng)絡(luò)時(shí)沒(méi)有很好地組織命名空間,則很難看出網(wǎng)絡(luò)結(jié)構(gòu)和功能丹莲, 而Caffe的 prototxt就非直觀和簡(jiǎn)單 光坝。Caffe的這些特性,使得使用者能很快掌握深度學(xué)習(xí)基礎(chǔ)算法的內(nèi)部本質(zhì)和實(shí)現(xiàn)方法甥材,并由此開(kāi)發(fā)出自己的 Caffe變種盯另,完成自定義功能。
然而洲赵,正是由于它使用層的粒度來(lái)描述網(wǎng)絡(luò)鸳惯,缺少靈活性、擴(kuò)展性和復(fù)用性叠萍,同時(shí)芝发,由于 Caffe早期是為卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的,在功能上有很多局限性苛谷,對(duì)RNN類的網(wǎng)絡(luò)支持很有限辅鲸,同時(shí)也不支持多設(shè)備和多機(jī)器的使用場(chǎng)景,雖然早期的 Caffe版本已經(jīng)不再維護(hù)更新了腹殿,但 Caffe依舊能夠?yàn)樯疃葘W(xué)習(xí)的初學(xué)者提供一個(gè)了解深度學(xué)習(xí)計(jì)算本質(zhì)(而不僅是停留在使用各種高層API上)的工具和平臺(tái)独悴。

5 | PaddlePaddle

飛槳PaddlePaddle是百度自主研發(fā)的開(kāi)源深度學(xué)習(xí)框架。飛槳PaddlePaddle是集深度學(xué)習(xí)核心框架赫蛇、工具組件和服務(wù)平臺(tái)于一體的技術(shù)領(lǐng)先绵患、功能完備的開(kāi)源深度學(xué)習(xí)平臺(tái),擁有活躍的開(kāi)發(fā)者社區(qū)悟耘。

作為領(lǐng)先的核心框架落蝙,飛槳PaddlePaddle具備簡(jiǎn)單、易用暂幼、高效筏勒、安全的特點(diǎn),能滿足模型開(kāi)發(fā)旺嬉、訓(xùn)練管行、部署的全流程需求。

飛槳PaddlePaddle擁有豐富的工具組件邪媳。飛槳PaddlePaddle開(kāi)放了PaddleHub捐顷、PARL荡陷、AutoDL Design、VisualDL等一系列深度學(xué)習(xí)工具組件迅涮。

飛槳PaddlePaddle具備專業(yè)的服務(wù)平臺(tái)——AI Studio和EasyDL废赞,可以滿足不同層次的深度學(xué)習(xí)開(kāi)發(fā)的需求。

PaddlePaddle源于業(yè)界頂尖實(shí)踐叮姑,擁有強(qiáng)大的超大規(guī)模并行深度學(xué)習(xí)處理能力唉地,它具備4大工業(yè)級(jí)特點(diǎn)。

  • 提供高性價(jià)比的多機(jī)GPU參數(shù)服務(wù)器訓(xùn)練方法传透。
  • 全面支持大規(guī)模異構(gòu)計(jì)算集群耘沼。
  • 同時(shí)支持稠密參數(shù)和稀疏參數(shù)場(chǎng)景的超大規(guī)模深度學(xué)習(xí)并行訓(xùn)練。
  • 支持千億規(guī)模參數(shù)朱盐、數(shù)百個(gè)節(jié)點(diǎn)的高效并行訓(xùn)練群嗤。

PaddlePaddle在速度上追求極致的體驗(yàn),推出了全流程托享、全類型的高性能部署和集成方案骚烧,在計(jì)算性能與易用性上具備3大特性。

  • 支持千億規(guī)模參數(shù)闰围、數(shù)百個(gè)節(jié)點(diǎn)的高效并行訓(xùn)練赃绊。
  • 提供性能全面領(lǐng)先的底層加速庫(kù)和推理引擎—Paddle Mobile和Paddle Serving。
  • 通過(guò)兩行Python代碼就可調(diào)用的自動(dòng)化模型壓縮庫(kù)PaddleSlim羡榴。

圖3 展示了飛槳PaddlePaddle的生態(tài)結(jié)構(gòu)碧查。

圖3 飛槳PaddlePaddle的生態(tài)結(jié)構(gòu).jpg

|寫在最后

對(duì)主流的編程框架,包括 TensorFlow PyTorch校仑、 Caffe忠售、mxet、PaddlePaddle等迄沫,從多個(gè)角度進(jìn)行了對(duì)比稻扬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市羊瘩,隨后出現(xiàn)的幾起案子泰佳,更是在濱河造成了極大的恐慌,老刑警劉巖尘吗,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逝她,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡睬捶,警方通過(guò)查閱死者的電腦和手機(jī)黔宛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擒贸,“玉大人臀晃,你說(shuō)我怎么就攤上這事觉渴。” “怎么了积仗?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵疆拘,是天一觀的道長(zhǎng)蜕猫。 經(jīng)常有香客問(wèn)我寂曹,道長(zhǎng),這世上最難降的妖魔是什么回右? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任隆圆,我火速辦了婚禮,結(jié)果婚禮上翔烁,老公的妹妹穿的比我還像新娘渺氧。我一直安慰自己,他們只是感情好蹬屹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布侣背。 她就那樣靜靜地躺著,像睡著了一般慨默。 火紅的嫁衣襯著肌膚如雪贩耐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天厦取,我揣著相機(jī)與錄音潮太,去河邊找鬼。 笑死虾攻,一個(gè)胖子當(dāng)著我的面吹牛铡买,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霎箍,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼奇钞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了漂坏?” 一聲冷哼從身側(cè)響起景埃,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樊拓,沒(méi)想到半個(gè)月后纠亚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筋夏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年蒂胞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片条篷。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骗随,死狀恐怖蛤织,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸿染,我是刑警寧澤指蚜,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涨椒,受9級(jí)特大地震影響摊鸡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚕冬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一免猾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囤热,春花似錦猎提、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棺聊,卻和暖如春伞租,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背躺屁。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工肯夏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人犀暑。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓驯击,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親耐亏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筒繁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355