色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Vitis AI - 如何利用張量提升內存使用效率達到內存優化效果

454398 ? 來源: Xilinx技術社微信公眾號 ? 作者: Xilinx技術社微信公 ? 2020-09-29 10:35 ? 次閱讀

在數據處理中,對原始數據進行重塑或重新排序并創建多個副本是很常見的行為。無論執行任何新步驟,都會創建新副本。隨著程序的增大,占用的內存也會增大,我幾乎從未考慮過這個問題,直到遇到了“內存不足”錯誤。

張量 (tensor) 的神奇之處在于多個張量可以引用同一存儲空間(即包含給定類型的數字的連續內存區塊)。此行為由 torch.storage 進行管理。

每個張量都包含 .storage 屬性,用于顯示內存中存儲的張量內容。

在下一篇的文章中,我將聊一聊張量所具有的更神奇的屬性,即跟蹤上級操作。

在本文中,我將主要介紹內存優化方面的內容。

全新 Vitis AI 1.2 發行版將首次為 PyTorch 提供支持。本文對于新增對此熱門框架的支持表示祝賀,并提供了 1 個 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])

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

何必為了相同數據浪費雙倍內存?哪怕數據只是形狀 (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確實是指向相同存儲空間的張量。

兩者表現方式不同,原因在于我們使用 stride 函數指令其按不同順序讀取該存儲空間。

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

輸出 [5]:

b.stride(), a.stride()

輸出 [5]:

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

我們可以從a或b訪問數據,或者也可以從原始存儲空間直接訪問數據。

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

輸入 [6]:

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

輸出 [6]:

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

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

更改a時,b也變了。

輸入 [7]:

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

輸出 [7]:

tensor(10)

發生這種狀況的原因是因為,從內存角度來看,張量即經過排序的存儲空間表示法。

從同一存儲空間生成的 2 個張量并非獨立張量,而且我必須牢記的是,當我每次更改 1 個張量后,指向相同存儲空間的所有其它張量也都會被修改。

可見,即使高效的內存利用方式也難免有其缺點!

子集

通過原始數據的子集仍然能夠有效利用內存。

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

輸入 [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 運算符

inplace 運算符即無需創建張量副本就可以直接對存儲空間進行操作的函數。這些運算符通常具有易于識別的名稱且以下劃線結尾。

輸入 [10]:

a.zero_()
b

輸出 [10]:

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

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

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

張量克隆

如果確實需要 1 個獨立的新張量,可以對其進行克隆。

這樣也會創建新的存儲空間。

輸入 [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]])

為連續張量重組存儲空間

部分函數僅適用于連續張量。

對a進行轉置時,通過在b中分配來自存儲空間的非連續矩陣值,生成了新的張量。

輸入 [13]:

a.is_contiguous()

輸出 [13]:

True

輸出 [14]:

b.is_contiguous()

輸出 [14]:

False

我們可將b設為連續張量,但這將導致b生成經過重組的新存儲空間,從而導致a和b永遠無法成為獨立張量:

輸入 [15]:

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

輸出 [15]:

tensor(0)

輸出 [16]:

b.is_contiguous()

輸出 [16]:

True

輸出 [16]:

a.is_contiguous()

輸出 [17]:

True

