In-graph 與 Between-graph 副本模式
下圖顯示兩者差異,而這邊也在進行描述。
In-graph:只有一個 Clinet(主要呼叫tf::Session行程)厚宰,并將里面變數(shù)與 op 指定給對應(yīng)的 Job 完成遂填,因此資料分發(fā)只由一個 Client 完成澈蝙。這種方式設(shè)定簡單,其他節(jié)點只需要 join 操作灯荧,并提供一個 gRPC 位址來等待任務(wù)。但是訓(xùn)練資料只在單一節(jié)點哆窿,因此要把資料分發(fā)到不同機器時厉斟,會影響平行訓(xùn)練效能挚躯〔粱啵可理解成所有 op 都在同一個 Graph 中,伺服器只需要做join()功能.
Between-graph:多個獨立Client 建立相同Graph(包含變數(shù))缩搅,并透過tf.train.replica_device_setter將這些參數(shù)映射到ps 上,即訓(xùn)練的變數(shù)儲存在Parameter Server硼瓣,而資料不用分發(fā)域蜗,資料分片(Shards )會存在個計算節(jié)點,因此個節(jié)點自己算自己的霉祸,算完后,把要更新變數(shù)告知Parameter Server 進行更新慢宗。適合在 TB 級別的資料量使用,節(jié)省大量資料傳輸時間镜沽,也是深度學(xué)習(xí)推薦模式贱田。
然而又隨著各家科技巨頭們缅茉,紛紛透過開放式原始碼方式男摧,釋出自家的深度學(xué)習(xí)與機器學(xué)習(xí)框架后拇颅,使許多中小型企業(yè)得以參與這場AI 全民運動奏司,并希望利用該技術(shù)從既有的公司資源中樟插,萃取出有價值的模型,來增加公司產(chǎn)品的優(yōu)勢搪缨。其中在開源碼深度學(xué)習(xí)框架中,又以 Brain Team 開源的 TensorFlow 最受歡迎勉吻,其利用開源方式來獲得社群共享的力量旅赢,在短短時間內(nèi)加速了機器學(xué)習(xí)的進展。
TensorFlow
TensorFlow?是利用資料流圖(Data Flow Graphs)來表達數(shù)值運算的開放式原始碼函式庫煮盼。資料流圖中的節(jié)點(Nodes)被用來表示數(shù)學(xué)運算,而邊(Edges)則用來表示在節(jié)點之間互相聯(lián)系的多維資料陣列香到,即張量(Tensors)。它靈活的架構(gòu)讓你能夠在不同平臺上執(zhí)行運算悠就,例如 PC 中的一個或多的 CPU(或GPU)充易、智慧手持裝置與伺服器等。 TensorFlow 最初是機器智能研究所的研究員和工程師開發(fā)而成盹靴,主要用于機彩票開獎器學(xué)習(xí)與深度神經(jīng)網(wǎng)路方面研究。
TensorFlow 其實在意思上是要用兩個部分來解釋梭冠,Tensor 與 Flow:
Tensor:是中文翻譯是張量,其實就是一個n維度的陣列或列表控漠。如一維 Tensor 就是向量悬钳,二維 Tensor 就是矩陣等等.
Flow:是指 Graph 運算過程中的資料流.
Data Flow Graphs
資料流圖(Data Flow Graphs)是一種有向圖的節(jié)點(Node)與邊(Edge)來描述計算過程柬脸。圖中的節(jié)點表示數(shù)學(xué)操作毙驯,亦表示資料I/O 端點; 而邊則表示節(jié)點之間的關(guān)系灾测,用來傳遞操作之間互相使用的多維陣列(Tensors)爆价,而Tensor 是在圖中流動的資料表示媳搪。一旦節(jié)點相連的邊傳來資料流,這時節(jié)點就會被分配到運算裝置上異步(節(jié)點之間)或同步(節(jié)點之內(nèi))的執(zhí)行序愚。