TensorFlow與主流深度學(xué)習(xí)框架對比

發(fā)布時(shí)間:2024-02-16
建站服務(wù)器
引言:alphago在2017年年初化身master,在弈城和野狐等平臺上橫掃中日韓圍棋高手,取得60連勝,未嘗敗績。alphago背后神秘的推動(dòng)力就是tensorflow——google于2015年11月開源的機(jī)器學(xué)習(xí)及深度學(xué)習(xí)框架。
tensorflow在2015年年底一出現(xiàn)就受到了極大的關(guān)注,在一個(gè)月內(nèi)獲得了github上超過一萬顆星的關(guān)注,目前在所有的機(jī)器學(xué)習(xí)、深度學(xué)習(xí)項(xiàng)目中排名第一,甚至在所有的python項(xiàng)目中也排名第一。本文將帶我們簡單了解下tensorflow,并與其他主流深度學(xué)習(xí)框架進(jìn)行了對比。
本文選自《tensorflow實(shí)戰(zhàn)》。
tensorflow
tensorflow是相對高階的機(jī)器學(xué)習(xí)庫,用戶可以方便地用它設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),而不必為了追求高效率的實(shí)現(xiàn)親自寫c 或cuda代碼。它和theano一樣都支持自動(dòng)求導(dǎo),用戶不需要再通過反向傳播求解梯度。其核心代碼和caffe一樣是用c 編寫的,使用c 簡化了線上部署的復(fù)雜度,并讓手機(jī)這種內(nèi)存和cpu資源都緊張的設(shè)備可以運(yùn)行復(fù)雜模型(python則會(huì)比較消耗資源,并且執(zhí)行效率不高)。除了核心代碼的c 接口,tensorflow還有官方的python、go和java接口,是通過swig(simplified wrapper and interface generator)實(shí)現(xiàn)的,這樣用戶就可以在一個(gè)硬件配置較好的機(jī)器中用python進(jìn)行實(shí)驗(yàn),并在資源比較緊張的嵌入式環(huán)境或需要低延遲的環(huán)境中用c 部署模型。swig支持給c/c 代碼提供各種語言的接口,因此其他腳本語言的接口未來也可以通過swig方便地添加。不過使用python時(shí)有一個(gè)影響效率的問題是,每一個(gè)mini-batch要從python中feed到網(wǎng)絡(luò)中,這個(gè)過程在mini-batch的數(shù)據(jù)量很小或者運(yùn)算時(shí)間很短時(shí),可能會(huì)帶來影響比較大的延遲?,F(xiàn)在tensorflow還有非官方的julia、node.js、r的接口支持。
tensorflow也有內(nèi)置的tf.learn和tf.slim等上層組件可以幫助快速地設(shè)計(jì)西部數(shù)碼絡(luò),并且兼容scikit-learn estimator接口,可以方便地實(shí)現(xiàn)evaluate、grid search、cross validation等功能。同時(shí)tensorflow不只局限于神經(jīng)網(wǎng)絡(luò),其數(shù)據(jù)流式圖支持非常自由的算法表達(dá),當(dāng)然也可以輕松實(shí)現(xiàn)深度學(xué)習(xí)以外的機(jī)器學(xué)習(xí)算法。事實(shí)上,只要可以將計(jì)算表示成計(jì)算圖的形式,就可以使用tensorflow。用戶可以寫內(nèi)層循環(huán)代碼控制計(jì)算圖分支的計(jì)算,tensorflow會(huì)自動(dòng)將相關(guān)的分支轉(zhuǎn)為子圖并執(zhí)行迭代運(yùn)算。tensorflow也可以將計(jì)算圖中的各個(gè)節(jié)點(diǎn)分配到不同的設(shè)備執(zhí)行,充分利用硬件資源。定義新的節(jié)點(diǎn)只需要寫一個(gè)python函數(shù),如果沒有對應(yīng)的底層運(yùn)算核,那么可能需要寫c 或者cuda代碼實(shí)現(xiàn)運(yùn)算操作。
在數(shù)據(jù)并行模式上,tensorflow和parameter server很像,但tensorflow有獨(dú)立的variable node,不像其他框架有一個(gè)全局統(tǒng)一的參數(shù)服務(wù)器,因此參數(shù)同步更自由。tensorflow和spark的核心都是一個(gè)數(shù)據(jù)計(jì)算的流式圖,spark面向的是大規(guī)模的數(shù)據(jù),支持sql等操作,而tensorflow主要面向內(nèi)存足以裝載模型參數(shù)的環(huán)境,這樣可以最大化計(jì)算效率。
tensorflow的另外一個(gè)重要特點(diǎn)是它靈活的移植性,可以將同一份代碼幾乎不經(jīng)過修改就輕松地部署到有任意數(shù)量cpu或gpu的pc、服務(wù)器或者移動(dòng)設(shè)備上。相比于theano,tensorflow還有一個(gè)優(yōu)勢就是它極快的編譯速度,在定義西部數(shù)碼絡(luò)結(jié)構(gòu)時(shí),theano通常需要長時(shí)間的編譯,因此嘗試新模型需要比較大的代價(jià),而tensorflow完全沒有這個(gè)問題。tensorflow還有功能強(qiáng)大的可視化組件tensorboard,能可視化網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練過程,對于觀察復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)和監(jiān)控長時(shí)間、大規(guī)模的訓(xùn)練很有幫助。tensorflow針對生產(chǎn)環(huán)境高度優(yōu)化,它產(chǎn)品級的高質(zhì)量代碼和設(shè)計(jì)都可以保證在生產(chǎn)環(huán)境中穩(wěn)定運(yùn)行,同時(shí)一旦tensorflow廣泛地被工業(yè)界使用,將產(chǎn)生良性循環(huán),成為深度學(xué)習(xí)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。
除了支持常見的網(wǎng)絡(luò)結(jié)構(gòu)[卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,cnn)、循環(huán)神經(jīng)網(wǎng)絡(luò)(recurent neural network,rnn)]外,tensorflow還支持深度強(qiáng)化學(xué)習(xí)乃至其他計(jì)算密集的科學(xué)計(jì)算(如偏微分方程求解等)。tensorflow此前不支持symbolic loop,需要使用python循環(huán)而無法進(jìn)行圖編譯優(yōu)化,但最近新加入的xla已經(jīng)開始支持jit和aot,另外它使用bucketing trick也可以比較高效地實(shí)現(xiàn)循環(huán)神經(jīng)網(wǎng)絡(luò)。tensorflow的一個(gè)薄弱地方可能在于計(jì)算圖必須構(gòu)建為靜態(tài)圖,這讓很多計(jì)算變得難以實(shí)現(xiàn),尤其是序列預(yù)測中經(jīng)常使用的beam search。
tensorflow的用戶能夠?qū)⒂?xùn)練好的模型方便地部署到多種硬件、操作系統(tǒng)平臺上,支持intel和amd的cpu,通過cuda支持nvidia的gpu(最近也開始通過opencl支持amd的gpu,但沒有cuda成熟),支持linux和mac,最近在0.12版本中也開始嘗試支持windows。在工業(yè)生產(chǎn)環(huán)境中,硬件設(shè)備有些是最新款的,有些是用了幾年的老機(jī)型,來源可能比較復(fù)雜,tensorflow的異構(gòu)性讓它能夠全面地支持各種硬件和操作系統(tǒng)。同時(shí),其在cpu上的矩陣運(yùn)算庫使用了eigen而不是blas庫,能夠基于arm架構(gòu)編譯和優(yōu)化,因此在移動(dòng)設(shè)備(android和ios)上表現(xiàn)得很好。
tensorflow在最開始發(fā)布時(shí)只支持單機(jī),而且只支持cuda 6.5和cudnn v2,并且沒有官方和其他深度學(xué)習(xí)框架的對比結(jié)果。在2015年年底,許多其他框架做了各種性能對比評測,每次tensorflow都會(huì)作為較差的對照組出現(xiàn)。那個(gè)時(shí)期的tensorflow真的不快,性能上僅和普遍認(rèn)為很慢的theano比肩,在各個(gè)框架中可以算是墊底。但是憑借google強(qiáng)大的開發(fā)實(shí)力,很快支持了新版的cudnn(目前支持cudnn v5.1),在單gpu上的性能追上了其他框架。下圖為https://github.com/soumith/convnet-benchmarks給出的各個(gè)框架在alexnet上單gpu的性能評測。
目前在單gpu的條件下,絕大多數(shù)深度學(xué)習(xí)框架都依賴于cudnn,因此只要硬件計(jì)算能力或者內(nèi)存分配差異不大,最終訓(xùn)練速度不會(huì)相差太大。但是對于大規(guī)模深度學(xué)習(xí)來說,巨大的數(shù)據(jù)量使得單機(jī)很難在有限的時(shí)間完成訓(xùn)練。這時(shí)需要分布式計(jì)算使gpu集群乃至tpu集群并行計(jì)算,共同訓(xùn)練出一個(gè)模型,所以框架的分布式性能是至關(guān)重要的。tensorflow在2016年4月開源了分布式版本,使用16塊gpu可達(dá)單gpu的15倍提速,在50塊gpu時(shí)可達(dá)到40倍提速,分布式的效率很高。目前原生支持的分布式深度學(xué)習(xí)框架不多,只有tensorflow、cntk、deeplearning4j、mxnet等。不過目前tensorflow的設(shè)計(jì)對不同設(shè)備間的通信優(yōu)化得不是很好,其單機(jī)的reduction只能用cpu處理,分布式的通信使用基于socket的rpc,而不是速度更快的rdma,所以其分布式性能可能還沒有達(dá)到最優(yōu)。
google 在2016年2月開源了tensorflow serving19,這個(gè)組件可以將tensorflow訓(xùn)練好的模型導(dǎo)出,并部署成可以對外提供預(yù)測服務(wù)的restful接口,如圖2-2所示。有了這個(gè)組件,tensorflow就可以實(shí)現(xiàn)應(yīng)用機(jī)器學(xué)習(xí)的全流程:從訓(xùn)練模型、調(diào)試參數(shù),到打包模型,最后部署服務(wù),名副其實(shí)是一個(gè)從研究到生產(chǎn)整條流水線都齊備的框架。這里引用tensorflow內(nèi)部開發(fā)人員的描述:“tensorflow serving是一個(gè)為生產(chǎn)環(huán)境而設(shè)計(jì)的高性能的機(jī)器學(xué)習(xí)服務(wù)系統(tǒng)。它可以同時(shí)運(yùn)行多個(gè)大規(guī)模深度學(xué)習(xí)模型,支持模型生命周期管理、算法實(shí)驗(yàn),并可以高效地利用gpu資源,讓tensorflow訓(xùn)練好的模型更快捷方便地投入到實(shí)際生產(chǎn)環(huán)境”。除了tensorflow以外的其他框架都缺少為生產(chǎn)環(huán)境部署的考慮,而google作為廣泛在實(shí)際產(chǎn)品中應(yīng)用深度學(xué)習(xí)的巨頭可能也意識到了這個(gè)機(jī)會(huì),因此開發(fā)了這個(gè)部署服務(wù)的平臺。tensorflow serving可以說是一副王牌,將會(huì)幫tensorflow成為行業(yè)標(biāo)準(zhǔn)做出巨大貢獻(xiàn)。
  tensorflow serving架構(gòu)
