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