0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

Tensorflowers ? 來源:工程師李察 ? 2019-01-26 14:48 ? 次閱讀

TensorFlow 是為了大規(guī)模分布式訓(xùn)練和推理而設(shè)計(jì)的,不過它在支持新機(jī)器學(xué)習(xí)模型和系統(tǒng)級(jí)優(yōu)化的實(shí)驗(yàn)中的表現(xiàn)也足夠靈活。

本文對(duì)能夠同時(shí)兼具規(guī)模性和靈活性的系統(tǒng)架構(gòu)進(jìn)行了闡述。設(shè)定的人群是已基本熟悉 TensorFlow 編程概念,例如 computation graph, operations, and sessions。有關(guān)這些主題的介紹,請(qǐng)參閱

https://tensorflow.google.cn/guide/low_level_intro?hl=zh-CN。如已熟悉Distributed TensorFlow,本文對(duì)您也很有幫助。行至文尾,您應(yīng)該能了解 TensorFlow 架構(gòu),足以閱讀和修改核心 TensorFlow 代碼了。

概覽

TensorFlow runtime 是一個(gè)跨平臺(tái)庫。圖 1 說明了它的一般架構(gòu)。 C API layer 將不同語言的用戶級(jí)代碼與核心運(yùn)行時(shí)分開。

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖 1

本文重點(diǎn)介紹以下幾個(gè)方面:

客戶端:

將整個(gè)計(jì)算過程轉(zhuǎn)義成一個(gè)數(shù)據(jù)流圖

通過 session,啟動(dòng)圖形執(zhí)行

分布式主節(jié)點(diǎn)

基于用戶傳遞給 Session.run() 中的參數(shù)對(duì)整個(gè)完整的圖形進(jìn)行修剪,提取其中特定子圖

將上述子圖劃分成不同片段,并將其對(duì)應(yīng)不同的進(jìn)程和設(shè)備當(dāng)中

將上述劃分的片段分布到 worker services 工作節(jié)點(diǎn)服務(wù)上

每個(gè) worker services 工作節(jié)點(diǎn)服務(wù)上執(zhí)行其收到的圖形片段

工作節(jié)點(diǎn)服務(wù) Worker Services(每一任務(wù)一個(gè))

使用內(nèi)核實(shí)現(xiàn)來計(jì)劃圖形表示的計(jì)算部分分配給正確的可用硬件(如 cpugpu 等)

與其他工作節(jié)點(diǎn)服務(wù) work services 相互發(fā)送和接收計(jì)算結(jié)果

內(nèi)核實(shí)現(xiàn)

執(zhí)行單個(gè)圖形操作的計(jì)算部分

圖2 說明了這些組件的相互作用?!? job:worker / task:0” 和 “/ job:ps / task:0” 都是工作節(jié)點(diǎn)服務(wù) worker services 上執(zhí)行的任務(wù)。“PS” 表示“參數(shù)服務(wù)器”:負(fù)責(zé)存儲(chǔ)和更新模型參數(shù)。其他任務(wù)在迭代優(yōu)化參數(shù)時(shí)會(huì)對(duì)這些參數(shù)發(fā)送更新。如果在單機(jī)環(huán)境下,上述 PS 和 worker 不是必須的,不需要在任務(wù)之間進(jìn)行這種特定的分工,但是對(duì)于分布式訓(xùn)練,這種模式就是很常見的。

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖 2

請(qǐng)注意,分布式主節(jié)點(diǎn) Distributed Master 和工作節(jié)點(diǎn)服務(wù) Worker Service 僅存在于分布式 TensorFlow 中。TensorFlow 的單進(jìn)程版本包含一個(gè)特殊的 Session 實(shí)現(xiàn),它可以執(zhí)行分布式主服務(wù)器執(zhí)行的所有操作,但只與本地進(jìn)程中的設(shè)備進(jìn)行通信

下面,通過逐步處理示例圖來詳細(xì)介紹一下 TensorFlow 核心模塊。

客戶端

用戶在客戶端編寫 TensorFlow 程序來構(gòu)建計(jì)算圖。該程序可以直接組成單獨(dú)的操作,也可以使用 Estimators API 之類的便利庫來組合神經(jīng)網(wǎng)絡(luò)層和其他更高級(jí)別的抽象概念。TensorFlow 支持多種客戶端語言,我們優(yōu)先考慮 Python 和 C ++,因?yàn)槲覀兊膬?nèi)部用戶最熟悉這些語言。隨著功能的日趨完善,我們一般會(huì)將它們移植到 C ++,以便用戶可以從所有客戶端語言優(yōu)化訪問。盡管大多數(shù)訓(xùn)練庫仍然只支持 Python,但 C ++ 確實(shí)能夠支持有效的推理。

