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

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

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

TensorFlow Lite (TFLite) 在內(nèi)存使用方面的改進(jìn)

Tensorflowers ? 來(lái)源:TensorFlow ? 作者: Juhyun Lee 和 Yury ? 2020-10-21 10:50 ? 次閱讀

文 /Juhyun Lee 和 Yury Pisarchyk,軟件工程師

由于資源限制嚴(yán)重,必須在苛刻的功耗要求下使用資源有限的硬件,因此在移動(dòng)和嵌入式設(shè)備上進(jìn)行推理頗有難度。在本文中,我們將展示 TensorFlow Lite (TFLite) 在內(nèi)存使用方面的改進(jìn),更適合在邊緣設(shè)備上運(yùn)行推理。

中間張量

一般而言,神經(jīng)網(wǎng)絡(luò)可以視為一個(gè)由算子(例如 CONV_2D 或 FULLY_CONNECTED)和保存中間計(jì)算結(jié)果的張量(稱為中間張量)組成的計(jì)算圖。這些中間張量通常是預(yù)分配的,目的是減少推理延遲,但這樣做會(huì)增加內(nèi)存用量。不過(guò),如果只是以簡(jiǎn)單的方式實(shí)現(xiàn),那么在資源受限的環(huán)境下代價(jià)有可能很高,它會(huì)占用大量空間,有時(shí)甚至比模型本身高幾倍。例如,MobileNet v2 中的中間張量占用了 26MB 的內(nèi)存(圖 1),大約是模型本身的兩倍。

圖 1. MobileNet v2 的中間張量(上圖)及其到二維內(nèi)存空間大小的映射(下圖)。如果每個(gè)中間張量分別使用一個(gè)專用的內(nèi)存緩沖區(qū)(用 65 種不同的顏色表示),它們將占用約 26MB 的運(yùn)行時(shí)內(nèi)存

好消息是,通過(guò)數(shù)據(jù)相關(guān)性分析,這些中間張量不必共存于內(nèi)存中。如此一來(lái),我們便可以重用中間張量的內(nèi)存緩沖區(qū),從而減少推理引擎占用的總內(nèi)存。如果網(wǎng)絡(luò)呈簡(jiǎn)單的鏈條形狀,則兩個(gè)大內(nèi)存緩沖區(qū)即夠用,因?yàn)樗鼈兛梢栽谡麄€(gè)網(wǎng)絡(luò)中來(lái)回互換。然而,對(duì)于形成復(fù)雜計(jì)算圖的任意網(wǎng)絡(luò),這個(gè)NP 完備(NP-complete)資源分配問(wèn)題需要一個(gè)良好的近似算法。

我們針對(duì)此問(wèn)題設(shè)計(jì)了許多不同的近似算法,這些算法的表現(xiàn)取決于神經(jīng)網(wǎng)絡(luò)和內(nèi)存緩沖區(qū)的屬性,但都通過(guò)張量使用記錄。中間張量的張量使用記錄是一種輔助數(shù)據(jù)結(jié)構(gòu),其中包含有關(guān)張量的大小以及在給定的網(wǎng)絡(luò)執(zhí)行計(jì)劃中首次最后一次使用時(shí)間的信息。借助這些記錄,內(nèi)存管理器能夠在網(wǎng)絡(luò)執(zhí)行的任何時(shí)刻計(jì)算中間張量的使用情況,并優(yōu)化其運(yùn)行時(shí)內(nèi)存以最大限度減少占用空間。

共享內(nèi)存緩沖區(qū)對(duì)象

在 TFLite GPU OpenGL 后端中,我們?yōu)檫@些中間張量采用 GL 紋理。這種方式有幾個(gè)有趣的限制:(a) 紋理一經(jīng)創(chuàng)建便無(wú)法修改大小,以及 (b) 在給定時(shí)間只有一個(gè)著色器程序可以獨(dú)占訪問(wèn)紋理對(duì)象。在這種共享內(nèi)存緩沖區(qū)對(duì)象模式的目標(biāo)是最小化對(duì)象池中創(chuàng)建的所有共享內(nèi)存緩沖區(qū)對(duì)象的大小總和。這種優(yōu)化與眾所周知的寄存器分配問(wèn)題類似,但每個(gè)對(duì)象的大小可變,因此優(yōu)化起來(lái)要復(fù)雜得多。

根據(jù)前面提到的張量使用記錄,我們?cè)O(shè)計(jì)了 5 種不同的算法,如表 1 所示。除了“最小成本流”以外,它們都是貪心算法,每個(gè)算法使用不同的啟發(fā)式算法,但仍會(huì)達(dá)到或非常接近理論下限。根據(jù)網(wǎng)絡(luò)拓?fù)?,某些算法的性能要?yōu)于其他算法,但總體來(lái)說(shuō),GREEDY_BY_SIZE_IMPROVED 和 GREEDY_BY_BREADTH 產(chǎn)生的對(duì)象分配占用內(nèi)存最小。

理論下限
https://arxiv.org/abs/2001.03288