編輯:hfy


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3037

    瀏覽量

    74158
  • AI
    AI
    +關注

    關注

    87

    文章

    31172

    瀏覽量

    269551
  • 數據處理
    +關注

    關注

    0

    文章

    606

    瀏覽量

    28597
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13263
收藏 人收藏

    評論

    相關推薦

    LabVIEW 程序的內存優化

    節約內存的占用,提高運行效率。但是,在編寫完程序后再按照程序優化的技巧回頭去優化一段已有的程序,這并不是一個好的編程方法。我們應該先熟悉理解優化
    發表于 07-13 17:57

    提高內存使用效率有哪些?

    提高內存使用效率有哪些?  1.調整高速緩存區域的大小 可以在“計算機的主要用途”選項卡中設置系統利用高速緩存的比例。如果系統的內存較多,可選擇“網絡服務器”,這樣系統將用較多的
    發表于 02-24 17:29

    內存分配及Cache優化

    利用兩級緩存并配合低工作頻率外部存儲器,系統的效率達到全部使用高工作頻率內部存儲器的80%~90%。  本文將占據較大空間的數據或使用頻率不高的程序放在片外存儲器中,啟用L2 Cache,調用
    發表于 08-10 14:54

    嵌入式系統內存優化使用

    響應運行。并且經過實踐證明,嵌入式系統內存優化使用,能夠提升系統空間5%內存,確保系統順利運行。【關鍵詞】 嵌入式 Linux系統 內存
    發表于 11-04 06:23

    內存之旅——如何提升CMA利用率?

    ()`-|cma_init_reserved_mem()創建完成后,由于暫時沒有設備驅動使用,為了提升內存利用率,需要將這部分內存標記后,歸還給 buddy 系統,供 buddy 系統
    發表于 03-22 16:26

    【KV260視覺入門套件試用體驗】五、VITis AI (人臉檢測和人體檢測)

    ); } 3.2、實踐效果 使用命令運行代碼程序。 cd Vitis-AI/examples/vai_library/samples/refinedet ./test_jpeg_refinedet_tf
    發表于 09-26 16:22

    【KV260視覺入門套件試用體驗】Vitis AI 構建開發環境,并使用inspector檢查模型

    云端的計算資源進行模型優化,這些云端資源都可以即用付費的,使用pytorch或者tensorflow原生的優化方法,最后使用Vitis AI來編譯部署即可。這樣我可以
    發表于 10-14 15:34

    通信設備中內存管理優化

    通過對內存管理的分析,提出了內存優化算法。該算法解決了通信設備中由于大量消息的發送導致內存管理的問題,建立了用戶定義的內存管理區域,設計了新
    發表于 02-21 11:42 ?22次下載

    AS控制器內存分配及優化

    摘要 本文基于S7-400系列控制器,詳細介紹內存的類型、分配情況及實際使用過程中可能的內存優化方法。關鍵詞 內存,工作內存,裝載
    發表于 08-08 10:13 ?25次下載

    內存如何進行優化

    在一些大內存電腦上,我們也能手工禁止Windows虛擬內存組件(“系統屬性”→“高級”→“性能”→“虛擬內存”),以免讓電腦更充分得利用物理內存
    發表于 06-09 10:41 ?967次閱讀

    如何利用張量提升內存使用效率

    在數據處理中,對原始數據進行重塑或重新排序并創建多個副本是很常見的行為。無論執行任何新步驟,都會創建新副本。隨著程序的增大,占用的內存也會增大,我幾乎從未考慮過這個問題,直到遇到了“內存不足”錯誤。
    的頭像 發表于 02-19 17:26 ?1172次閱讀

    Vitis AI優化器指南

    電子發燒友網站提供《Vitis AI優化器指南.pdf》資料免費下載
    發表于 09-14 11:04 ?0次下載
    <b class='flag-5'>Vitis</b> <b class='flag-5'>AI</b><b class='flag-5'>優化</b>器指南

    如何解決內存碎片與內存交換效率慢的問題

    內存分頁 分段的好處是能產生連續的內存空間,但是會出現大量內存碎片與內存交換效率低的問題 先思考一下怎么解決這兩個問題,
    的頭像 發表于 10-09 16:57 ?1062次閱讀
    如何解決<b class='flag-5'>內存</b>碎片與<b class='flag-5'>內存</b>交換<b class='flag-5'>效率</b>慢的問題

    IBM的新型模擬內存芯片能否證明AI操作的性能和能源效率呢?

    IBM 的新型模擬內存芯片證明了 AI 操作的性能和能源效率都是可能的。
    的頭像 發表于 12-18 10:09 ?747次閱讀

    如何優化RAM內存使用

    優化RAM內存使用是一個重要的任務,特別是對于那些擁有有限內存資源的用戶。以下是一些優化RAM內存使用的策略,這些策略可以幫助您更有效地使用
    的頭像 發表于 11-11 09:58 ?443次閱讀
    主站蜘蛛池模板: 国产精品亚洲精品爽爽| 亚洲av欧美在我| 人人射人人爱| 亚洲免费观看在线视频| YELLOW日本免费观看播放| 精品久久久久中文字幕加勒比东京热| 欧洲另类一二三四区| 伊人久久青草青青综合| 国产精品第一综合首页| 免费亚洲视频在线观看| 性春院| 99视频久久精品久久| 精品一区二区三区AV天堂| 少妇被阴内射XXXB少妇BB| 97免费观看视频| 久久超碰国产精品最新| 无套内谢大学生A片| 荡乳乱公小说| 欧美一级黄色影院| 511麻豆视传媒精品AV| 久久不射网| 亚洲精品久久久久69影院| 国产成人h在线视频| 青青草A在在观免费线观看| 879影视动漫h免费观看| 久久精品嫩草影院免费看| 亚洲电影网址| 国产亚洲人成在线视频| 性生交片免费无码看人| 国产成人精品久久一区二区三区 | 久久精品视在线-2| 亚洲AV美女成人网站P站| 国产高清视频在线播放www色| 日韩欧美一区二区中文字幕| 扒开美女嫩bbb| 日本另类xxxx| 高中生被C到爽哭视频免费| 日本护士性生活| 成年人免费在线视频观看| 热久久伊大人香蕉网老师| 把腿张开再深点好爽宝贝|