TensorFlow是什么?TensorFlow入門與實踐 架構與設計詳解

作者:劉光聰

鏈接:http://www.lxweimin.com/p/a5574ebcdeab

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的計算圖的執行過程。

如下圖所示,Client構建了一個簡單計算圖。它首先將w與x進行矩陣相乘,再與截距b按位相加,最后更新至s。


構造計算圖

Distributed Master

在分布式的運行時環境中,Distributed Master根據Session.run的Fetching參數,從計算圖中反向遍歷,找到所依賴的最小子圖。

然后Distributed Master負責將該子圖再次分裂為多個「子圖片段」,以便在不同的進程和設備上運行這些「子圖片段」。

最后,Distributed Master將這些圖片段派發給Work Service。隨后Work Service啟動「本地子圖」的執行過程。

Distributed Master將會緩存「子圖片段」,以便后續執行過程重復使用這些「子圖片段」,避免重復計算。


執行圖計算

如上圖所示,Distributed Master開始執行計算子圖。在執行之前,Distributed Master會實施一系列優化技術,例如「公共表達式消除」,「常量折疊」等。隨后,Distributed Master負責任務集的協同,執行優化后的計算子圖。

子圖片段


子圖片段

如上圖所示,存在一種合理的「子圖片段」劃分算法。Distributed Master將模型參數相關的OP進行分組,并放置在PS任務上。其他OP則劃分為另外一組,放置在Worker任務上執行。

SEND/RECV節點


插入SEND/RECV節點

如上圖所示,如果計算圖的邊被任務節點分割,Distributed Master將負責將該邊進行分裂,在兩個分布式任務之間插入SEND和RECV節點,實現數據的傳遞。

隨后,Distributed Master將「子圖片段」派發給相應的任務中執行,在Worker Service成為「本地子圖」,它負責執行該子圖的上的OP。

Worker Service

對于每個任務,都將存在相應的Worker Service,它主要負責如下3個方面的職責:

處理來自Master的請求;

調度OP的Kernel實現,執行本地子圖;

協同任務之間的數據通信。


執行本地子圖

Worker Service派發OP到本地設備,執行Kernel的特定實現。它將盡最大可能地利用多CPU/GPU的處理能力,并發地執行Kernel實現。

另外,TensorFlow根據設備類型,對于設備間的SEND/RECV節點進行特化實現:

使用cudaMemcpyAsync的API實現本地CPU與GPU設備的數據傳輸;

對于本地的GPU之間則使用端到端的DMA,避免了跨host CPU昂貴的拷貝過程。

對于任務之間的數據傳遞,TensorFlow支持多協議,主要包括:

gRPC over TCP

RDMA over Converged Ethernet

Kernel Implements

TensorFlow的運行時包含200多個標準的OP,包括數值計算,多維數組操作,控制流,狀態管理等。每一個OP根據設備類型都會存在一個優化了的Kernel實現。在運行時,運行時根據本地設備的類型,為OP選擇特定的Kernel實現,完成該OP的計算。


TensorFlow Core

其中,大多數Kernel基于Eigen::Tensor實現。Eigen::Tensor是一個使用C++模板技術,為多核CPU/GPU生成高效的并發代碼。但是,TensorFlow也可以靈活地直接使用cuDNN實現更高效的Kernel。

此外,TensorFlow實現了矢量化技術,使得在移動設備,及其滿足高吞吐量,以數據為中心的應用需求,實現更高效的推理。

如果對于復合OP的子計算過程很難表示,或執行效率低下,TensorFlow甚至支持更高效的Kernle實現的注冊,其擴展性表現相當優越。

技術棧

最后,按照TensorFlow的軟件層次,通過一張表格羅列TensorFlow的技術棧,以便更清晰地對上述內容做一個簡單回顧。



相關學習資料移步:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容