客戶端創(chuàng)建會(huì)話,該會(huì)話將圖形定義作為tf.GraphDef 協(xié)議緩沖區(qū)發(fā)送到分布式主節(jié)點(diǎn)。當(dāng)客戶端評(píng)估圖中的一個(gè)或多個(gè)節(jié)點(diǎn)時(shí),評(píng)估會(huì)觸發(fā)對(duì)分布式主節(jié)點(diǎn)的調(diào)用以啟動(dòng)計(jì)算。

在圖 3 中,客戶端構(gòu)建了一個(gè)圖表,將權(quán)重(w)應(yīng)用于特征向量(x),添加偏差項(xiàng)(b)并將結(jié)果保存在變量中。

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖 3

代碼:

tf.Session

分布式主節(jié)點(diǎn) Distributed master

分布式主節(jié)點(diǎn):

基于客戶端指定的節(jié)點(diǎn),從完整的圖形中截取所需的子圖

對(duì)圖表進(jìn)一步進(jìn)行劃分,使其可以將每個(gè)圖形片段映射到不同的執(zhí)行設(shè)備上

以及緩存這些劃分好的片段,以便在后續(xù)步驟中再次使用

由于主節(jié)點(diǎn)可以總攬步驟計(jì)算,因此它可以使用標(biāo)準(zhǔn)的優(yōu)化方法去做優(yōu)化,例如公共子表達(dá)式消除和常量的綁定。然后,對(duì)一組任務(wù)中優(yōu)化后的子圖或者片段執(zhí)行協(xié)調(diào)。

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖4

圖 5 顯示了示例圖的可能分區(qū)。分布式主節(jié)點(diǎn)已對(duì)模型參數(shù)進(jìn)行分組,以便將它們放在參數(shù)服務(wù)器上。

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖5

在分區(qū)切割圖形邊緣的情況下,分布式主節(jié)點(diǎn)插入發(fā)送和接收節(jié)點(diǎn)以在分布式任務(wù)之間傳遞信息(圖 6)。

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖 6

然后,分布式主節(jié)點(diǎn)將圖形片段傳送到分布式任務(wù)。

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖 7

代碼:

MasterService API definition

Master interface

工作節(jié)點(diǎn)服務(wù) Worker Service

在每個(gè)任務(wù)中,該部分負(fù)責(zé):

處理來自 master 發(fā)來的請(qǐng)求

為包含本地子圖規(guī)劃所需要的內(nèi)核執(zhí)行

協(xié)調(diào)與其他任務(wù)之間的直接信息交換

我們優(yōu)化了 Worker Service,以便其以較低的負(fù)載便能夠運(yùn)行大型圖形。當(dāng)前的版本可以執(zhí)行每秒上萬個(gè)子圖,這使得大量副本可以進(jìn)行快速的,細(xì)粒度的訓(xùn)練步驟。Worker service 將內(nèi)核分派給本地設(shè)備并在可能的情況下并行執(zhí)行內(nèi)核,例如通過使用多個(gè) CPU 內(nèi)核或者 GPU 流。

我們還特別針對(duì)每對(duì)源設(shè)備和目標(biāo)設(shè)備類型的 Send 和 Recv 操作進(jìn)行了專攻:

使用 cudaMemcpyAsync() 來進(jìn)行本地 CPU 和 GPU 設(shè)備之間的重疊計(jì)算和數(shù)據(jù)傳輸

兩個(gè)本地 GPU 之間的傳輸使用對(duì)等 DMA,以避免通過主機(jī) CPU 主內(nèi)存進(jìn)行高負(fù)載的復(fù)制

對(duì)于任務(wù)之間的傳輸,TensorFlow 使用多種協(xié)議,包括:

gRPC over TCP

融合以太網(wǎng)上的 RDMA

另外,我們還初步支持 NVIDIA 用于多 GPU 通信的 NCCL 庫

實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

圖8

代碼:

WorkerService API definition

Worker interface

Remote rendezvous (for Send and Recv implementations)

內(nèi)核運(yùn)行

該運(yùn)行時(shí)包含了 200 多個(gè)標(biāo)準(zhǔn)操作,其中涉及了數(shù)學(xué),數(shù)組,控制流和狀態(tài)管理等操作。每個(gè)操作都有對(duì)應(yīng)各種設(shè)備優(yōu)化后的內(nèi)核運(yùn)行。其中許多操作內(nèi)核都是通過使用 Eigen::Tensor 實(shí)現(xiàn)的,它使用 C ++ 模板為多核 CPU 和 GPU 生成高效的并行代碼;但是,我們可以自由地使用像 cuDNN 這樣的庫,就可以實(shí)現(xiàn)更高效的內(nèi)核運(yùn)行。我們還實(shí)現(xiàn)了 quantization 量化,可以在移動(dòng)設(shè)備和高吞吐量數(shù)據(jù)中心應(yīng)用等環(huán)境中實(shí)現(xiàn)更快的推理,并使用 gemmlowp 低精度矩陣庫來加速量化計(jì)算。

