了解TensorFlow框架

2015年9月,Google于TensorFlow開(kāi)源之際,發(fā)布了TensorFlow白皮書(shū),介紹了TensorFlow的設(shè)計(jì)理念和實(shí)現(xiàn)方式。現(xiàn)在流行的大部分深度學(xué)習(xí)框架,都基于所謂的“數(shù)據(jù)流圖”編程模型(又稱“計(jì)算圖”),為我們今后的編程提供了一種可選的編程范式。在本文中,我將以問(wèn)答的形式解釋關(guān)于TensorFlow的種種疑問(wèn)。

Qustion 1:“數(shù)據(jù)流圖”編程模型與傳統(tǒng)編程模型的區(qū)別?

首先,“數(shù)據(jù)流圖”的核心是一個(gè)有向圖,圖中的節(jié)點(diǎn)表示運(yùn)算操作,邊表示數(shù)據(jù),整個(gè)圖展現(xiàn)了數(shù)據(jù)的流動(dòng),因此稱為數(shù)據(jù)流圖。下圖是一個(gè)示例。

在傳統(tǒng)編程中,雖然我們也是對(duì)數(shù)據(jù)進(jìn)行操作,但基本的三種控制邏輯“順序、選擇、循環(huán)”導(dǎo)致我們只能按照單一的流程處理數(shù)據(jù),相當(dāng)于數(shù)據(jù)流圖只是一條線,而不是真正的圖。換句話說(shuō),傳統(tǒng)編程模型解決的是順序操作流程,而數(shù)據(jù)流圖則提供了并行計(jì)算的解決方案。其次,數(shù)據(jù)流圖是數(shù)據(jù)驅(qū)動(dòng)的,而不是指令驅(qū)動(dòng)的。程序只規(guī)定數(shù)據(jù)的流向,而不能規(guī)定每一個(gè)操作何時(shí)執(zhí)行,這就在另一個(gè)層面上提高了并行計(jì)算能力。最后,數(shù)據(jù)流圖(我們這里只探討靜態(tài)數(shù)據(jù)流圖)的定義和執(zhí)行是分開(kāi)的,用戶不能像往常一樣在某個(gè)操作處打斷點(diǎn)查看輸出內(nèi)容,這削弱了該模型的調(diào)試能力,是為性能優(yōu)化而付出的代價(jià)。

Qustion 2:TensorFlow的系統(tǒng)架構(gòu)什么樣?

TensorFlow框架包含三個(gè)模塊,分別是client、master和worker,它們之間的邏輯關(guān)系如下圖所示。

左側(cè)為單機(jī)模式,右側(cè)為分布式模式。client提供用戶使用的編程接口,比如Python、C++ API等。master負(fù)責(zé)接受client的請(qǐng)求,構(gòu)造數(shù)據(jù)流圖,并分配任務(wù)給worker。在單機(jī)模式中,只有一個(gè)worker,負(fù)責(zé)計(jì)算數(shù)據(jù)流圖中的所有計(jì)算任務(wù)。在分布式模式中,master需要為不同的worker分配不同的任務(wù),以使總用時(shí)最小。

Question 3:分布式模式中,master如何合理地為多個(gè)worker分配任務(wù)?

master需要預(yù)先估算數(shù)據(jù)流圖中各個(gè)節(jié)點(diǎn)的數(shù)據(jù)量和計(jì)算時(shí)長(zhǎng),估計(jì)數(shù)據(jù)量是為了保證各個(gè)設(shè)備的內(nèi)存占用相差不大,估計(jì)計(jì)算時(shí)長(zhǎng)是為了使總用時(shí)最短。這一步的算法在TensorFlow中稱為Node Placement,即為每個(gè)節(jié)點(diǎn)尋找一個(gè)放置的位置。該算法會(huì)根據(jù)輸入輸出數(shù)據(jù)的規(guī)模、運(yùn)算符種類來(lái)估算。此外,也可以根據(jù)實(shí)際運(yùn)行過(guò)程中的實(shí)測(cè)結(jié)果來(lái)決定。

Question 4:分布式設(shè)備間的數(shù)據(jù)傳輸怎么實(shí)現(xiàn)?

當(dāng)master為各個(gè)設(shè)備劃分好任務(wù)后,這些設(shè)備間不可避免地要進(jìn)行數(shù)據(jù)傳輸。TensorFlow的做法如下圖所示。

首先,對(duì)跨機(jī)器的數(shù)據(jù)傳輸做了一層隔離,A設(shè)備中增加Send節(jié)點(diǎn),用來(lái)對(duì)外發(fā)送數(shù)據(jù),B設(shè)備中增加Receive節(jié)點(diǎn),用來(lái)接收數(shù)據(jù)。這樣,Send和Receive之間的通信與設(shè)備內(nèi)部的通信可以使用完全不同的兩套方案,簡(jiǎn)化了內(nèi)部邏輯。實(shí)際實(shí)現(xiàn)中,Send和Receive之間通過(guò)TCP或RDMA的方式進(jìn)行通信。

