In-graph 與 Between-graph 副本模式
下圖顯示兩者差異,而這邊也在進行描述。
In-graph:只有一個 Clinet(主要呼叫tf::Session行程),并將里面變數與 op 指定給對應的 Job 完成,因此資料分發只由一個 Client 完成。這種方式設定簡單,其他節點只需要 join 操作,并提供一個 gRPC 位址來等待任務。但是訓練資料只在單一節點,因此要把資料分發到不同機器時,會影響平行訓練效能。可理解成所有 op 都在同一個 Graph 中,伺服器只需要做join()功能.
Between-graph:多個獨立Client 建立相同Graph(包含變數),并透過tf.train.replica_device_setter將這些參數映射到ps 上,即訓練的變數儲存在Parameter Server,而資料不用分發,資料分片(Shards )會存在個計算節點,因此個節點自己算自己的,算完后,把要更新變數告知Parameter Server 進行更新。適合在 TB 級別的資料量使用,節省大量資料傳輸時間,也是深度學習推薦模式。
然而又隨著各家科技巨頭們,紛紛透過開放式原始碼方式,釋出自家的深度學習與機器學習框架后,使許多中小型企業得以參與這場AI 全民運動,并希望利用該技術從既有的公司資源中,萃取出有價值的模型,來增加公司產品的優勢。其中在開源碼深度學習框架中,又以 Brain Team 開源的 TensorFlow 最受歡迎,其利用開源方式來獲得社群共享的力量,在短短時間內加速了機器學習的進展。
TensorFlow
TensorFlow?是利用資料流圖(Data Flow Graphs)來表達數值運算的開放式原始碼函式庫。資料流圖中的節點(Nodes)被用來表示數學運算,而邊(Edges)則用來表示在節點之間互相聯系的多維資料陣列,即張量(Tensors)。它靈活的架構讓你能夠在不同平臺上執行運算,例如 PC 中的一個或多的 CPU(或GPU)、智慧手持裝置與伺服器等。 TensorFlow 最初是機器智能研究所的研究員和工程師開發而成,主要用于機彩票開獎器學習與深度神經網路方面研究。
TensorFlow 其實在意思上是要用兩個部分來解釋,Tensor 與 Flow:
Tensor:是中文翻譯是張量,其實就是一個n維度的陣列或列表。如一維 Tensor 就是向量,二維 Tensor 就是矩陣等等.
Flow:是指 Graph 運算過程中的資料流.
Data Flow Graphs
資料流圖(Data Flow Graphs)是一種有向圖的節點(Node)與邊(Edge)來描述計算過程。圖中的節點表示數學操作,亦表示資料I/O 端點; 而邊則表示節點之間的關系,用來傳遞操作之間互相使用的多維陣列(Tensors),而Tensor 是在圖中流動的資料表示。一旦節點相連的邊傳來資料流,這時節點就會被分配到運算裝置上異步(節點之間)或同步(節點之內)的執行。