tensorboard是tensorflow的一組web應(yīng)用,用來監(jiān)控tensorflow運(yùn)行過程,或可視化computation graph。tensorboard目前支持5種可視化:標(biāo)量(scalars)、圖片(images)、音頻(audio)、直方圖(histograms)和計(jì)算圖(computation graph)。tensorboard的events dashboard可以用來持續(xù)地監(jiān)控運(yùn)行時(shí)的關(guān)鍵指標(biāo),比如loss、學(xué)習(xí)速率(learning rate)或是驗(yàn)證集上的準(zhǔn)確率(accuracy);image dashboard則可以展示訓(xùn)練過程中用戶設(shè)定保存的圖片,比如某個(gè)訓(xùn)練中間結(jié)果用matplotlib等繪制(plot)出來的圖片;graph explorer則可
上一個(gè):南京信帆生物:免疫組化非特異性染色的識別和原因分析
下一個(gè):三角梅花期管理

漢中茶館與茶俗
我的世界內(nèi)存不足啟動(dòng)到一半崩了怎么辦(玩我的世界提示內(nèi)存不足)
騰訊云服務(wù)器怎么導(dǎo)入本地文件里
古風(fēng)撩人情話短句發(fā)朋友圈
如何把重裝系統(tǒng)裝到u盤里(如何下載電腦重裝軟件到u盤)
新品PLC都不行,,我無語
小米4刷機(jī)變磚怎么辦,小米4刷機(jī)失敗變磚怎么解決急急急謝了各位大俠
wifi密碼忘了怎么辦,無線網(wǎng)絡(luò)的密碼忘記了怎么辦
寧可食無肉,不可飲無茶
cn域名審核需要多長時(shí)間?cn域名如何備案?
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos