1|前言
深度學習編程框架提供了用于深度學習設(shè)計、訓練,驗證等功能的基本模塊使用架提供的高級API,用戶可以簡單方便地實現(xiàn)各種深度學習以及機器算法目前,市面上有很多流行的開源框架,每個框架都有自己的用戶群和優(yōu)缺點。幾乎所有的框架都支持CPU和GPU設(shè)備,使用了常見的基于設(shè)備的加速庫,如BLAS, cuBLAS、NCCL等。選取 TensorFlow、 PyTorch、Cafe、 MXNet、paddlepaddle這五個相對有代表性的框架進行全面的對比。
首先我們統(tǒng)計了各框架在社區(qū)的活躍程度,如圖1所示,從開源社區(qū) Github上統(tǒng)計了各框架的星標(Star)數(shù)、倉庫復制Fork)數(shù)、討論帖(Issue)數(shù)和代碼提交請求(Pull Request)數(shù)。這四個指標大致反映了一個框架的受歡迎程度和活躍程度其中, TensorFlow在三項中都具有明顯的優(yōu)勢。 PyTorch的代碼提交請求數(shù)排第一,說明它也是一個非常活躍的有著眾多用戶的框架。


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

1 | TensorFlow
TensorFlow是一個規(guī)模較大的框架,在開源之前就已經(jīng)在 Google內(nèi)部得到了廣泛的應(yīng)用。開源后很快成為社區(qū)最受歡迎的框架之一。
TensorFlow功能強大,覆蓋面廣,支持眾多常見的前端語言,覆蓋云端到終端幾乎所有的平臺,同時也有眾多的輔助工具來支持多平臺多設(shè)備使用。例如,可視化計算圖工具 Tensor Board既可以讓用戶查看計算圖結(jié)構(gòu),也能讓用戶追蹤訓練過程,如Loss收斂情況等; TFLite則可以將訓練好的模型導出為終端設(shè)備使用的輕量模型,方便手機或嵌入式設(shè)備使用</u>;Profiler則是性能剖析工具,可以幫助使用者分析和優(yōu)化模型性能。
TensorFlow社區(qū)力量強大,文檔完善,對初學者較為友好從圖1中我們就能看到, Tensor Flow的使用者非常多,這些用戶在 Gthub、 Stackoverflo 、CSON、 Merium等社區(qū)網(wǎng)站留下了大量的教程和使用經(jīng)驗,初學者很容易就能查到之前遇到的問題此外, TensorFlow自身也提供了豐富的教程和開源模型(tensorflow/models),幫助大家更好地學習和使用。
當然, TensorFlow也有很多廣為使用者病的缺點,如API較為混亂、聲明式編程不方便調(diào)試等。因此,在最新版的 TensorFlow 2.0中對于眾多API做了系統(tǒng)性梳理掉了一些余重復的API,更重要的是, TensorFlow在2.0版本中默認采用適合快速開發(fā)和調(diào)試的命令式編程(即Eager模式),不需啟動會話(Session)即可逐條執(zhí)行程序員編寫的命令,得到結(jié)果。 Eager模式還高度集成了更高層 Keras API,使用起來更加方便。當然命令式編程無法對于整個計算圖做全局優(yōu)化,執(zhí)行速度較低,因此,在大規(guī)模部署的生產(chǎn)環(huán)境下,建議采用基于 Session的聲明式編程,通過提供 兩種編程模式,TensorFlow 2.0既能滿足學術(shù)研究人員即寫即用、方便調(diào)試、快速驗證想法的靈活性需求,又能繼續(xù)提供工業(yè)界大型項目所需的高效性和高可靠性
2 | PyTorch
PyTorch目前主要由 Facebook維護。相對于TensorFlow, PyTorch顯得小而靈活。
PyTorch前端支持 Python和C++,尤其是對 Python用戶非常友好。 PyTorch支持的自動求導和 TensorFlow不同,后者在添加新算子時需要自己實現(xiàn)求導函數(shù),但 PyTorch不用。此外, PyTorch的模塊化編程方法對復用網(wǎng)絡(luò)架構(gòu)特別適用,可以極大提高開發(fā)效率, PyTorch一直支持動態(tài)圖命令式的編程模式,雖然犧牲了靜態(tài)圖優(yōu)化的運行效率優(yōu)勢,但更加好用(比如在復雜循環(huán)網(wǎng)絡(luò))和方便調(diào)試(比如直接使用 Python的調(diào)試工具pdb),因此廣受歡迎 PyTorch的輔助工具也非常多,除了自身提供的可視化工具 Torch Vision之外也支持模型在 Tensor Board上的可視化,同時也提供了豐富的模型庫。隨著使用人數(shù)的增加,社區(qū)內(nèi)容也日趨完善?;谏鲜鰞?yōu)點,在小規(guī)模的使用場景和學術(shù)界, PyTorch使用數(shù)量迅猛增長,有趕超TensorFlow的趨勢。
此外我們也看到,目前 Py Torch無法全面支持各種平臺,這意味著訓練好的模型不能很方便地轉(zhuǎn)移到其他平臺或設(shè)備上使用,因此對生產(chǎn)環(huán)境來說, PyTorch目前還不是首選。
3| MXNet
MXNet是一款針對效率和靈活性而設(shè)計的深度學習框架。它和 TensorFlow一樣支持聲明式編程,也支持命令式編程(MXNet Gluon),用戶可以混用聲明式編程和命令式編程以最大化開發(fā)效率。 MXNet支持的語言很豐富,如R、 Julia和Go等 MXNet的總體框架類似 TensorFlow,但是后端代碼比 TensorFlow輕量得多 MXNet基于動態(tài)依賴調(diào)度器,并且能夠高效支持多設(shè)備和多機器。
4| Caffe
Calfe是出現(xiàn)最早的框架之一,最開始由加州大學伯克利分校所開發(fā),后由開區(qū)維護
相對于 TensorFlow的計算圖以算子為單位, Caffe的計算以層(layer)為粒度,對應(yīng)神經(jīng)網(wǎng)絡(luò)中的層, Caffe為每一層給出了前向?qū)崿F(xiàn)和反向?qū)崿F(xiàn),并采用 prototxt格式表示網(wǎng)絡(luò)結(jié)構(gòu)的層次堆疊,相對于 TensorBoard里呈現(xiàn)的分散算子,如果 TensorFlow在實現(xiàn)網(wǎng)絡(luò)時沒有很好地組織命名空間,則很難看出網(wǎng)絡(luò)結(jié)構(gòu)和功能, 而Caffe的 prototxt就非直觀和簡單 。Caffe的這些特性,使得使用者能很快掌握深度學習基礎(chǔ)算法的內(nèi)部本質(zhì)和實現(xiàn)方法,并由此開發(fā)出自己的 Caffe變種,完成自定義功能。
然而,正是由于它使用層的粒度來描述網(wǎng)絡(luò),缺少靈活性、擴展性和復用性,同時,由于 Caffe早期是為卷積神經(jīng)網(wǎng)絡(luò)設(shè)計的,在功能上有很多局限性,對RNN類的網(wǎng)絡(luò)支持很有限,同時也不支持多設(shè)備和多機器的使用場景,雖然早期的 Caffe版本已經(jīng)不再維護更新了,但 Caffe依舊能夠為深度學習的初學者提供一個了解深度學習計算本質(zhì)(而不僅是停留在使用各種高層API上)的工具和平臺。
5 | PaddlePaddle
飛槳PaddlePaddle是百度自主研發(fā)的開源深度學習框架。飛槳PaddlePaddle是集深度學習核心框架、工具組件和服務(wù)平臺于一體的技術(shù)領(lǐng)先、功能完備的開源深度學習平臺,擁有活躍的開發(fā)者社區(qū)。
作為領(lǐng)先的核心框架,飛槳PaddlePaddle具備簡單、易用、高效、安全的特點,能滿足模型開發(fā)、訓練、部署的全流程需求。
飛槳PaddlePaddle擁有豐富的工具組件。飛槳PaddlePaddle開放了PaddleHub、PARL、AutoDL Design、VisualDL等一系列深度學習工具組件。
飛槳PaddlePaddle具備專業(yè)的服務(wù)平臺——AI Studio和EasyDL,可以滿足不同層次的深度學習開發(fā)的需求。
PaddlePaddle源于業(yè)界頂尖實踐,擁有強大的超大規(guī)模并行深度學習處理能力,它具備4大工業(yè)級特點。
- 提供高性價比的多機GPU參數(shù)服務(wù)器訓練方法。
- 全面支持大規(guī)模異構(gòu)計算集群。
- 同時支持稠密參數(shù)和稀疏參數(shù)場景的超大規(guī)模深度學習并行訓練。
- 支持千億規(guī)模參數(shù)、數(shù)百個節(jié)點的高效并行訓練。
PaddlePaddle在速度上追求極致的體驗,推出了全流程、全類型的高性能部署和集成方案,在計算性能與易用性上具備3大特性。
- 支持千億規(guī)模參數(shù)、數(shù)百個節(jié)點的高效并行訓練。
- 提供性能全面領(lǐng)先的底層加速庫和推理引擎—Paddle Mobile和Paddle Serving。
- 通過兩行Python代碼就可調(diào)用的自動化模型壓縮庫PaddleSlim。
圖3 展示了飛槳PaddlePaddle的生態(tài)結(jié)構(gòu)。

|寫在最后
對主流的編程框架,包括 TensorFlow PyTorch、 Caffe、mxet、PaddlePaddle等,從多個角度進行了對比。