1.實(shí)現(xiàn)和訓(xùn)練深度學(xué)習(xí)算法為什么要使用Tensorflow?
Tensor=張量=容器,flow=流(我把它理解成數(shù)據(jù)流)
https://zhuanlan.zhihu.com/p/28234370(tensorflow 為何方圣物?)
這篇寫的很好懂,想知道什么是Tensorflow看它。
算法的本質(zhì)就是數(shù)學(xué)模型,說白了就是一堆數(shù)學(xué)公式。你想用計(jì)算機(jī)來實(shí)現(xiàn)算法,其實(shí)就是想他幫你解方程。
將做飯與之類比一下:我們很久很久之前做飯,要打獵、砍柴、生火等等(手工解方程);然后我們發(fā)明了煤氣灶,這樣我們就只用專注于炒菜(Tensorflow實(shí)現(xiàn)深度學(xué)習(xí)算法);現(xiàn)在我們發(fā)現(xiàn)煤氣灶有些缺點(diǎn),不如要自己換煤氣罐不方便、不安全,然后我們就把煤氣灶和其他能彌補(bǔ)它對(duì)應(yīng)缺點(diǎn)的東西結(jié)合和改進(jìn),使用天然氣灶(Tensorflow+Kubernetes)[今天突然覺得這個(gè)例子不太貼切,容我再思考一下]
附上tensorflow的使用方式:
將計(jì)算流程表示成圖;
通過Sessions來執(zhí)行圖計(jì)算;
將數(shù)據(jù)表示為tensors;
使用Variables來保持狀態(tài)信息;
分別使用feeds和fetches來填充數(shù)據(jù)和抓取任意的操作結(jié)果;
TF主要概念介紹:http://blog.csdn.net/stdcoutzyx/article/details/51645396(棒?。?/b>
2.什么是分布式Tensorflow?
隨著設(shè)計(jì)的模型越來越復(fù)雜,模型參數(shù)越來越多,越來越大, 大到什么程度?多到什么程度? 多參數(shù)的個(gè)數(shù)上百億個(gè), 訓(xùn)練的數(shù)據(jù)多到按TB級(jí)別來衡量。大家知道每次計(jì)算一輪,都要計(jì)算梯度,更新參數(shù)。 當(dāng)參數(shù)的量級(jí)上升到百億量級(jí)甚至更大之后, 參數(shù)的更新的性能都是問題。 如果是單機(jī)16個(gè)GPU, 一個(gè)step最多也是處理16個(gè)batch, 這對(duì)于上TB級(jí)別的數(shù)據(jù)來說,不知道要訓(xùn)練到什么時(shí)候。于是就有了分布式的深度學(xué)習(xí)訓(xùn)練方法,或者說框架
tensorflow的分布式有in-graph和between-gragh兩種架構(gòu)模式

in-graph模式和between-graph模式都支持同步和異步更新:
在同步更新的時(shí)候, 每次梯度更新,要等所有分發(fā)出去的數(shù)據(jù)計(jì)算完成后,返回回來結(jié)果之后,把梯度累加算了均值之后, 再更新參數(shù)。 這樣的好處是loss的下降比較穩(wěn)定, 但是這個(gè)的壞處也很明顯, 處理的速度取決于最慢的那個(gè)分片計(jì)算的時(shí)間。
在異步更新的時(shí)候, 所有的計(jì)算節(jié)點(diǎn),各自算自己的, 更新參數(shù)也是自己更新自己計(jì)算的結(jié)果, 這樣的優(yōu)點(diǎn)就是計(jì)算速度快, 計(jì)算資源能得到充分利用,但是缺點(diǎn)是loss的下降不穩(wěn)定, 抖動(dòng)大。
在數(shù)據(jù)量小的情況下, 各個(gè)節(jié)點(diǎn)的計(jì)算能力比較均衡的情況下, 推薦使用同步模式;數(shù)據(jù)量很大,各個(gè)機(jī)器的計(jì)算性能摻差不齊的情況下,推薦使用異步的方式。
PS結(jié)點(diǎn)和worker結(jié)點(diǎn)?
ps節(jié)點(diǎn)就是paramter server的縮寫, 主要是保存和更新參數(shù)的節(jié)點(diǎn), worker節(jié)點(diǎn)主要是負(fù)責(zé)計(jì)算的節(jié)點(diǎn)。
參考:http://www.tensorflow123.cn/baihuatfdistribute.html(白話tensorflow分布式部署和開發(fā))
3. Kubernetes是什么?為什么要在它上面部署Tensorflow?
https://baijiahao.baidu.com/s?id=1577264677500576534&wfr=spider&for=pc
kubernetes是google開源的容器集群管理系統(tǒng)(大管家),提供應(yīng)用部署、維護(hù)、擴(kuò)展機(jī)制等功能,利用kubernetes能方便管理跨集群運(yùn)行容器化的應(yīng)用
4.容器技術(shù)?
容器與虛擬機(jī)擁有著類似的使命:對(duì)應(yīng)用程序及其關(guān)聯(lián)性進(jìn)行隔離,從而構(gòu)建起一套能夠隨處運(yùn)行的自容納單元。此外,容器與虛擬機(jī)還擺脫了對(duì)物理硬件的需求,允許我們更為高效地使用計(jì)算資源,從而提升能源效率與成本效益。
軟件容器帶來的優(yōu)勢(shì)也類似。你不必傳送整個(gè)操作系統(tǒng)和軟件,只需將你的代碼和依賴包打包至可以隨處運(yùn)行的容器即可。
容器比如docker,容器的集群:多個(gè)容器;為了管理所有這些容器,你需要另一套專用軟件,比如Kubernetes
參考:容器是什么鬼?https://news.cnblogs.com/n/561175/
參考:http://blog.csdn.net/wh211212/article/details/53535881?locationNum=4&fps=1
5.容器集群?
容器集群是將多臺(tái)物理機(jī)抽象為邏輯上單一調(diào)度實(shí)體的技術(shù),為?容器化的應(yīng)用 ?提供資源調(diào)度、服務(wù)發(fā)現(xiàn)、彈性伸縮、負(fù)載均衡等功能,同時(shí)監(jiān)控和管理整個(gè)服務(wù)器集群,提供高質(zhì)量、不間斷的應(yīng)用服務(wù)。
6.K8s架構(gòu)

詳細(xì)架構(gòu)參考:http://blog.csdn.net/jincm13/article/details/50886029
基本概念:https://www.cnblogs.com/chris-cp/p/5766153.html