表 1. “共享對(duì)象”策略的內(nèi)存占用量(以 MB 為單位;最佳結(jié)果以綠色突出顯示)。前 5 行是我們的策略,后 2 行用作基準(zhǔn)(“下限”表示最佳數(shù)的近似值,該值可能無(wú)法實(shí)現(xiàn),而“樸素”表示為每個(gè)中間張量分配專屬內(nèi)存緩沖區(qū)的情況下可能的最差數(shù))

回到我們的第一個(gè)示例,GREEDY_BY_BREADTH 在 MobileNet v2 上表現(xiàn)最佳,它利用了每個(gè)算子的寬度,即算子配置文件中所有張量的總和。圖 2,尤其是與圖 1 相比,突出了使用智能內(nèi)存管理器的優(yōu)勢(shì)。

圖 2. MobileNet v2 的中間張量(上圖)及其大小到二維內(nèi)存空間的映射(下圖)。如果中間張量共享內(nèi)存緩沖區(qū)(用 4 種不同的顏色表示),它們僅占用大約 7MB 的運(yùn)行時(shí)內(nèi)存

內(nèi)存偏移量計(jì)算

對(duì)于在 CPU 上運(yùn)行的 TFLite,適用于 GL 紋理的內(nèi)存緩沖區(qū)屬性不適用。因此,更常見(jiàn)的做法是提前分配一個(gè)大內(nèi)存空間,并通過(guò)給定偏移量訪問(wèn)內(nèi)存在所有不干擾其他讀取和寫入操作的讀取器和寫入器之間共享。這種內(nèi)存偏移量計(jì)算法的目的是最大程度地減小內(nèi)存空間的大小。

我們針對(duì)此優(yōu)化問(wèn)題設(shè)計(jì)了 3 種不同的算法,同時(shí)還分析了先前的研究工作(Sekiyama 等人于 2018 年提出的 Strip Packing)。與“共享對(duì)象”法類似,根據(jù)網(wǎng)絡(luò)的不同,一些算法的性能優(yōu)于其他算法,如表 2 所示。這項(xiàng)研究的一個(gè)收獲是:“偏移量計(jì)算”法通常比“共享對(duì)象”法占用的空間更小。因此,如果適用,應(yīng)該選擇前者而不是后者。

Strip Packing
https://arxiv.org/abs/1804.10001

表 2. “偏移量計(jì)算”策略的內(nèi)存占用量(以 MB 為單位;最佳結(jié)果以綠色突出顯示)。前 3 行是我們的策略,接下來(lái) 1 行是先前的研究,后 2 行用作基準(zhǔn)(“下限”表示最佳數(shù)的近似值,該值可能無(wú)法實(shí)現(xiàn),而“樸素”表示為每個(gè)中間張量分配專屬內(nèi)存緩沖區(qū)的情況下可能的最差數(shù))

這些針對(duì) CPU 和 GPU 的內(nèi)存優(yōu)化默認(rèn)已隨過(guò)去幾個(gè)穩(wěn)定的 TFLite 版本一起提供,并已證明在支持更苛刻的最新模型(如 MobileBERT)方面很有優(yōu)勢(shì)。直接查看 GPU 實(shí)現(xiàn)和 CPU 實(shí)現(xiàn),可以找到更多關(guān)于實(shí)現(xiàn)的細(xì)節(jié)。

MobileBERT
https://tfhub.dev/tensorflow/lite-model/mobilebert/1/default/1

GPU 實(shí)現(xiàn)
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/delegates/gpu/common/memory_management

CPU 實(shí)現(xiàn)
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/simple_memory_arena.h

致謝

感謝 Matthias Grundmann、Jared Duke 和 Sarah Sirajuddin,特別感謝 Andrei Kulik 參加了最開(kāi)始的頭腦風(fēng)暴,同時(shí)感謝 Terry Heo 完成 TFLite 的最終實(shí)現(xiàn)。

責(zé)任編輯:xj

原文標(biāo)題:優(yōu)化 TensorFlow Lite 推理運(yùn)行環(huán)境內(nèi)存占用

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

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

    關(guān)注

    42

    文章

    4726

    瀏覽量

    100340
  • 張量
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2555
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    328

    瀏覽量

    60451
  • TensorFlow Lite
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    588

