在嵌入式設(shè)計中常常需要將應(yīng)用程序打包到有限的片上內(nèi)存中,現(xiàn)在,將人工智能神經(jīng)網(wǎng)絡(luò)模型壓縮到有限的存儲器中也是如此。對于傳統(tǒng)軟件,就某些方面而言,做到這一點可謂更具挑戰(zhàn),因為基于神經(jīng)網(wǎng)絡(luò)的系統(tǒng)中的工作內(nèi)存都是“內(nèi)部循環(huán)”的,要求換出到DDR內(nèi)存,可能會降低性能。另外,在推理過程中重復(fù)訪問DDR也會增加邊緣設(shè)備的典型低功耗預(yù)算,這一點也同樣很難令人滿意。更大的片上存儲器是解決問題方法之一,但是會增加產(chǎn)品成本。綜上所述,最佳解決方案是盡可能高效地將模型打包到可用內(nèi)存中。
眾所周知,在編譯人工智能神經(jīng)網(wǎng)絡(luò)模型以便在邊緣設(shè)備上運行時,有一些量化技術(shù)可以縮小此模型的大小,如將浮點數(shù)據(jù)和權(quán)重值轉(zhuǎn)換為定點,然后進一步縮小為INT8或更小的值。想象一下,如果還能更進一步會怎樣。在本文中,我將介紹幾種圖優(yōu)化技術(shù),助您在2MB的二級緩存中安裝更多量化模型,但僅僅量化是無法完成安裝的。
優(yōu)化人工智能神經(jīng)網(wǎng)絡(luò)圖中的緩沖區(qū)分配

▲圖1.一個簡單的人工智能圖
(Op代表運算符;E代表外部輸入;
C代表常數(shù)(權(quán)重);V代表變量;T代表張量)
人工智能神經(jīng)網(wǎng)絡(luò)模型表示為圖形并作為圖形來管理,其中的運算是通過緩沖區(qū)相互連接的節(jié)點進行的。這些緩沖區(qū)固定分配在內(nèi)存中,大小在編譯圖時確定,用于保存圖中的中間計算結(jié)果或輸入和輸出。在所有圖中,流水關(guān)系圖是最基本的一種,但更典型的簡單圖如圖1所示。
我們的目標(biāo)是讓編譯器優(yōu)化緩沖區(qū)內(nèi)存總需求。想想簡單的人工智能神經(jīng)網(wǎng)絡(luò)圖中可能的分配序列(圖2中的左圖)。首先要明白,圖中的不同運算需要不同大小的緩沖區(qū),并且在進行下一波處理之前,將不再需要已完成運算的輸入緩沖區(qū)。讀取緩沖區(qū)A(此處分配有800K字節(jié)),就可以在后續(xù)運算中重復(fù)使用了,緩沖區(qū)B也是如此,依此類推。在左圖出現(xiàn)分支時,先將緩沖區(qū)A和B分配給了右側(cè)分支,之后則必須為左側(cè)分支分配一個新的緩沖區(qū)C。

▲圖2.說明緩沖區(qū)分配的簡單圖
(右圖在左圖的基礎(chǔ)上,將緩沖區(qū)B和C互換
并增加了緩沖區(qū)B的大小,得到了改善)
從這個例子中不難看出,一開始就將緩沖區(qū)B的大小增加到1000K,稍后再在左側(cè)分支中重復(fù)使用B的全部大小,右側(cè)分支中緩沖區(qū)C就只需要額外10K內(nèi)存,如右圖所示。左/右內(nèi)存需求差異明顯。左圖需要2.5MB (800K+700K+1000K),而修改順序后的右圖只需要 1.81MB(800K+1000K+10K)。
在一般人工智能神經(jīng)網(wǎng)絡(luò)圖中找出最優(yōu)排序就是眾所周知的0-1背包問題。我們展開了初步測試,研究這種優(yōu)化如何改善打包到固定大小L2緩存的效果。即使是當(dāng)下初步階段,結(jié)果也相當(dāng)不錯。我們測試了幾種常見網(wǎng)絡(luò)在2MB和4MB L2緩存中的安裝效果。優(yōu)化前,只有13%的模型可以安裝在2MB內(nèi)存中,38%的模型可以安裝在4MB內(nèi)存中。優(yōu)化后,66%的模型可以安裝在2MB內(nèi)存中,83%的模型可以安裝在4MB內(nèi)存中。僅這一項優(yōu)化就值得我們努力,我們的目標(biāo)是確保更多模型可以完全在片上內(nèi)存中運行。
通過合并緩沖區(qū)優(yōu)化人工智能神經(jīng)網(wǎng)絡(luò)模型
在卷積人工智能神經(jīng)網(wǎng)絡(luò)模型中,經(jīng)過前幾層處理后,緩沖區(qū)大小通常會縮小。這種結(jié)果表明,一開始分配的大緩沖區(qū)可以通過與稍后需要的較小緩沖區(qū)共享空間得到更高效的利用。圖3說明了這種可能性。

▲圖3.不同的簡單圖
(最初為緩沖區(qū)A分配的大小可以稍后由左右分支共享,
此處的C緩沖區(qū)源自最初的A緩沖區(qū))
我們試著進行優(yōu)化,看看這種合并對內(nèi)存總需求有何影響。在一系列無比熟悉的網(wǎng)絡(luò)中,我們發(fā)現(xiàn)緩沖區(qū)總大小減小了15%到35%。再次重申一遍,這些改進非常具有吸引力。
?
要點
?
我們通過這些優(yōu)化,運行各種主流卷積人工智能神經(jīng)網(wǎng)絡(luò)模型,從檢測到分類到細(xì)分,再到RNN模型不一而足。大多數(shù)情況下,模型完全遷移至了4MB二級緩存,某些情況下,模型遷移至了二級緩存中,只有一部分還留在DDR內(nèi)存中。幾乎所有模型都在打包方面呈現(xiàn)出巨大改進。
即使你的人工智能神經(jīng)網(wǎng)絡(luò)模型無法安裝在片上內(nèi)存,也并非無法優(yōu)化。在人工智能編譯器階段可以對緩沖區(qū)進行優(yōu)化,大幅壓縮模型總大小。在CEVA,我們很樂意與你討論以上問題和其他想法,以便進一步優(yōu)化人工智能神經(jīng)網(wǎng)絡(luò)模型的內(nèi)存使用。
識別右側(cè)二維碼
立即了解CEVA
更多信息

本文作者:Rami Drucker, Machine Learning SW Architect, CEVA
-
CEVA
+關(guān)注
關(guān)注
1文章
189瀏覽量
76932
原文標(biāo)題:高效打包邊緣人工智能神經(jīng)網(wǎng)絡(luò)模型
文章出處:【微信號:CEVA-IP,微信公眾號:CEVA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
利用超微型 Neuton ML 模型解鎖 SoC 邊緣人工智能
AI 邊緣計算網(wǎng)關(guān):開啟智能新時代的鑰匙?—龍興物聯(lián)
超小型Neuton機器學(xué)習(xí)模型, 在任何系統(tǒng)級芯片(SoC)上解鎖邊緣人工智能應(yīng)用.
Nordic 收購 Neuton.AI # Neuton ML 模型解鎖 SoC 邊緣人工智能

開售RK3576 高性能人工智能主板
用 ADI 的 MAX78002 MCU 開發(fā)邊緣人工智能應(yīng)用

人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

在邊緣設(shè)備上設(shè)計和部署深度神經(jīng)網(wǎng)絡(luò)的實用框架
AI模型部署邊緣設(shè)備的奇妙之旅:如何實現(xiàn)手寫數(shù)字識別
卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較
RNN模型與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的區(qū)別
嵌入式和人工智能究竟是什么關(guān)系?
Moku人工神經(jīng)網(wǎng)絡(luò)101

評論