從TensorFlow 到 Caffe2:盤點深度學習框架


機器之心報道

本文首先介紹GitHub中最受歡迎的開源深度學習框架排名,然后再對其進行系統地對比

下圖總結了在GitHub中最受歡迎的開源深度學習框架排名,該排名是基於各大框架在GitHub里的收藏數,這個數據由MitchDeFelice在2017年5月初完成。

TensorFlow

地址:https://www.tensorflow.org/

TensorFlow最開始是由谷歌一個稱之為DistBeliefV2的庫發展而來,它是一個公司內部的深度神經網絡庫,隸屬於谷歌大腦項目。有一些人認為TensorFlow是由Theano徹底重構而來。

谷歌開源TensorFlow后,立即吸引了一大批開發愛好者。TensorFlow可以提供一系列的能力,例如圖像識別、手寫識別、語音識別、預測以及自然語言處理等。2015年11月9號,TensorFlow在Apache2.0協議下開源發布。

TensorFlow1.0版本已於2017年2月15日發布,這個版本是之前8個版本的優化改進版,其致力於解決Tensorflow之前遇到的一系列問題以及完善一些核心能力。TensorFlow獲得成功的因素有:

TensorFlow提供了如下工具:

TensorBoard:對於網絡模型和效果來說是一個設計優良的可視化工具。TensorFlowServing:可以保持相同的服務器架構和API,使得部署新算法和實驗變得簡單。TensorFlowServing提供了與TensorFlow模型開箱即用的整合,但同時還能很容易擴展到其它類型的模型和數據。

TensorFlow編程接口支持Python和C++。隨着1.0版本的公布,Java、Go、R和HaskellAPI的alpha版本也將被支持。此外,TensorFlow還可在谷歌雲和亞馬孫雲中運行。

隨着0.12版本的發行,TensorFlow將支持Windows7、Windows10和Server2016。由於TensorFlow使用C++Eigen庫,所以庫可在ARM架構上編譯和優化。這也就意味着你可以在各種服務器和移動設備上部署你的訓練模型,而無需執行單獨的模型解碼器或者加載Python解釋器。

TensorFlow支持細粒度的網格層,而且允許用戶在無需用低級語言實現的情況下構建新的復雜的層類型。子圖執行操作允許你在圖的任意邊緣引入和檢索任意數據的結果。這對調試復雜的計算圖模型很有幫助。

分布式TensorFlow(DistributedTensorFlow)被加進了0.8版本,它允許模型並行,這意味着模型的不同部分可在不同的並行設備上被訓練。

自2016年3月,斯坦福大學、伯克利大學、多倫多大學和Udacity都將這個框架作為一個免費的大規模在線開放課程進行教授。

TensorFlow的缺點如下:

TensorFlow的每個計算流都必須構造為一個靜態圖,且缺乏符號性循環(symbolicloops),這會帶來一些計算困難。沒有對視頻識別很有用的三維卷積(3-Dconvolution)。盡管TensorFlow現在比起始版本(v0.5)快了58倍,,但在執行性能方面依然落后於競爭對手。

Caffe

地址:http://caffe.berkeleyvision.org/

Caffe是賈揚清的傑作,目前他在FacebookAI平台擔任首席工程師。Caffe可能是自2013年底以來第一款主流的工業級深度學習工具包。正因為Caffe優秀的卷積模型,它已經成為計算機視覺界最流行的工具包之一,並在2014年的ImageNet挑戰賽中一舉奪魁。Caffe遵循BSD2-Clause協議。

Caffe的快速使其完美應用於實驗研究和商業部署。Caffe可在英偉達單個K40GPU上每天處理6000萬張圖像。這大概是1毫秒預測一張圖片,4毫秒學習一張圖片的速度,而且最新的版本處理速度會更快。

