TensorFlow架構分析探討
TensorFlow是什么?
TensorFlow基于數據流圖,用于大規模分布式數值計算的開源框架。節點表示某種抽象的計算,邊表示節點之間相互聯系的張量。
計算圖實例
TensorFlow支持各種異構的平臺,支持多CPU/GPU,服務器,移動設備,具有良好的跨平臺的特性;TensorFlow架構靈活,能夠支持各種網絡模型,具有良好的通用性;此外,TensorFlow架構具有良好的可擴展性,對OP的擴展支持,Kernel特化方面表現出眾。
TensorFlow最初由Google大腦的研究員和工程師開發出來,用于機器學習和神經網絡方面的研究,于2015.10宣布開源,在眾多深度學習框架中脫穎而出,在Github上獲得了最多的Star量。
本文將闡述TensorFlow的系統架構,幫助讀者加深理解TensorFlow的工作機理。
本文假設讀者已經了解TensorFlow的基本編程模型,包括計算圖, OP, Tensor, Session等基本概念。
系統概述 TensorFlow的系統結構以C API為界,將整個系統分為「前端」和「后端」兩個子系統:
前端系統:提供編程模型,負責構造計算圖;
后端系統:提供運行時環境,負責執行計算圖。
TensorFlow系統架構
如上圖所示,重點關注系統中如下4個基本組件,它們是系統分布式運行機制的核心。
Client
Client是前端系統的主要組成部分,它是一個支持多語言的編程環境。它提供基于計算圖的編程模型,方便用戶構造各種復雜的計算圖,實現各種形式的模型設計。
Client通過Session為橋梁,連接TensorFlow后端的「運行時」,并啟動計算圖的執行過程。
Distributed Master
在分布式的運行時環境中,Distributed Master根據Session.run的Fetching參數,從計算圖中反向遍歷,找到所依賴的「最小子圖」。
然后,Distributed Master負責將該「子圖」再次分裂為多個「子圖片段」,以便在不同的進程和設備上運行這些「子圖片段」。
最后,Distributed Master將這些「子圖片段」派發給Work Service;隨后Work Service啟動「子圖片段」的執行過程。
Worker Service
對于每以個任務,TensorFlow都將啟動一個Worker Service。Worker Service將按照計算圖中節點之間的依賴關系,根據當前的可用的硬件環境(GPU/CPU),調用OP的Kernel實現完成OP的運算(一種典型的多態實現技術)。
另外,Worker Service還要負責將OP運算的結果發送到其他的Work Service;或者接受來自其他Worker Service發送給它的OP運算的結果。
Kernel Implements
Kernel是OP在某種硬件設備的特定實現,它負責執行OP的運算。
組件交互
組件交互
如上圖所示,假設存在兩個任務:
/job:ps/task:0: 負責模型參數的存儲和更新
/job:worker/task:0: 負責模型的訓練或推理
接下來,我們將進一步抽絲剝繭,逐漸挖掘出TensorFlow計算圖的運行機制。
客戶端 Client基于TensorFlow的編程接口,構造計算圖。目前,TensorFlow主流支持Python和C++的編程接口,并對其他編程語言接口的支持日益完善。
此時,TensorFlow并未執行任何計算。直至建立Session會話,并以Session為橋梁,建立Client與后端運行時的通道,將Protobuf格式的GraphDef發送至Distributed Master。
也就是說,當Client對OP結果進行求值時,將觸發Distributed Master的計算圖的執行過程。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%