偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

深度學(xué)習(xí)框架TensorFlow在Kubernetes上的實(shí)踐

大數(shù)據(jù)
神經(jīng)網(wǎng)絡(luò)最早受到人類大腦工作原理的啟發(fā),我們知道人的大腦是很復(fù)雜的結(jié)構(gòu),它可以被分為很多區(qū)域,比如聽覺中心、視覺中心,我在讀研究中心的時候,做視頻有計算機(jī)視覺研究室,做語言有語言所,語音有語音所,不同的功能在學(xué)科劃分中已經(jīng)分開了,這個和我們?nèi)祟悓Υ竽X理解多多少少有一些關(guān)系。之后科學(xué)家發(fā)現(xiàn)人類大腦是一個通用的計算模型。

什么是深度學(xué)習(xí)?

深度學(xué)習(xí)這個名詞聽了很多次,它到底是什么東西,它背后的技術(shù)其實(shí)起源于神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)最早受到人類大腦工作原理的啟發(fā),我們知道人的大腦是很復(fù)雜的結(jié)構(gòu),它可以被分為很多區(qū)域,比如聽覺中心、視覺中心,我在讀研究中心的時候,做視頻有計算機(jī)視覺研究室,做語言有語言所,語音有語音所,不同的功能在學(xué)科劃分中已經(jīng)分開了,這個和我們?nèi)祟悓Υ竽X理解多多少少有一些關(guān)系。之后科學(xué)家發(fā)現(xiàn)人類大腦是一個通用的計算模型。

科學(xué)家做了這樣一個實(shí)驗,把小白鼠的聽覺中心的神經(jīng)和耳朵通路剪斷,視覺輸入接到聽覺中心上,過了幾個月,小白鼠可以通過聽覺中心處理視覺信號。這就說明人類大腦工作原理是一樣的,神經(jīng)元工作原理一樣,只是需要經(jīng)過不斷的訓(xùn)練?;谶@樣的假設(shè),神經(jīng)學(xué)家做了這樣的嘗試,希望給盲人能夠帶來重新看到世界的希望,他們相當(dāng)于是把電極接到舌頭上,通過攝像機(jī)把不同的像素傳到舌頭上,使得盲人有可能通過舌頭看到世界。對人類神經(jīng)工作原理的進(jìn)一步理解讓我們看到深度學(xué)習(xí)有望成為一種通用的學(xué)習(xí)模型。

上圖給出了神經(jīng)網(wǎng)絡(luò)的大致結(jié)構(gòu)。圖中左側(cè)是人類的神經(jīng)元,右側(cè)是神經(jīng)網(wǎng)絡(luò)的神經(jīng)元。神經(jīng)網(wǎng)絡(luò)的神經(jīng)元最早受到了人類神經(jīng)元結(jié)構(gòu)的啟發(fā),并試圖模型人類神經(jīng)元的工作方式。具體的技術(shù)這里不做過深的討論。上圖中下側(cè)給出的是人類神經(jīng)網(wǎng)絡(luò)和人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network)的對比,在計算機(jī)神經(jīng)網(wǎng)絡(luò)中,我們需要明確的定義輸入層、輸出層。合理的利用人工神經(jīng)網(wǎng)絡(luò)的輸入輸出就可以幫助我們解決實(shí)際的問題。

神經(jīng)網(wǎng)絡(luò)最核心的工作原理,是要通過給定的輸入信號轉(zhuǎn)化為輸出信號,使得輸出信號能夠解決需要解決的問題。比如在完成文本分類問題時,我們需要將文章分為體育或者藝術(shù)。那么我們可以將文章中的單詞作為輸入提供給神經(jīng)網(wǎng)絡(luò),而輸出的節(jié)點(diǎn)就代表不同的種類。文章應(yīng)該屬于哪一個種類,那么我們希望對應(yīng)的輸出節(jié)點(diǎn)的輸出值為1,其他的輸出值為0。通過合理的設(shè)置神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和訓(xùn)練神經(jīng)網(wǎng)絡(luò)中的參數(shù),訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型就可以幫助我們判斷一篇文章應(yīng)該屬于哪一個種類了。

深度學(xué)習(xí)在圖像識別中的應(yīng)用

深度學(xué)習(xí),它最初的應(yīng)用,在于圖像識別。最經(jīng)典的應(yīng)用就是Imagenet的數(shù)據(jù)集。

ImageNet是一個非常大的數(shù)據(jù)集,它里面有1500萬張圖片。下圖展示了數(shù)據(jù)集中一張樣例圖片。

