最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對(duì)Tensorflow中Device實(shí)例的生成和管理詳解

 更新時(shí)間:2020年02月04日 19:03:33   作者:jacob_wjj  
今天小編就為大家分享一篇對(duì)Tensorflow中Device實(shí)例的生成和管理詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1. 關(guān)鍵術(shù)語(yǔ)描述

kernel

在神經(jīng)網(wǎng)絡(luò)模型中,每個(gè)node都定義了自己需要完成的操作,比如要做卷積、矩陣相乘等。

可以將kernel看做是一段能夠跑在具體硬件設(shè)備上的算法程序,所以即使同樣的2D卷積算法,我們有基于gpu的Convolution 2D kernel實(shí)例、基于cpu的Convolution 2D kernel實(shí)例。

device

負(fù)責(zé)運(yùn)行kernel的具體硬件設(shè)備抽象。每個(gè)device實(shí)例,對(duì)應(yīng)系統(tǒng)中一個(gè)具體的處理器硬件,比如gpu:0 device, gpu:1 device, cpu:0 device。一般來(lái)說(shuō),每個(gè)device實(shí)例同時(shí)包括處理器資源、內(nèi)存資源。device的抽象支持硬件設(shè)備提供的并行處理能力。

2. device是什么

為方便描述,下面我們把在tensorflow里面運(yùn)行的神經(jīng)網(wǎng)絡(luò)模型都統(tǒng)一稱為graph。

我們知道,tensorflow主要針對(duì)的是跨硬件平臺(tái)、分布式、并發(fā)運(yùn)行的場(chǎng)景,參與運(yùn)算的每個(gè)硬件資源,我們都抽象為device實(shí)例,便于管理。

device的主要職責(zé):

管理處理器資源,為支持device內(nèi)部的并行計(jì)算,進(jìn)一步將其抽象為thread pool或streams:

cpu:使用thread pool來(lái)管理,thread之間可支持不同程度的并行計(jì)算能力

gpu: 針對(duì)nvidia gpu, 使用cuda streams來(lái)管理,根據(jù)不同的gpu型號(hào),可支持不同數(shù)量的stream做并行計(jì)算

管理內(nèi)存資源:為kernel的運(yùn)行,分配和釋放內(nèi)存,進(jìn)一步抽象為Allocator及其各種子類的實(shí)例來(lái)管理。

主機(jī)內(nèi)存:

cpu kernel 計(jì)算時(shí)需要的內(nèi)存。

gpu kernel的輸出結(jié)果如果要放置到主機(jī)內(nèi)存中時(shí),gpu kernel也需要申請(qǐng)主機(jī)內(nèi)存。

顯存: gpu kernel 計(jì)算時(shí)需要的內(nèi)存。

3. device的種類及應(yīng)用場(chǎng)景

由于device要抽象的設(shè)備種類較多,我們主要描述一下本地運(yùn)行的cpu device、gpu device實(shí)例類型。先用一個(gè)UML圖來(lái)表示一下各種device抽象類的關(guān)系:

可以看到,cpu device實(shí)例使用的類是GPUCompatibleCPUDevice,主要是在ThreadPoolDevice的基礎(chǔ)上,增加了gpu<-> cpu之間內(nèi)存?zhèn)鬏敂?shù)據(jù)的優(yōu)化措施。

gpu device實(shí)例使用的類是 GPUDevice 。

4. device實(shí)例的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)

我們以常用的cpu device,gpu device為例, 用下圖描述一下device實(shí)例的關(guān)鍵數(shù)據(jù)結(jié)構(gòu):

可以看到每個(gè)device實(shí)例內(nèi)部都具備并行處理的能力:

GPUCompatibleCPUDevice實(shí)例
 將 cpu 的計(jì)算資源抽象為thread pool,以支持多thread之間的并發(fā)執(zhí)行;
 將主機(jī)內(nèi)存抽象為 CPUAllocator 實(shí)例來(lái)進(jìn)行管理,為cpu kernel、gpu kernel提供主機(jī)內(nèi)存的申請(qǐng)、釋放功能;

GPUDevice實(shí)例
 將gpu的計(jì)算資源抽象為streams, 由于目前只支持NVIDIA的gpu,所以這里我們可以看作抽象為cuda streams,多個(gè)cuda streams之間的計(jì)算可以并發(fā)處理;
 通過(guò)GPUBFCAllocator實(shí)例來(lái)管理顯存,為gpu kernel提供顯存的申請(qǐng)、釋放功能。

5. device實(shí)例的創(chuàng)建

系統(tǒng)中可用的device實(shí)例,由session發(fā)起創(chuàng)建,歸屬于session實(shí)例。

device的創(chuàng)建,使用Factory 設(shè)計(jì)模式,session會(huì)調(diào)用所有注冊(cè)的device factory,逐一產(chǎn)出 符合條件的device實(shí)例。

以DirectSession實(shí)例創(chuàng)建gpu device、cpu device為例,具體流程如下圖所示。

為方便結(jié)合代碼閱讀,已包含主要的類、函數(shù)調(diào)用路徑:

可以看到,最終產(chǎn)出 的gpu device、cpu device實(shí)例,都會(huì)保存至DirectSession實(shí)例的 devices_ 表中,由DirectSession實(shí)例進(jìn)行分配和使用。