原文標(biāo)題:優(yōu)化 TensorFlow Lite 推理運(yùn)行環(huán)境內(nèi)存占用

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    快速部署TensorflowTFLITE模型在Jacinto7 Soc

    電子發(fā)燒友網(wǎng)站提供《快速部署TensorflowTFLITE模型在Jacinto7 Soc.pdf》資料免費(fèi)下載
    發(fā)表于 09-27 11:41 ?0次下載
    快速部署<b class='flag-5'>Tensorflow</b>和<b class='flag-5'>TFLITE</b>模型在Jacinto7 Soc

    第四章:在 PC 交叉編譯 aarch64 的 tensorflow 開(kāi)發(fā)環(huán)境并測(cè)試

    本文介紹了在 PC 端交叉編譯 aarch64 平臺(tái)的 tensorflow 庫(kù)而非 tensorflow lite 的心酸過(guò)程。
    的頭像 發(fā)表于 08-25 11:38 ?599次閱讀
    第四章:在 PC 交叉編譯 aarch64 的 <b class='flag-5'>tensorflow</b> 開(kāi)發(fā)環(huán)境并測(cè)試

    TensorFlow是什么?TensorFlow怎么用?

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

    tensorflow和pytorch哪個(gè)更簡(jiǎn)單?

    PyTorch更簡(jiǎn)單。選擇TensorFlow還是PyTorch取決于您的具體需求和偏好。如果您需要一個(gè)易于使用、靈活且具有強(qiáng)大社區(qū)支持的框架,PyTorch可能是一個(gè)更好的選擇。如果您需要一個(gè)在
    的頭像 發(fā)表于 07-05 09:45 ?616次閱讀

    tensorflow和pytorch哪個(gè)好

    tensorflow和pytorch都是非常不錯(cuò)的強(qiáng)大的框架,TensorFlow還是PyTorch哪個(gè)更好取決于您的具體需求,以下是關(guān)于這兩個(gè)框架的一些關(guān)鍵點(diǎn): TensorFlow : 發(fā)布時(shí)間
    的頭像 發(fā)表于 07-05 09:42 ?568次閱讀

    tensorflow簡(jiǎn)單的模型訓(xùn)練

    在本文中,我們將詳細(xì)介紹如何使用TensorFlow進(jìn)行簡(jiǎn)單的模型訓(xùn)練。TensorFlow是一個(gè)開(kāi)源的機(jī)器學(xué)習(xí)庫(kù),廣泛用于各種機(jī)器學(xué)習(xí)任務(wù),包括圖像識(shí)別、自然語(yǔ)言處理等。我們將從安裝
    的頭像 發(fā)表于 07-05 09:38 ?426次閱讀

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 Keras和TensorFlow簡(jiǎn)介 Keras是一個(gè)高級(jí)神經(jīng)網(wǎng)絡(luò)API,它提供了一種簡(jiǎn)單、快速的方式來(lái)構(gòu)建
    的頭像 發(fā)表于 07-05 09:36 ?396次閱讀

    請(qǐng)問(wèn)STM32H730 OSPI在內(nèi)存映射模式下單次讀寫長(zhǎng)度是多少?

    方面的配置。 OSPIM_CfgTypeDef sOspiManagerCfg = {0};/* USER CODE BEGIN OCTOSPI1_Init 1 *//* USER CODE END
    發(fā)表于 05-31 06:55

    fpga在通信方面的應(yīng)用

    FPGA在通信方面的應(yīng)用非常廣泛,以下是一些主要的應(yīng)用場(chǎng)景。
    的頭像 發(fā)表于 03-27 14:10 ?853次閱讀

    使用電腦上tensorflow創(chuàng)建的模型,轉(zhuǎn)換為tflite格式了,導(dǎo)入后進(jìn)度條反復(fù)出現(xiàn)0-100%變化,為什么?

    使用電腦上tensorflow創(chuàng)建的模型,轉(zhuǎn)換為tflite格式了,導(dǎo)入后,進(jìn)度條反復(fù)出現(xiàn)0-100%變化,卡了一個(gè)晚上了還沒(méi)分析好?
    發(fā)表于 03-19 06:20

    數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點(diǎn)

    數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點(diǎn)? 數(shù)組和鏈表是常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),用于組織和存儲(chǔ)數(shù)據(jù)。它們在內(nèi)存中的存儲(chǔ)方式以及優(yōu)缺點(diǎn)方面存在一些顯著的差異。本文將詳細(xì)探討這些差異以及它們的優(yōu)缺點(diǎn)。 1.
    的頭像 發(fā)表于 02-21 11:30 ?789次閱讀

    【飛騰派4G版免費(fèi)試用】第五章:使用C++部署tflite模型到飛騰派

    本章記錄下使用 C++ 進(jìn)行佩奇檢測(cè) tflite 模型推理的過(guò)程。
    的頭像 發(fā)表于 12-28 09:08 ?1136次閱讀
    【飛騰派4G版免費(fèi)試用】第五章:使用C++部署<b class='flag-5'>tflite</b>模型到飛騰派

    【飛騰派4G版免費(fèi)試用】第五章:使用C++部署tflite模型到飛騰派

    Pose Detection in C++ using Machine Learning with TensorFlow Lite Tensorflow 1 vs Tensorflow
    發(fā)表于 12-27 21:17

    【飛騰派4G版免費(fèi)試用】第四章:部署模型到飛騰派的嘗試

    tensorflow 的源碼目錄: mkdir tflite_pc; cd tflite_pc; cmake --build ../tensorflow/
    發(fā)表于 12-20 21:10

    HarmonyOS:使用MindSpore Lite引擎進(jìn)行模型推理

    如果是第三方框架的模型,比如 TensorFlowTensorFlow Lite、Caffe、ONNX 等,可以使用模型轉(zhuǎn)換工具轉(zhuǎn)換為.ms 格式的模型文件。 創(chuàng)建上下文,設(shè)置線程數(shù)、設(shè)備類型等參數(shù)
    發(fā)表于 12-14 11:41