在深度學(xué)習(xí)算法被應(yīng)用之前,傳統(tǒng)的機(jī)器學(xué)習(xí)方法對圖像處理的能力有限。在2012年之前,***的機(jī)器學(xué)習(xí)算法能夠達(dá)到的錯誤率為25%,而且已經(jīng)很難再有新的突破了。在2012年時,深度學(xué)習(xí)***被應(yīng)用在在ImageNet數(shù)據(jù)集上,直接將錯誤率降低到了16%。在隨后的幾年中,隨著深度學(xué)習(xí)算法的改進(jìn),錯誤率一直降低到2016年的3.5%。在ImageNet數(shù)據(jù)集上,人類分類的錯誤率大概為5.1%。我們可以看到,機(jī)器的錯誤率比人的錯誤率更低,這是深度學(xué)習(xí)帶來的技術(shù)突破。

什么是TensorFlow

TensorFlow是谷歌在去年11月份開源出來的深度學(xué)習(xí)框架。開篇我們提到過AlphaGo,它的開發(fā)團(tuán)隊DeepMind已經(jīng)宣布之后的所有系統(tǒng)都將基于TensorFlow來實(shí)現(xiàn)。TensorFlow一款非常強(qiáng)大的開源深度學(xué)習(xí)開源工具。它可以支持手機(jī)端、CPU、GPU以及分布式集群。TensorFlow在學(xué)術(shù)界和工業(yè)界的應(yīng)用都非常廣泛。在工業(yè)界,基于TensorFlow開發(fā)的谷歌翻譯、谷歌RankBrain等系統(tǒng)都已經(jīng)上線。在學(xué)術(shù)界很多我在CMU、北大的同學(xué)都表示TensorFlow是他們實(shí)現(xiàn)深度學(xué)習(xí)算法的***工具。

上面的ppt給出了一個簡單的TensorFlow程序樣例,這個樣例實(shí)現(xiàn)了向量加法的功能。TensorFlow提供了Python和C++的API,但Python的API更全面,所以大部分TensorFlow程序都是通過Python實(shí)現(xiàn)的。在上面程序的***行我們通過import將TensorFlow加載進(jìn)來。在TensorFlow中所有的數(shù)據(jù)都是通過張量(Tensor)的方式存儲,要計算張量中數(shù)據(jù)的具體取值,我們需要通過一個會話(session)。

上面代碼中的第二行展示了如何生成會話。會話管理運(yùn)行一個TensorFlow程序所需要的計算資源。TensorFlow中一個比較特殊的張量是變量(tf.Variable),在使用變量之前,我們需要明確調(diào)用變量初始化的過程。在上面的代碼***一行,我們可以看到要得到結(jié)果張量output的取值,我們需要明確調(diào)用計算張量取值的過程。

通過TensorFlow實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)是非常簡單的。通過TFLearn或者TensorFlow-Slim可以在10行之內(nèi)實(shí)現(xiàn)MNIST手寫體數(shù)字識別問題。上面的ppt展示了TensorFlow對于不同神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的支持,可以看出,TensorFlow可以在很短的代碼內(nèi)支持各種主要的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。

雖然TensorFlow可以很快的實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的功能,不過單機(jī)版的TensorFlow卻很難訓(xùn)練大規(guī)模的深層神經(jīng)網(wǎng)絡(luò)。

這張圖給出了谷歌在2015年提出的Inception-v3模型。這個模型在ImageNet數(shù)據(jù)集上可以達(dá)到95%的正確率。然而,這個模型中有2500萬個參數(shù),分類一張圖片需要50億次加法或者乘法運(yùn)算。即使只是使用這樣大規(guī)模的神經(jīng)網(wǎng)絡(luò)已經(jīng)需要非常大的計算量了,如果需要訓(xùn)練深層神經(jīng)網(wǎng)絡(luò),那么需要更大的計算量。神經(jīng)網(wǎng)絡(luò)的優(yōu)化比較復(fù)雜,沒有直接的數(shù)學(xué)方法求解,需要反復(fù)迭代。在單機(jī)上要把Inception-v3模型訓(xùn)練到78%的準(zhǔn)確率大概需要5個多月的時間。如果要訓(xùn)練到95%的正確率需要數(shù)年。這對于實(shí)際的生產(chǎn)環(huán)境是完全無法忍受的。

TensorFlow on Kubernetes

如我們上面所介紹的,在單機(jī)環(huán)境下是無法訓(xùn)練大型的神經(jīng)網(wǎng)絡(luò)的。在谷歌的內(nèi)部,Google Brain以及TensorFlow都跑在谷歌內(nèi)部的集群管理系統(tǒng)Borg上。我在谷歌電商時,我們使用的商品分類算法就跑在1千多臺服務(wù)器上。在谷歌外,我們可以將TensorFlow跑在Kubernetes上。在介紹如何將TensorFlow跑在Kubernetes上之前,我們先來介紹一下如何并行化的訓(xùn)練深度學(xué)習(xí)的模型。