6. 在graph運(yùn)行階段device的使用

在graph的創(chuàng)建階段,session為每個(gè)node分配一個(gè)具體的device實(shí)例,同時(shí)為每個(gè)node創(chuàng)建一個(gè)具體的kernel實(shí)例,這個(gè)kernel實(shí)例將會(huì)運(yùn)行在分配的device實(shí)例上。(參見Tensorflow 核心流程剖析 2 – 神經(jīng)網(wǎng)絡(luò)模型的創(chuàng)建和分割)

接下來(lái),在graph的運(yùn)行階段,session會(huì)依次處理graph中的node,調(diào)度node所分配的device實(shí)例,去運(yùn)行node的kernel實(shí)例。

每個(gè)kernel 在運(yùn)行時(shí),會(huì)向其分配的device,申請(qǐng)需要的計(jì)算資源、內(nèi)存資源等,完成具體的運(yùn)算操作。

上述流程如下圖所示。

為方便結(jié)合代碼閱讀,已包含主要的類、函數(shù)調(diào)用路徑:

以上這篇對(duì)Tensorflow中Device實(shí)例的生成和管理詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 初窺Python門縫了解入門路徑

    初窺Python門縫了解入門路徑

    Python由荷蘭數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究學(xué)會(huì)的Guido van Rossum 于1990 年代初設(shè)計(jì),作為一門叫做ABC語(yǔ)言的替代品。 Python提供了高效的高級(jí)數(shù)據(jù)結(jié)構(gòu),還能簡(jiǎn)單有效地面向?qū)ο缶幊?/div> 2021-10-10
  • 中秋快到了利用 python 繪制中秋禮物

    中秋快到了利用 python 繪制中秋禮物

    眼看中秋又快到了,中秋回家,帶什么禮物更讓家人歡心?今天小編就利用python幫你帶個(gè)對(duì)象回家,感興趣的小伙伴趕快來(lái)看,要記得收藏起來(lái)以免迷路
    2021-09-09
  • 基于Tensorflow高階讀寫教程

    基于Tensorflow高階讀寫教程

    今天小編就為大家分享一篇基于Tensorflow高階讀寫教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python之wxPython菜單使用詳解

    python之wxPython菜單使用詳解

    這篇文章主要介紹了python中wxPython菜單使用方法,可實(shí)現(xiàn)給彈出菜單項(xiàng)添加圖標(biāo)的功能,在Python程序設(shè)計(jì)中非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • 使用Python的Django框架結(jié)合jQuery實(shí)現(xiàn)AJAX購(gòu)物車頁(yè)面

    使用Python的Django框架結(jié)合jQuery實(shí)現(xiàn)AJAX購(gòu)物車頁(yè)面

    這篇文章主要介紹了使用Python的Django框架結(jié)合jQuery實(shí)現(xiàn)AJAX購(gòu)物車頁(yè)面的方法,示例基于Django中構(gòu)建好的JSON格式的RESTful API需要的朋友可以參考下
    2016-04-04
  • python監(jiān)控網(wǎng)站運(yùn)行異常并發(fā)送郵件的方法

    python監(jiān)控網(wǎng)站運(yùn)行異常并發(fā)送郵件的方法

    這篇文章主要介紹了python監(jiān)控網(wǎng)站運(yùn)行異常并發(fā)送郵件的方法,涉及Python操作郵件及服務(wù)器監(jiān)控的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Python+Pandas 獲取數(shù)據(jù)庫(kù)并加入DataFrame的實(shí)例

    Python+Pandas 獲取數(shù)據(jù)庫(kù)并加入DataFrame的實(shí)例

    今天小編就為大家分享一篇Python+Pandas 獲取數(shù)據(jù)庫(kù)并加入DataFrame的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • pytorch loss反向傳播出錯(cuò)的解決方案

    pytorch loss反向傳播出錯(cuò)的解決方案

    這篇文章主要介紹了pytorch loss反向傳播出錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • python?函數(shù)定位參數(shù)+關(guān)鍵字參數(shù)+inspect模塊

    python?函數(shù)定位參數(shù)+關(guān)鍵字參數(shù)+inspect模塊

    這篇文章主要介紹了python?函數(shù)定位參數(shù)+關(guān)鍵字參數(shù)+inspect模塊,文章圍繞主題展開詳細(xì)的相關(guān)資料,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • python 成功引入包但無(wú)法正常調(diào)用的解決

    python 成功引入包但無(wú)法正常調(diào)用的解決

    這篇文章主要介紹了python 成功引入包但無(wú)法正常調(diào)用的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03

最新評(píng)論

安康市| 杭州市| 贡嘎县| 乌恰县| 纳雍县| 清苑县| 清原| 江西省| 西昌市| 香港 | 抚顺市| 临湘市| 乌什县| 清水河县| 桃江县| 九龙城区| 彭山县| 汉沽区| 阿拉善左旗| 合作市| 永康市| 通河县| 太仆寺旗| 靖江市| 岳西县| 天台县| 罗源县| 宁城县| 马边| 哈尔滨市| 招远市| 乌拉特后旗| 宝丰县| 大英县| 通州区| 齐齐哈尔市| 互助| 凤冈县| 宜城市| 河南省| 汝州市|