如果用戶發(fā)現(xiàn)很難去將子計(jì)算組合,或者說組合后發(fā)現(xiàn)效率很低,則用戶可以通過注冊(cè)額外的 C++ 編寫的內(nèi)核來提供有效的運(yùn)行。例如,我們建議為一些性能的關(guān)鍵操作注冊(cè)自己的融合內(nèi)核,例如 ReLU 和 Sigmoid 激活函數(shù)及其對(duì)應(yīng)的梯度等。XLA Compiler提供了一個(gè)實(shí)驗(yàn)性質(zhì)的自動(dòng)內(nèi)核融合實(shí)現(xiàn)。

代碼:

OpKernel?interface

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4233

    瀏覽量

    85592
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    506

    瀏覽量

    25434
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    328

    瀏覽量

    60475

原文標(biāo)題:實(shí)現(xiàn) TensorFlow 架構(gòu)的規(guī)模性和靈活性

文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用低成本MSPM0 MCU提高電池管理設(shè)計(jì)的靈活性

    電子發(fā)燒友網(wǎng)站提供《使用低成本MSPM0 MCU提高電池管理設(shè)計(jì)的靈活性.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 10:53 ?0次下載
    使用低成本MSPM0 MCU提高電池管理設(shè)計(jì)的<b class='flag-5'>靈活性</b>

    使用低成本MSPM0 MCU提高電子溫度計(jì)設(shè)計(jì)的靈活性

    電子發(fā)燒友網(wǎng)站提供《使用低成本MSPM0 MCU提高電子溫度計(jì)設(shè)計(jì)的靈活性.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 09:46 ?0次下載
    使用低成本MSPM0 MCU提高電子溫度計(jì)設(shè)計(jì)的<b class='flag-5'>靈活性</b>

    納米軟件帶您了解電源自動(dòng)測(cè)試設(shè)備的儀器靈活接入與擴(kuò)展

    在ATECLOUD智能云測(cè)試平臺(tái)上開發(fā)的電源自動(dòng)測(cè)試系統(tǒng),對(duì)比傳統(tǒng)自動(dòng)化測(cè)試系統(tǒng),其獨(dú)特之處在于擁有極為靈活的系統(tǒng)架構(gòu)。這種架構(gòu)靈活性體現(xiàn)在自動(dòng)化測(cè)試的
    的頭像 發(fā)表于 09-03 16:06 ?201次閱讀
    納米軟件帶您了解電源自動(dòng)測(cè)試設(shè)備的儀器<b class='flag-5'>靈活</b>接入與擴(kuò)展

    使用BQ27Z746實(shí)現(xiàn)反向充電保護(hù)的設(shè)計(jì)靈活性

    電子發(fā)燒友網(wǎng)站提供《使用BQ27Z746實(shí)現(xiàn)反向充電保護(hù)的設(shè)計(jì)靈活性.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 11:45 ?0次下載
    使用BQ27Z746<b class='flag-5'>實(shí)現(xiàn)</b>反向充電保護(hù)的設(shè)計(jì)<b class='flag-5'>靈活性</b>

    探索中國星坤FPC連接器:電子設(shè)備靈活性與可靠雙重保障

    了電子設(shè)備設(shè)計(jì)中的一顆璀璨明星。 ? FPC連接器的靈活性 FPC連接器由柔性電路板構(gòu)成,它擁有極高的彎曲和可塑性。這使得FPC連接器能夠適應(yīng)各種需要彎曲和折疊的應(yīng)用場(chǎng)景,無論是在復(fù)雜的曲面還是狹小的空間中,都能展現(xiàn)出其卓越的適應(yīng)
    的頭像 發(fā)表于 08-13 16:14 ?339次閱讀
    探索中國星坤FPC連接器:電子設(shè)備<b class='flag-5'>靈活性</b>與可靠<b class='flag-5'>性</b>雙重保障

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google開發(fā)的一個(gè)開源深度學(xué)習(xí)框架,它允許開發(fā)者方便地構(gòu)建、訓(xùn)練和部署各種復(fù)雜的機(jī)器學(xué)習(xí)模型。TensorFlow憑借其高效的計(jì)算性能、靈活架構(gòu)以及豐富的
    的頭像 發(fā)表于 07-12 16:38 ?538次閱讀

    OPSL 優(yōu)勢(shì)1:波長靈活性

    與其他類型的連續(xù)激光器相比,光泵半導(dǎo)體激光器 (OPSL) 技術(shù)有許多優(yōu)勢(shì),包括波長的靈活性。 特別是OPSL打破了傳統(tǒng)技術(shù)的限制,可以通過設(shè)計(jì)與應(yīng)用的波長要求相匹配。 不折不扣的波長靈活性 光泵
    的頭像 發(fā)表于 07-08 06:30 ?258次閱讀
    OPSL 優(yōu)勢(shì)1:波長<b class='flag-5'>靈活性</b>

    如何提升NMEA插座的靈活性

    德索工程師說道通過模塊化設(shè)計(jì),將NMEA插座拆分成多個(gè)獨(dú)立的模塊,每個(gè)模塊具有特定的功能和接口。這種設(shè)計(jì)方式可以使插座更加靈活,方便用戶根據(jù)實(shí)際需求進(jìn)行組合和擴(kuò)展。同時(shí),模塊化設(shè)計(jì)還可以降低制造和維護(hù)成本,提高產(chǎn)品的市場(chǎng)競(jìng)爭力。
    的頭像 發(fā)表于 06-19 15:48 ?242次閱讀
    如何提升NMEA插座的<b class='flag-5'>靈活性</b>

    8芯M16公頭如何提升靈活性

      德索工程師說道在電子設(shè)備的連接和傳輸中,8芯M16公頭作為一種重要的電氣連接器,其靈活性對(duì)于提高連接效率、降低故障率和增強(qiáng)用戶體驗(yàn)至關(guān)重要。因此,本文將詳細(xì)探討如何提升8芯M16公頭的靈活性,以滿足不斷變化的電子系統(tǒng)需求。
    的頭像 發(fā)表于 05-25 17:48 ?218次閱讀
    8芯M16公頭如何提升<b class='flag-5'>靈活性</b>

    英特爾銳炫A系列顯卡為客戶提供了強(qiáng)大的性能和靈活性

    在當(dāng)今快速發(fā)展的邊緣計(jì)算和人工智能領(lǐng)域,英特爾憑借其創(chuàng)新的軟硬件解決方案,為客戶提供了強(qiáng)大的性能和靈活性。其中,推出的英特爾銳炫 A 系列顯卡備受關(guān)注。
    的頭像 發(fā)表于 03-22 15:17 ?463次閱讀
    英特爾銳炫A系列顯卡為客戶提供了強(qiáng)大的性能和<b class='flag-5'>靈活性</b>

    意法半導(dǎo)體推出一款兼?zhèn)渲悄芄δ芎驮O(shè)計(jì)靈活性的八路高邊開關(guān)

    意法半導(dǎo)體新推出的八路高邊開關(guān)兼?zhèn)渲悄芄δ芎驮O(shè)計(jì)靈活性,每條通道導(dǎo)通電阻RDS(on)(典型值)僅為110mΩ,保護(hù)系統(tǒng)能效,體積緊湊,節(jié)省 PCB 空間。
    的頭像 發(fā)表于 03-12 11:41 ?515次閱讀

    納米軟件電源自動(dòng)測(cè)試系統(tǒng)的靈活性特點(diǎn)詳解

    ,實(shí)現(xiàn)自動(dòng)化測(cè)試的同時(shí),也為客戶實(shí)現(xiàn)經(jīng)濟(jì)效益最大化。該系統(tǒng)的靈活性體現(xiàn)在:儀器靈活、流程靈活、分析靈活
    的頭像 發(fā)表于 01-16 16:23 ?361次閱讀

    FPGA為嵌入式設(shè)計(jì)帶來了強(qiáng)大的功能與靈活性

    盡管 FPGA 為嵌入式設(shè)計(jì)帶來了強(qiáng)大的功能與靈活性,但額外的開發(fā)流程也給設(shè)計(jì)工作增加了新的復(fù)雜和限制問題。整合傳統(tǒng)的硬件-FPGA-軟件設(shè)計(jì)流程并充分利用 FPGA 的可再編程功能是我們的一個(gè)
    的頭像 發(fā)表于 12-07 09:35 ?475次閱讀

    4G插卡路由器:無線上網(wǎng)的便利與靈活性

    4G插卡路由器:無線上網(wǎng)的便利與靈活性
    的頭像 發(fā)表于 11-28 17:27 ?893次閱讀

    MAC地址注冊(cè)管理最佳實(shí)踐:安全、可用靈活性

    MAC地址注冊(cè)管理是在網(wǎng)絡(luò)環(huán)境中確保設(shè)備身份驗(yàn)證和訪問控制的重要步驟。本文將介紹MAC地址注冊(cè)管理的最佳實(shí)踐,旨在提高安全、可用靈活性,以滿足現(xiàn)代網(wǎng)絡(luò)的需求。隨著網(wǎng)絡(luò)規(guī)模和復(fù)雜
    的頭像 發(fā)表于 11-21 14:57 ?519次閱讀
    MAC地址注冊(cè)管理最佳實(shí)踐:安全<b class='flag-5'>性</b>、可用<b class='flag-5'>性</b>和<b class='flag-5'>靈活性</b>