深度學(xué)習(xí)模型常用的有兩種分布式訓(xùn)練方式。一種是同步更新,另一種是異步更新。如上面的ppt所示,在同步更新模式下,所有服務(wù)器都會統(tǒng)一讀取參數(shù)的取值,計算參數(shù)梯度,***再統(tǒng)一更新。而在異步更新模式下,不同服務(wù)器會自己讀取參數(shù),計算梯度并更新參數(shù),而不需要與其他服務(wù)器同步。同步更新的***問題在于,不同服務(wù)器需要同步完成所有操作,于是快的服務(wù)器需要等待慢的服務(wù)器,資源利用率會相對低一些。而異步模式可能會使用陳舊的梯度更新參數(shù)導(dǎo)致訓(xùn)練的效果受到影響。不同的更新模式各有優(yōu)缺點(diǎn),很難統(tǒng)一的說哪一個更好,需要具體問題具體分析。

無論使用哪種更新方式,使用分布式TensorFlow訓(xùn)練深度學(xué)習(xí)模型需要有兩種類型的服務(wù)器,一種是參數(shù)服務(wù)器,一種是計算服務(wù)器。參數(shù)服務(wù)器管理并保存神經(jīng)網(wǎng)絡(luò)參數(shù)的取值;計算服務(wù)器負(fù)責(zé)計算參數(shù)的梯度。

在TensorFlow中啟動分布式深度學(xué)習(xí)模型訓(xùn)練任務(wù)也有兩種模式。一種為In-graph replication。在這種模式下神經(jīng)網(wǎng)絡(luò)的參數(shù)會都保存在同一個TensorFlow計算圖中,只有計算會分配到不同計算服務(wù)器。另一種為Between-graph replication,這種模式下所有的計算服務(wù)器也會創(chuàng)建參數(shù),但參數(shù)會通過統(tǒng)一的方式分配到參數(shù)服務(wù)器。因為In-graph replication處理海量數(shù)據(jù)的能力稍弱,所以Between-graph replication是一個更加常用的模式。

***一個問題,我們剛剛提到TensorFlow是支持以分布式集群的方式運(yùn)行的,那么為什么還需要Kubernetes?如果我們將TensorFlow和Hadoop系統(tǒng)做一個簡單的類比就可以很清楚的解釋這個問題。大家都知道Hadoop系統(tǒng)主要可以分為Yarn、HDFS和mapreduce計算框架,那么TensorFlow就相當(dāng)于只是Hadoop系統(tǒng)中Mapreduce計算框架的部分。

TensorFlow沒有類似Yarn的調(diào)度系統(tǒng),也沒有類似HDFS的存儲系統(tǒng)。這就是Kubernetes需要解決的部分。Kubernetes可以提供任務(wù)調(diào)度、監(jiān)控、失敗重啟等功能。沒有這些功能,我們很難手工的去每一臺機(jī)器上啟動TensorFlow服務(wù)器并時時監(jiān)控任務(wù)運(yùn)行的狀態(tài)。除此之外,分布式TensorFlow目前不支持生命周期管理,結(jié)束的訓(xùn)練進(jìn)程并不會自動關(guān)閉,這也需要進(jìn)行額外的處理。

鄭澤宇,谷歌高級工程師。從 2013 年加入谷歌至今,鄭澤宇作為主要技術(shù)人員參與并領(lǐng)導(dǎo)了多個大數(shù)據(jù)項目,擁有豐富機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘工業(yè)界及科研項目經(jīng)驗。

責(zé)任編輯:武曉燕 來源: 網(wǎng)絡(luò)大數(shù)據(jù)
相關(guān)推薦

2020-11-26 18:30:33

機(jī)器學(xué)習(xí)Kubernetes開發(fā)

2017-11-27 17:29:43

深度學(xué)習(xí)TensorFlow安卓設(shè)備

2022-11-13 08:11:03

TensorFlow人工智能開源

2017-03-31 09:45:34

TensorFlow深度學(xué)習(xí)

2021-06-05 06:52:16

Kubernetes

2017-09-21 12:29:58

深度學(xué)習(xí)TensorFlow智能終端

2019-09-01 19:19:04

TensorFlowPyTorch深度學(xué)習(xí)

2017-12-01 15:24:04

TensorFlow深度學(xué)習(xí)教程

2022-12-22 13:18:54

深度學(xué)習(xí)框架

2018-03-14 08:10:44

深度學(xué)習(xí)

2018-05-22 10:30:37

深度學(xué)習(xí)蘑菇街移動端

2020-02-25 15:04:48

深度學(xué)習(xí)編程人工智能

2017-03-01 13:36:41

TensorFlowTheano框架

2018-10-15 10:08:53

程序員技能深度學(xué)習(xí)

2017-07-05 14:21:30

框架TensorFlowTheano

2017-05-22 13:15:45

TensorFlow深度學(xué)習(xí)

2017-02-21 10:00:44

大數(shù)據(jù)深度學(xué)習(xí)框架對比

2019-03-06 09:55:54

Python 開發(fā)編程語言

2023-01-26 11:56:31

Kubernete虛擬機(jī)k3s

2022-01-06 10:04:17

深度學(xué)習(xí)編程人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號