Question 5:如何scheduling?

當(dāng)用戶喂入數(shù)據(jù),啟動(dòng)數(shù)據(jù)流圖后,TensorFlow如何決定各個(gè)節(jié)點(diǎn)的執(zhí)行順序呢?樸素的想法是,每個(gè)節(jié)點(diǎn)執(zhí)行完后通知與之相連的下一個(gè)節(jié)點(diǎn),但如果下個(gè)節(jié)點(diǎn)有多個(gè)輸入,它仍然無(wú)法啟動(dòng),必須等到所有輸入都到位后才能開(kāi)始。因此TensorFlow使用了依賴計(jì)數(shù)的機(jī)制,每個(gè)節(jié)點(diǎn)記錄其尚未滿足的依賴的個(gè)數(shù),當(dāng)個(gè)數(shù)降為0時(shí),啟動(dòng)該節(jié)點(diǎn)。這一方案完美體現(xiàn)了數(shù)據(jù)驅(qū)動(dòng)的設(shè)計(jì)理念。

Question 6:反向傳播的數(shù)據(jù)依賴怎么處理?

一旦考慮反向傳播,數(shù)據(jù)流圖就沒(méi)那么簡(jiǎn)單了。雖然用戶不必手動(dòng)構(gòu)造反向數(shù)據(jù)流,但TensorFlow會(huì)自動(dòng)為我們構(gòu)造,就像下圖這個(gè)樣子。

仔細(xì)觀察上圖,可以發(fā)現(xiàn)很多跨越數(shù)層的依賴,比如從MatMul到dAdd的灰色連線。這會(huì)導(dǎo)致GPU的內(nèi)存占用急劇增大,因?yàn)閹缀趺總€(gè)階段計(jì)算的中間結(jié)果都不能丟棄。TensorFlow針對(duì)這種情況采取了若干種優(yōu)化措施:(1)用更復(fù)雜的啟發(fā)式算法調(diào)整圖的執(zhí)行順序;(2)反向傳播時(shí)重新計(jì)算前向傳播的中間結(jié)果;(3)把中間結(jié)果保存到CPU內(nèi)存中。

結(jié)語(yǔ)

Tensorflow開(kāi)源至今,已經(jīng)有了長(zhǎng)足的發(fā)展。最新版本的實(shí)現(xiàn)可能與本文所述不再一致,但設(shè)計(jì)者的初衷不變,都是為了提供一個(gè)高擴(kuò)展性、快速、高效的機(jī)器學(xué)習(xí)計(jì)算平臺(tái)。

參考資料

TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems Google Research

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,202評(píng)論 3 426
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,742評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,580評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,297評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,688評(píng)論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,875評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,438評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,183評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,384評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,612評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,022評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,297評(píng)論 1 292
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,093評(píng)論 3 397
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,330評(píng)論 2 377

推薦閱讀更多精彩內(nèi)容

  • 下班的時(shí)候下起了暴雨。 同事問(wèn)我有沒(méi)有傘,我說(shuō)沒(méi)有。 同事說(shuō),別人在等傘,你在等雨停。 楊同學(xué)在下班前幾分鐘發(fā)來(lái)了...
    喝喝酒啊閱讀 267評(píng)論 0 0
  • 剛從學(xué)校畢業(yè),參加工作。總是希望能夠像大人一樣被尊重,像小孩一樣被包容。然而現(xiàn)實(shí)往往相反。人們把你當(dāng)小孩一樣隨意使...
    STRANGER_WHY閱讀 132評(píng)論 0 0
  • “一白遮百丑,一斑毀所有”,祛斑美白是所有女性在追求美麗道路上的一大煩惱。女人隨著年齡的增大,體內(nèi)代謝功能減退,臉...
    xiashe3853閱讀 561評(píng)論 0 0
  • 怎樣操作才能把CAD圖紙直接轉(zhuǎn)換成BMP圖片格式?將CAD圖紙文件進(jìn)行格式間的轉(zhuǎn)換,相信從事CAD相關(guān)工作的人經(jīng)常...
    周周周大璇閱讀 567評(píng)論 0 4
  • 【佳人千古】 第二篇 日月行客 1月練,現(xiàn)代詞篇 戲曲,中國(guó)獨(dú)有的藝術(shù)明珠,經(jīng)久不衰,亙古不絕。我聽(tīng)不進(jìn)戲,不...
    Cheryl冷清秋閱讀 332評(píng)論 0 2