TensorFlow架構學習
0 - TensorFlow
基於數據流圖,節點表示某種抽象計算,邊表示節點之間聯系的張量。
Tensorflow結構靈活,能夠支持各種網絡模型,有良好的通用性和擴展性。
1 - 系統概述
TensorFlow以$C\ API$為界限,分為前端系統(提供編程模型,負責構造計算圖)以及後端系統(提供運行時環境,負責執行計算圖),如下圖。
1.1 - 模塊Client
Client是一個支持多語言的編程環境,它提供基於計算圖的編程模型,方便用戶構造各種復雜的計算圖,實現各種形式的模型設計和構建。Client通過Session連接後端系統,啟動計算圖的執行過程。
1.2 - 模塊Distributed Master
在分布式運行環境中,Distributed Master從計算圖中反向遍歷,找到所依賴的最小值圖,然後將最小子圖分裂成多個子圖片段分布到不同的進程和設備上運行,然後將多個子圖片段被分派給Work Service,隨後Work Service啟動子圖片段執行過程。
1.3 - 模塊Worker Service
對於每一個任務,啟動一個Worker Service,按照計算圖中的節點依賴關系,根據當前的硬件環境(GPU or CPU),調用$OP$的$Kernel$實現完成$OP$的運算(一種典型的多態實現技術)。並且因為分布式的環境,Worker Service需要負責將$OP$運算的結果發送到其他的Work Service或者從其他的Work Service接受其$OP$運算的結果。
1.4 - Kernel Implements
$Kernel$是$OP$在某種硬件設備的特定實現,其負責執行$OP$計算。TensorFlow運行時包含200多個標準的$OP$(包括數值計算、多維數組操作、控制流、狀態管理等)。每一個$OP$都根據設備類型實現了一個優化的$Kernel$,運行時根據本地設備類型,為$OP$選擇特定的$Kernel$實現。其中,大多數$Kernel$基於$Eigen::Tensor$實現(一個使用$C++$模板技術,為多核$CPU/GPU$生成高效的並發代碼),但同時,TensorFlow也可以直接使用$cuDNN$實現更加高效的$Kernel$。
參考資料
https://www.jianshu.com/p/a5574ebcdeab
TensorFlow架構學習