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

機器之心報道html

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

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

TensorFlowgithub

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

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將支持Windows七、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等,盡請期待。

相關文章
相關標籤/搜索