一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

如何利用張量提升內(nèi)存使用效率

C29F_xilinx_inc ? 來源:賽靈思 ? 作者:賽靈思 ? 2022-02-19 17:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

注:本文轉(zhuǎn)自賽靈思中文社區(qū)論壇,源文鏈接在此。本文原作者為XILINX工程師

以下為個(gè)人譯文,僅供個(gè)人學(xué)習(xí)記錄參考之用,如有疏漏之處,還請(qǐng)不吝賜教。

在數(shù)據(jù)處理中,對(duì)原始數(shù)據(jù)進(jìn)行重塑或重新排序并創(chuàng)建多個(gè)副本是很常見的行為。無論執(zhí)行任何新步驟,都會(huì)創(chuàng)建新副本。隨著程序的增大,占用的內(nèi)存也會(huì)增大,我?guī)缀鯊奈纯紤]過這個(gè)問題,直到遇到了“內(nèi)存不足”錯(cuò)誤。

張量 (tensor) 的神奇之處在于多個(gè)張量可引用同一存儲(chǔ)空間,從而顯著提升內(nèi)存使用效率。

在下一篇的文章中,我將聊一聊張量所具有的更神奇的屬性,即跟蹤上級(jí)操作,但在本文中,我將主要介紹內(nèi)存優(yōu)化方面的內(nèi)容。

張量 (tensor) 的神奇之處在于多個(gè)張量可以引用同一存儲(chǔ)空間(即包含給定類型的數(shù)字的連續(xù)內(nèi)存區(qū)塊)。此行為由 torch.storage 進(jìn)行管理。

每個(gè)張量都包含 .storage 屬性,用于顯示內(nèi)存中存儲(chǔ)的張量?jī)?nèi)容。

在下一篇的文章中,我將聊一聊張量所具有的更神奇的屬性,即跟蹤上級(jí)操作,但在本文中,我將主要介紹內(nèi)存優(yōu)化方面的內(nèi)容。

注:全新 Vitis AI 1.2 發(fā)行版將首次為 PyTorch 提供支持。本文對(duì)于新增對(duì)此熱門框架的支持表示祝賀,并提供了 1 個(gè) PyTorch 專用的 Jupyter Notebook 格式示例。

輸入 [1]:

import torch
a = torch.randint(0, 9, (5,3))
a

輸出 [1]:

tensor([[4, 1, 6],

[0, 8, 8],

[1, 2, 1],

[0, 5, 7],

[0, 0, 7]])

輸入 [2]:

a.storage()

輸出 [2]:

4

1

6

0

8

8

1

2

1

0

5

7

0

0

7

[torch.LongStorage of size 15]

輸入 [3]:

a.shape

輸出 [3]:

torch.Size([5, 3])

我們可能需要對(duì)原始“a”張量進(jìn)行轉(zhuǎn)置 (transpose) 和平展 (flatten) 處理。

何必為了相同數(shù)據(jù)浪費(fèi)雙倍內(nèi)存?哪怕數(shù)據(jù)只是形狀 (shape) 不同,也沒有必要。

輸入 [4]:

b = torch.transpose(a, 0, 1)
b

輸出 [4]:

tensor([[4, 0, 1, 0, 0],

[1, 8, 2, 5, 0],

[6, 8, 1, 7, 7]])

a 和 b 確實(shí)是指向相同存儲(chǔ)空間的張量。

兩者表現(xiàn)方式不同,原因在于我們使用 stride 函數(shù)指令其按不同順序讀取該存儲(chǔ)空間。

b 的 stride 值為 (1,3),即讀取存儲(chǔ)空間時(shí),每隔 1 個(gè)元素都必須跳至下一行,并且每隔 3 個(gè)元素必須跳至下一列。

輸入 [5]:

b.stride(), a.stride()

輸出 [5]:

((1, 3), (3, 1))

我們可以從 a 或 b 訪問數(shù)據(jù),或者也可以從原始存儲(chǔ)空間直接訪問數(shù)據(jù)。

但如果從存儲(chǔ)空間訪問,則讀取的值將不再是張量。

輸入 [6]:

a[1,2], b[2,1], a.storage()[5], b.storage()[5]

輸出 [6]:

(tensor(8), tensor(8), 8, 8)

現(xiàn)在,令我感到疑惑不解的是,我發(fā)現(xiàn)這些張量的值神奇般地自行發(fā)生了改變:

更改 a 時(shí),b 也變了。

輸入 [7]:

a[0,0] = 10
b[0,0]

輸出 [7]:

tensor(10)

發(fā)生這種狀況的原因是因?yàn)?,從?nèi)存角度來看,張量即經(jīng)過排序的存儲(chǔ)空間表示法。

從同一存儲(chǔ)空間生成的 2 個(gè)張量并非獨(dú)立張量,而且我必須牢記的是,當(dāng)我每次更改 1 個(gè)張量后,指向相同存儲(chǔ)空間的所有其它張量也都會(huì)被修改。

可見,即使高效的內(nèi)存利用方式也難免有其缺點(diǎn)!

子集

通過原始數(shù)據(jù)的子集仍然能夠有效利用內(nèi)存。

新的張量仍然指向原始存儲(chǔ)空間的子集。

輸入 [8]:

c = a[0:2, 0:2]
c

輸出 [8]:

tensor([[10, 1],

[ 0, 8]])

輸入 [9]:

c[0,0]=77
a

輸出 [9]:

tensor([[77, 1, 6],

[ 0, 8, 8],

[ 1, 2, 1],

[ 0, 5, 7],

[ 0, 0, 7]])

inplace 運(yùn)算符

inplace 運(yùn)算符即無需創(chuàng)建張量副本就可以直接對(duì)存儲(chǔ)空間進(jìn)行操作的函數(shù)。這些運(yùn)算符通常具有易于識(shí)別的名稱且以下劃線結(jié)尾。

輸入 [10]:

a.zero_()
b

輸出 [10]:

tensor([[0, 0, 0, 0, 0],

[0, 0, 0, 0, 0],

[0, 0, 0, 0, 0]])

張量克隆

如果確實(shí)需要 1 個(gè)獨(dú)立的新張量,可以對(duì)其進(jìn)行克隆。

這樣也會(huì)創(chuàng)建新的存儲(chǔ)空間。

輸入 [11]:

a_clone = a.clone()
a_clone[0,0] = 55
a_clone

輸出 [11]:

tensor([[55, 0, 0],

[ 0, 0, 0],

[ 0, 0, 0],

[ 0, 0, 0],

[ 0, 0, 0]])

輸入 [12]:

a

輸出 [12]:

tensor([[0, 0, 0],

[0, 0, 0],

[0, 0, 0],

[0, 0, 0],

[0, 0, 0]])

為連續(xù)張量重組存儲(chǔ)空間

部分函數(shù)僅適用于連續(xù)張量。

對(duì) a 進(jìn)行轉(zhuǎn)置時(shí),通過在 b 中分配來自存儲(chǔ)空間的非連續(xù)矩陣值,生成了新的張量。

輸入 [13]:

a.is_contiguous()

輸出 [13]:

True

輸入 [14]:

b.is_contiguous()

輸出 [14]:

False

我們可將 b 設(shè)為連續(xù)張量,但這將導(dǎo)致 b 生成經(jīng)過重組的新存儲(chǔ)空間,從而導(dǎo)致 a 和 b 永遠(yuǎn)無法成為獨(dú)立張量:

輸入 [15]:

b = b.contiguous()
b[0,0] = 18
a[0,0]

輸出 [15]:

tensor(0)

輸入 [16]:

b.is_contiguous()

輸出 [16]:

True

輸入 [17]:

a.is_contiguous()

輸出 [17]:

True

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7254

    瀏覽量

    91785
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4529

    瀏覽量

    87381
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    809

    瀏覽量

    13930
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    全球各大品牌利用NVIDIA AI技術(shù)提升運(yùn)營效率

    歐萊雅、LVMH 集團(tuán)和雀巢利用 NVIDIA 加速的智能體 AI 和物理 AI,大幅提升產(chǎn)品設(shè)計(jì)、營銷及物流等方面的運(yùn)營效率。
    的頭像 發(fā)表于 06-19 14:36 ?464次閱讀

    無法使用API實(shí)現(xiàn)NPU與OpenVINO?的內(nèi)存共享怎么辦?

    無法使用 遠(yuǎn)程張量 API 實(shí)現(xiàn) NPU 與OpenVINO?的內(nèi)存共享。
    發(fā)表于 03-06 07:11

    無法調(diào)用GPU插件推理的遠(yuǎn)程張量API怎么解決?

    運(yùn)行了使用 GPU 插件的遠(yuǎn)程張量 API 的推理。但是,它未能共享 OpenCL* 內(nèi)存,但結(jié)果不正確。
    發(fā)表于 03-06 06:13

    如何利用RFID技術(shù)提升固定資產(chǎn)管理效率?

    利用RFID技術(shù)(包括RFID電子標(biāo)簽、RFID手持終端、RFID讀寫器等)進(jìn)行固定資產(chǎn)管理,可以大大提高資產(chǎn)管理的效率和準(zhǔn)確性,降低管理成本,并為企業(yè)提供實(shí)時(shí)、準(zhǔn)確的資產(chǎn)信息支持
    的頭像 發(fā)表于 02-11 14:24 ?294次閱讀
    如何<b class='flag-5'>利用</b>RFID技術(shù)<b class='flag-5'>提升</b>固定資產(chǎn)管理<b class='flag-5'>效率</b>?

    回饋式交流電子負(fù)載:測(cè)試效率與節(jié)能效果的雙重提升

    ,通過創(chuàng)新的能量回饋機(jī)制,實(shí)現(xiàn)了測(cè)試效率與節(jié)能效果的雙重提升,為電力電子測(cè)試領(lǐng)域帶來了革命性變革。 一、傳統(tǒng)測(cè)試方法的局限性 傳統(tǒng)電阻負(fù)載測(cè)試方法采用耗能式工作原理,將電能轉(zhuǎn)化為熱能消耗。這種測(cè)試方式
    發(fā)表于 02-07 11:13

    八個(gè)方面提升LED驅(qū)動(dòng)電源效率

    關(guān)于提升LED驅(qū)動(dòng)電源效率的技巧總結(jié): 1.主電流回路PCB盡量短。LAYPCB的經(jīng)驗(yàn),及布局,這個(gè)沒什么,快速的方法就是多看別人的作品。 2.優(yōu)化變壓器參數(shù)設(shè)計(jì),減少振鈴帶來的渦流損耗。這個(gè)比較
    發(fā)表于 01-17 10:07

    怎么提升單片機(jī)代碼執(zhí)行效率

    ? 提升單片機(jī)代碼執(zhí)行效率需要從多個(gè)方面入手,包括代碼優(yōu)化、硬件資源利用、編譯器設(shè)置、中斷處理優(yōu)化以及其他技巧等。在實(shí)際應(yīng)用中,需要根據(jù)具體需求和硬件條件綜合考慮這些因素,以實(shí)現(xiàn)最佳的性能表現(xiàn)。 ?
    的頭像 發(fā)表于 01-10 11:06 ?579次閱讀

    大沖能源助力提升醫(yī)院能源利用效率

    昨日,由大沖能源負(fù)責(zé)的金華市人民醫(yī)院合同能源管理能源托管項(xiàng)目順利完成竣工驗(yàn)收,標(biāo)志著大沖能源在推動(dòng)醫(yī)院節(jié)能減排和智能化管理方面取得了又一重要成果。該項(xiàng)目由大沖能源與金華市人民醫(yī)院攜手合作,旨在通過一系列高效節(jié)能改造和能源管理手段,提升醫(yī)院能源利用
    的頭像 發(fā)表于 12-27 15:46 ?571次閱讀

    RK3568國產(chǎn)處理器 + TensorFlow框架的張量創(chuàng)建實(shí)驗(yàn)案例分享

    一、實(shí)驗(yàn)?zāi)康?本節(jié)視頻的目的是了解張量定義、了解張量的表示形式、并學(xué)習(xí)基于TensorFlow框架的張量創(chuàng)建方法。 二、實(shí)驗(yàn)原理. 張量定義 1、
    發(fā)表于 12-03 14:43

    《算力芯片 高性能 CPUGPUNPU 微架構(gòu)分析》第3篇閱讀心得:GPU革命:從圖形引擎到AI加速器的蛻變

    線程調(diào)度,與Hopper架構(gòu)的細(xì)粒度同步機(jī)制,使得異構(gòu)計(jì)算場(chǎng)景下的任務(wù)協(xié)同更加靈活。在我的分布式訓(xùn)練實(shí)踐中,這些特性顯著提升了模型收斂速度。 張量處理器的設(shè)計(jì)是本書點(diǎn)睛之筆。從數(shù)學(xué)抽象來看,張量統(tǒng)一了
    發(fā)表于 11-24 17:12

    永磁同步電機(jī)效率提升方法

    提升永磁同步電機(jī)效率的方法可以從多個(gè)方面進(jìn)行,以下是一些有效的方法: 優(yōu)化電機(jī)設(shè)計(jì) : 增加磁場(chǎng)的強(qiáng)度:通過增加永磁體的磁通密度和提高永磁體及鐵心的磁導(dǎo)率,可以有效提升電機(jī)的磁場(chǎng)強(qiáng)度,從而提高
    的頭像 發(fā)表于 11-22 10:13 ?1456次閱讀

    DDR內(nèi)存頻率對(duì)性能的影響

    的整體性能,特別是在處理大量數(shù)據(jù)或運(yùn)行復(fù)雜程序時(shí),如視頻編輯、3D渲染和高端游戲等場(chǎng)景??焖俚?b class='flag-5'>內(nèi)存可以縮短CPU和內(nèi)存之間的通信時(shí)間,從而提升整體系統(tǒng)的響應(yīng)效率。 二、多任務(wù)處理能力
    的頭像 發(fā)表于 11-20 14:25 ?3822次閱讀

    如何提升EDA設(shè)計(jì)效率

    EDA(Electronic Design Automation,電子設(shè)計(jì)自動(dòng)化)設(shè)計(jì)技術(shù)是現(xiàn)代電子工程領(lǐng)域的關(guān)鍵技術(shù)之一,提升EDA設(shè)計(jì)效率對(duì)于電子工程師和整個(gè)電子行業(yè)都至關(guān)重要。以下是一些提升
    的頭像 發(fā)表于 11-08 14:23 ?1026次閱讀

    提升效率:RTC時(shí)鐘實(shí)用設(shè)置

    今天來給大家講解的是RTC時(shí)鐘實(shí)用性,提升絕對(duì)的效率
    的頭像 發(fā)表于 11-04 16:35 ?1320次閱讀
    <b class='flag-5'>提升</b><b class='flag-5'>效率</b>:RTC時(shí)鐘實(shí)用設(shè)置

    如何提升RFID手持終端的讀寫效率

    RFID(射頻識(shí)別)手持終端是一種便攜式設(shè)備,用于讀取和寫入RFID標(biāo)簽。提升RFID手持終端的讀寫效率對(duì)于提高物流、庫存管理、零售等行業(yè)的工作效率至關(guān)重要。以下是一些提升RFID手持
    的頭像 發(fā)表于 10-29 09:41 ?654次閱讀