Caffe基於C++,因此可在多種設備上編譯。它跨平台運行,並包含Windows端口。Caffe支持C++、Matlab和Python編程接口。Caffe擁有一個龐大的用戶社區,人們在其中為被稱為「ModelZoo(https://github.com/BVLC/caffe/wiki/Model-Zoo)」的深度網絡庫做貢獻。AlexNet和GoogleNet就是社群用戶構建的兩個流行網絡。

雖然Caffe在視頻識別領域是一個流行的深度學習網絡,但是Caffe卻不能像TensorFlow、CNTK和Theano那樣支持細粒度網絡層。構建復雜的層類型必須以低級語言完成。由於其遺留架構,Caffe對循環網絡和語言建模的支持總體上很薄弱。

Caffe2

地址:https://caffe2.ai/

目前,賈揚清和他在Facebook的團隊正在開發新一代框架Caffe2。今年4月18日,Facebook開源了Caffe2。Caffe2與Caffe的區別是什么?Caffe2更注重模塊化,在移動端、大規模部署上表現卓越。如同TensorFlow,Caffe2使用C++Eigen庫,支持ARM架構。

用一個實用腳本,Caffe上的模型可輕易地被轉變到Caffe2上。Caffe設計的選擇使得它處理視覺類型的難題時很完美。Caffe2延續了它對視覺類問題的支持,且增加了對自然語言處理、手寫識別、時序預測有幫助的RNN和LSTM支持。

期待不久之后能看到Caffe2超越Caffe,就像它宣稱的那樣在深度學習社區流行。

在本周三英偉達推出Volta架構的第一塊加速卡TeslaV100后,Caffe的開發者第一時間展示了TeslaV100在Caffe2上運行ResNet-50的評測。數據顯示在新框架和新硬件的配合下,模型每秒鍾可以處理4100張圖片。

鏈接:https://caffe2.ai/blog/2017/05/10/caffe2-adds-FP16-training-support.html

CNTK

鏈接:https://github.com/Microsoft/CNTK/wiki

微軟的CNTK(MicrosoftCognitiveToolkit)最初是面向語音識別的框架。CNTK支持RNN和CNN類型的網絡模型,從而在處理圖像、手寫字體和語音識別問題上,它是很好的選擇。使用Python或C++編程接口,CNTK支持64位的Linux和Windows系統,在MIT許可證下發布。

與TensorFlow和Theano同樣,CNTK使用向量運算符的符號圖(symbolicgraph)網絡,支持如矩陣加/乘或卷積等向量操作。此外,像TensorFlow和Theano一樣,CNTK有豐富的細粒度的網絡層構建。構建塊(操作)的細粒度使用戶不需要使用低層次的語言(如Caffe)就能創建新的復雜的層類型。

CNTK也像Caffe一樣基於C++架構,支持跨平台的CPU/GPU部署。CNTK在AzureGPULab上顯示出最高效的分布式計算性能。目前,CNTK不支持ARM架構,這限制了其在移動設備上的功能。

MXNet

鏈接:http://mxnet.io/

MXNet(發音為mix-net)起源於卡內基梅隆大學和華盛頓大學的實驗室。MXNet是一個全功能、可編程和可擴展的深度學習框架,支持最先進的深度學習模型。MXNet支持混合編程模型(命令式和聲明式編程)和多種編程語言的代碼(包括Python、C++、R、Scala、Julia、Matlab和JavaScript)。2017年1月30日,MXNet被列入ApacheIncubator開源項目。

MXNet支持深度學習架構,如卷積神經網絡(CNN)、循環神經網絡(RNN)和其包含的長短時間記憶網絡(LTSM)。該框架為圖像、手寫文字和語音的識別和預測以及自然語言處理提供了出色的工具。有些人稱MXNet是世界上最好的圖像分類器。

MXNet具有可擴展的強大技術能力,如GPU並行和內存鏡像、快速編程器開發和可移植性。此外,MXNet與ApacheHadoopYARN(一種通用分布式應用程序管理框架)集成,使MXNet成為TensorFlow有力的競爭對手。

MXNet不僅僅只是深度網絡框架,它的區別在於支持生成對抗網絡(GAN)模型。該模型啟發自實驗經濟學方法的納什均衡。

Torch

鏈接:http://torch.ch/

Torch由Facebook的RonanCollobert和SoumithChintala,Twitter的ClementFarabet(現任職於英偉達),以及GoogleDeepMind的KorayKavukcuoglu共同開發。很多科技巨頭(如Facebook、Twitter和英偉達)都使用定制版的Torch用於人工智能研究,這大大促進了Torch的開發。Torch是BSD3協議下的開源項目。然而,隨着Facebook對Caffe2的研究,以及其對移動設備的支持,Caffe2正成為主要的深度學習框架。

Torch的編程語言為Lua。Lua不是主流語言,在開發人員沒有熟練掌握Lua之前,使用Torch很難提高開發的整體生產力。

Torch缺乏TensorFlow的分布式應用程序管理框架,也缺乏MXNet和Deeplearning4J對YARN的支持。缺乏多種編程語言的API也限制了開發人員。

PyTorch

地址:http://pytorch.org/

PyTorch由AdamPaszke、SamGross與SoumithChintala等人牽頭開發,其成員來自FacebookFAIR和其他多家實驗室。它是一種Python優先的深度學習框架,在今年1月被開源,提供了兩種高層面的功能:

使用強大的GPU加速的Tensor計算(類似numpy)

構建於基於tape的autograd系統的深度神經網絡

該框架結合了Torch7高效靈活的GPU加速后端庫與直觀的Python前端,它的特點是快速成形、代碼可讀和支持最廣泛的深度學習模型。如有需要,你可以復用你最喜歡的Python軟件包(如numpy、scipy和Cython)來擴展PyTorch。該框架因為其靈活性和速度,在推出以后迅速得到了開發者和研究人員的青睞。隨着GitHub上越來越多代碼的出現,PyTorch作為新框架缺乏資源的問題已經得以緩解。

Deeplearning4J

地址:https://deeplearning4j.org/

Deeplearning4J(DL4J)是用Java和Scala編寫的Apache2.0協議下的開源、分布式神經網絡庫。DL4J最初由SkyMind公司的AdamGibson開發,是唯一集成了Hadoop和Spark的商業級深度學習網絡,並通過Hadoop和Spark協調多個主機線程。DL4J使用Map-Reduce來訓練網絡,同時依賴其它庫來執行大型矩陣操作。

DL4J框架支持任意芯片數的GPU並行運行(對訓練過程至關重要),並支持YARN(Hadoop的分布式應用程序管理框架)。DL4J支持多種深度網絡架構:RBM、DBN、卷積神經網絡(CNN)、循環神經網絡(RNN)、RNTN和長短時間記憶網絡(LTSM)。DL4J還對矢量化庫Canova提供支持。

DL4J使用Java語言實現,本質上比Python快。在用多個GPU解決非平凡圖像(non-trivialimage)識別任務時,它的速度與Caffe一樣快。該框架在圖像識別、欺詐檢測和自然語言處理方面的表現出眾。

Theano

地址:http://deeplearning.net/software/theano/

Theano由蒙特利爾大學算法學習人工智能實驗室(MILA)維護。以Theano的創始人YoshuaBengio為首,該實驗室是深度學習研究領域的重要貢獻者,擁有約30至40名學生和教師。Theano支持快速開發高效的機器學習算法,在BSD協議下發布。

Theano的架構如同一個黑箱;整個代碼庫和接口使用Python,其中C/CUDA代碼被打包成Python字符串。這使得開發人員很難導航(navigate)、調試和重構。

Theano開創了將符號圖用於神經網絡編程的趨勢。Theano的符號式API支持循環控制(即scan),這使得實現RNN容易且高效。

Theano缺乏分布式應用程序管理框架,只支持一種編程開發語言。Theano是很好的學術研究工具,在單個CPU上運行的效率比TensorFlow更有效。然而,在開發和支持大型分布式應用程序時,使用Theano可能會遇到挑戰。

在了解這些深度學習框架的基本內容后,下面我們可以看看它們之間在庫資源、建模能力、速度等度量下的對比情況。

這組對比參考了多種公開基准評測,以及我們在圖像/語音識別應用時對這些技術的主觀印象。此外,你需要注意:

語言

當你開始一個深度學習項目時,你最好使用一個支持你所會語言的框架。比如Caffe(C++)和Torch(Lua)只能支持有限的語言(最近,隨着PyTorch的出現,情況有所改觀)。所以如果你希望選用上述兩個框架,我們建議你事先熟悉C++或Lua語言。相比之下,TensorFlow與MXNet具有豐富的多語言支持,即使你對C++感到陌生也可以使用它們。

教程和資源

目前,各類深度學習框架的教程與可利用的資源在質量和數量上有着顯著的不同。Theano,TensorFlow,Torch和MXNet有着很詳盡的文檔教程,很容易被初學者理解和實現。與此相比,雖然微軟的CNTK和英特爾的NervanaNeon也是強大的工具,我們卻很少能見到有關它們的新手級資料。此外,在研究過程中,我們發現GitHub社區的參與度不僅可以用於准確地評價不同工具的開發水平,而且還是在搜索StackOverflow或repo的GitIssues時能否快速解決問題的參考性指標。當然,作為谷歌提供的框架,TensorFlow理所當然地在教程,資源,開發者和社區貢獻者的數量上遙遙領先。

CNN建模能力

卷積神經網絡(CNN)經常被用於圖像識別、推薦引擎和自然語言識別等方向的應用。CNN由一組多層的神經網絡組成,在運行時會將輸入的數據進行預定義分類的評分。CNN也可用於回歸分析,例如構成自動駕駛汽車中有關轉向角的模型。在橫評中,我們評價一種框架的CNN建模能力考慮到以下幾個特性:定義模型的機會空間、預構建層的可用性、以及可用於連接這些層的工具和功能。我們發現,Theano,Caffe和MXNet都有很好的CNN建模能力。其中,TensorFlow因為易於建立的InceptionV3模型,Torch因為其豐富的CNN資源——包括易於使用的時間卷積集使得這兩種框架在CNN建模能力上脫穎而出。

RNN建模能力

循環神經網絡(RNN)常用於語音識別,時間序列預測,圖像字幕和其他需要處理順序信息的任務。由於預建的RNN模型不如CNN數量多,因此,如果你已經有一個RNN深度學習項目,優先考慮舊RNN模型是在哪種框架里實現的最重要。目前,Caffe上的RNN資源最少,而Microsoft的CNTK和Torch有豐富的RNN教程和預構建模型。當然,最流行的TensorFlow中也有一些RNN資源,TFLearn和Keras中更有很多使用TensorFlow的RNN示例。

架構

為在特定框架中構建和訓練新模型,易於使用和模塊化的前端是至關重要的。TensorFlow,Torch和MXNet都有直觀而模塊化的架構,讓開發相對變得簡單。相比之下,我們在Caffe這樣的框架上需要進行大量的工作才能創建一個新層。另外我們發現在開發過程中,因為有TensorBoardwebGUI等應用的存在,TensorFlow極易在訓練中和訓練后進行debug和監控。

速度

Torch和Nervana具有開源卷積神經網絡基准測試的最佳性能:

https://github.com/soumith/convnet-benchmarks/blob/master/README.md

Tensorflow的性能在大多數測試中是具有競爭力的,而Caffe和Theano稍稍落后:

https://github.com/tobigithub/tensorflow-deep-learning/wiki/tf-benchmarks

微軟聲稱他們的CNTK在一些RNN訓練任務中有最快的速度。

在另一項對比Theano、Torch和TensorFlow的RNN性能的研究中,Theano是其中最快的:

https://arxiv.org/abs/1511.06435

多GPU支持

大多數深度學習應用都需要用到巨量的浮點運算(FLOP)。例如,百度的DeepSpeech識別模型需要10sExaFLOPs用於訓練,這是大於10e18的計算量:

https://arxiv.org/abs/1512.02595

考慮到目前英偉達Pascal架構的TitanX等頂級顯卡可以每秒執行10e9FLOP:

https://www.nvidia.com/en-us/geforce/products/10series/titan-x-pascal/

因此,假如需要在大型數據集上訓練一個新模型——用單GPU機器的話——可能會需要一個星期之久。為了減少構建模型所需的時間,我們需要使用多GPU並聯的方式組建自己的機器。幸運的是,上述大部分架構都可以很好地支持多GPU運算。其中,據報道MXNet有着最好的多GPU優化引擎:

http://www.allthingsdistributed.com/2016/11/mxnet-default-framework-deep-learning-aws.html

Keras兼容性

Keras是一個用於快速構建深度學習原型的高級庫。我們在實踐中發現,它是數據科學家應用深度學習的好幫手。Keras目前支持兩種后端框架:TensorFlow與Theano,而且Keras再過不久就會成為TensorFlow的默認API:

http://www.fast.ai/2017/01/03/keras/

盡管如此,Keras的作者表示,這一高級庫在未來仍會作為支持多種框架的前端存在:

https://github.com/fchollet/keras/issues/5050#issuecomment-272945570

總結

如果你想要開始深度學習,你應該從評估自己的團隊技能和業務需求開始。例如,如果一個以Python為中心的團隊想開發圖像識別的應用程序,你應該使用TensorFlow,因為它有豐富的資源,較好性能和完整的原型工具。如果一個有Lua能力的團隊希望將RNN大規模應用到生產環境中去,他們則會受益於Torch的高速和強大的RNN建模能力。

未來,我們將繼續討論在更大規模的應用中這些框架的表現。這些挑戰包括多機並聯時的多GPU優化,多種開源庫的兼容性,如CMUSphinx和Kaldi等,盡請期待。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM