新聞中心

EEPW首頁(yè) > 智能計(jì)算 > 設(shè)計(jì)應(yīng)用 > 如何在資源受限的RISC-V內(nèi)核上嵌入人工智能?

如何在資源受限的RISC-V內(nèi)核上嵌入人工智能?

—— 以Codasip L31內(nèi)核為例來(lái)分析基于自定義指令的神經(jīng)網(wǎng)絡(luò)
作者:Alexey Shchekin(Codasip公司解決方案工程師) 時(shí)間:2022-04-14 來(lái)源:電子產(chǎn)品世界 收藏

(AI)幾十年來(lái)一直是一個(gè)熱門(mén)的技術(shù)話題。根據(jù)Statista 和Gartner 的預(yù)測(cè),的收入將在未來(lái)4 年內(nèi)增長(zhǎng)4 倍,在2024 年后將超過(guò)1 000 億美元(1 美元約為人民幣6.4 元)。

本文引用地址:http://2s4d.com/article/202204/433078.htm

傳統(tǒng)上,復(fù)雜的計(jì)算在云端數(shù)據(jù)中心運(yùn)行。在GPU 加速器和專(zhuān)門(mén)的系統(tǒng)級(jí)芯片(SoC)的幫助下,在臺(tái)式機(jī)上實(shí)現(xiàn)人工智能模型,可以減少云端訪問(wèn)的要求。但在過(guò)去的幾年里,一個(gè)重要的轉(zhuǎn)變是AI 處理從云端轉(zhuǎn)到設(shè)備級(jí)。這主要?dú)w功于嵌入式設(shè)備/SoC 的性能不斷提高和安全考慮。這種轉(zhuǎn)變催生了嵌入式人工智能的概念——機(jī)器學(xué)習(xí)和深度學(xué)習(xí)在設(shè)備級(jí)嵌入式軟件中的應(yīng)用。

嵌入式人工智能使設(shè)備能夠在邊緣運(yùn)行簡(jiǎn)單的人工智能模型,并立即重復(fù)使用計(jì)算結(jié)果。從安全角度以及從降低延遲、最小化數(shù)據(jù)傳輸時(shí)間/ 能耗成本和避免使用通信硬件等方面來(lái)看是有利的。這可能對(duì)關(guān)鍵的工業(yè)物聯(lián)網(wǎng)(IIoT)基礎(chǔ)設(shè)施特別重要,邊緣AI 算法可用于收集各種傳感器的數(shù)據(jù),并實(shí)時(shí)預(yù)測(cè)系統(tǒng)故障。

鑒于將人工智能計(jì)算轉(zhuǎn)移到邊緣的趨勢(shì),在為物聯(lián)網(wǎng)/IIoT 應(yīng)用選擇SoC/MCU(微控制器)時(shí),能運(yùn)行人工智能/ 機(jī)器學(xué)習(xí)任務(wù)的能力成為一個(gè)“必備”的選項(xiàng)。同時(shí)對(duì)于其他的一些案例,如數(shù)據(jù)傳輸時(shí)間/ 能耗成本可能超過(guò)在設(shè)備層運(yùn)行一個(gè)簡(jiǎn)單的AI 模型時(shí),引入邊緣人工智能也具有價(jià)值。例如,智能可穿戴設(shè)備、植入式傳感器、資產(chǎn)跟蹤、環(huán)境傳感器、無(wú)人機(jī)、音頻/AR/VR 耳機(jī)等應(yīng)用。

嵌入式設(shè)備通常受到資源限制:板上內(nèi)存小,指令集有限,特定的硬件模塊如FPU(Float Point Unit,浮點(diǎn)運(yùn)算單元)、DSP(Digital Signal Processing,數(shù)字信號(hào)處理)較少。這些限制使得即使在嵌入式平臺(tái)上運(yùn)行簡(jiǎn)單的人工智能算法也很棘手。從軟件的角度來(lái)看,它使得通過(guò)專(zhuān)用的人工智能框架,如TensorFlow Lite forMicrocontrollers(TFLite-Micro)變得更加容易。從硬件的角度來(lái)看,使用矢量/ 圖形協(xié)處理器或SIMD 指令可能是一個(gè)解決方案;這兩者通常都是與昂貴的高性能SoC 一起交付。如果成本和功耗預(yù)算僅限于帶有(或甚至沒(méi)有)DSP 模塊的MCU,此時(shí)怎么辦?

用于微控制器的TensorFlow Lite框架

基于神經(jīng)網(wǎng)絡(luò)的算法可以提供可靠的結(jié)果,同時(shí)從頭去實(shí)現(xiàn)它們通常也相當(dāng)復(fù)雜,包括張量運(yùn)算和非線性浮點(diǎn)函數(shù)。但有幾個(gè)框架可以簡(jiǎn)化開(kāi)發(fā)者的繁瑣任務(wù)。TensorFlow Lite 是在2017 年推出的,針對(duì)的是移動(dòng)設(shè)備上的神經(jīng)網(wǎng)絡(luò)推理。而最終TensorFlow Lite for Microcontrollers 在2021 年從TensorFlow Lite 中分離出來(lái),專(zhuān)門(mén)針對(duì)資源受限的嵌入式系統(tǒng),將TensorFlow Lite 的其余部分留給Android/iOS 應(yīng)用。

TFLite-Micro 采用了帶有靜態(tài)內(nèi)存規(guī)劃器的直譯器形式,支持方案提供商特有的優(yōu)化項(xiàng)。它解決了嵌入式系統(tǒng)的常見(jiàn)問(wèn)題,如內(nèi)存小和功耗限制等,并考慮到了支持各種架構(gòu)/ 微架構(gòu)的需要。它在任何嵌入式平臺(tái)上開(kāi)箱即用,支持最小的TensorFlow 操作集,如卷積、張量乘法、調(diào)整大小和切片,并仍然足以運(yùn)行豐富的人工智能應(yīng)用,如圖像分類(lèi)、時(shí)間序列處理或關(guān)鍵詞檢測(cè)。Codasip 構(gòu)建了特定應(yīng)用的平臺(tái),因此TFLite-Micro 對(duì)特定領(lǐng)域?qū)S脙?yōu)化項(xiàng)的支持,與Codasip Studio 工具完美吻合。

事實(shí)上,Codasip 處理器設(shè)計(jì)工具簡(jiǎn)化了ASIP(專(zhuān)用指令集處理器)設(shè)計(jì)過(guò)程中最耗時(shí)的階段,包括:1)高級(jí)架構(gòu)描述和ISA 探索,2)自動(dòng)編譯器生成,3)剖析器(profiler)和調(diào)試分析工具,4)周期精確的(硬件級(jí))仿真,5)綜合驗(yàn)證環(huán)境。

下面以Codasip 的支持TFLite Micro 的L31 RISC-V嵌入式內(nèi)核為例來(lái)進(jìn)行分析,來(lái)對(duì)標(biāo)準(zhǔn)RISC-V 和自定義擴(kuò)展都進(jìn)行了評(píng)估。客戶可以利用這些擴(kuò)展,使功率、性能和面積的權(quán)衡超出傳統(tǒng)設(shè)計(jì)的MCU 所能做到的性能。評(píng)估結(jié)果將顯示該范圍有多廣,并為進(jìn)一步的改進(jìn)提供建議。

未來(lái)許多客戶將開(kāi)發(fā)他們自己的神經(jīng)網(wǎng)絡(luò),但基礎(chǔ)機(jī)制是相似的。因此可以使用標(biāo)準(zhǔn)軟件;在這個(gè)示例中,使用了著名的“MNIST 手寫(xiě)體數(shù)字分類(lèi)”。自卷積神經(jīng)網(wǎng)絡(luò)發(fā)明以來(lái),這一直被認(rèn)為是一個(gè)基準(zhǔn)。

image.png 

圖1 MNIST“手寫(xiě)體數(shù)字識(shí)別”基準(zhǔn)意味著對(duì)灰度28x28圖像進(jìn)行智能標(biāo)簽分配

它是一個(gè)大小為28x28 像素的灰度圖像,包含一個(gè)手寫(xiě)的數(shù)字和該圖像最可能輸出的數(shù)字(見(jiàn)圖1)。盡管任務(wù)表面上很簡(jiǎn)單,但這包括了TFLite-Micro 支持的大量運(yùn)算符子集。通常用于解決它的神經(jīng)網(wǎng)絡(luò)架構(gòu)包含兩個(gè)卷積層和池化層、至少一個(gè)全連接層、向量化非線性函數(shù)、數(shù)據(jù)調(diào)整大小和規(guī)范化操作等(見(jiàn)圖2)。

1649925291165478.png

圖2 用于手寫(xiě)數(shù)字識(shí)別的卷積神經(jīng)網(wǎng)絡(luò)

為了探索這段代碼在L31 CPU 上的性能,CodasipStudio 的內(nèi)置剖析器提供了詳細(xì)的PPA(性能- 功耗-面積)預(yù)估,源代碼覆蓋率和單個(gè)指令的使用。這使得新的指令可以被快速試用并分析其性能優(yōu)勢(shì)。

表1 剖析器提供的代碼覆蓋率分析

1649925356152928.png

表1 顯示了剖析器所提供的代碼覆蓋率分析。正如預(yù)期的那樣,對(duì)于圖像分類(lèi)任務(wù)來(lái)說(shuō),大部分的時(shí)間(~84%)都花在了圖像卷積函數(shù)上。從這個(gè)信息開(kāi)始,我們可以進(jìn)入相應(yīng)的‘ConvPerChannel’源代碼,對(duì)其進(jìn)行更詳細(xì)的探索。TFLite-Micro 中的卷積是以嵌套for-loop 的形式編寫(xiě)的,索引各種卷積窗口尺寸以及訓(xùn)練數(shù)據(jù)批次。最深的for-loop 掃描了圖像輸入通道,根據(jù)分析信息顯示,CPU 在這里花費(fèi)的時(shí)間最多。

1649925399875614.png

圖3 Codasip的內(nèi)置剖析工具允許我們找到應(yīng)用程序代碼中的“熱點(diǎn)”

源代碼(圖3)中標(biāo)明了在該處花費(fèi)的周期數(shù),給出了周期數(shù)的百分比和絕對(duì)數(shù)。反匯編顯示了這些“熱點(diǎn)”的CPU 指令。這些信息表明,哪里需要優(yōu)化?哪些指令可以被加入/ 替換以獲得更好的性能?例如,在TFLite 卷積的特殊情況下,大部分時(shí)間花在乘法+ 累加操作上(mul 后面是c.add),以及隨后的(向量)內(nèi)存加載(for-statement 后面的lb 指令)。此外,合并乘法和加法,以及用即時(shí)地址增量加載字節(jié),似乎是一個(gè)可以提高性能的定制方案。我們將在后面的自定義指令部分再來(lái)討論這個(gè)話題。

Codasip Studio 工具中提供的剖析器還可以預(yù)估ASIP 的功率和面積,提供設(shè)計(jì)中每個(gè)硬件塊的信息。這使設(shè)計(jì)者能夠在L31內(nèi)核的標(biāo)準(zhǔn)變體之間進(jìn)行選擇,并評(píng)估使用TFLite-Micro 進(jìn)行量化的好處。

圖4 包含了PPA 圖表,顯示了識(shí)別測(cè)試集的單一圖像所需的相對(duì)時(shí)鐘周期數(shù)、消耗的能量和利用的芯片面積。沒(méi)有浮點(diǎn)硬件的基本L31 配置是有效的,但性能相對(duì)較慢,因?yàn)镕P 操作必須在軟件中模擬。而通過(guò)在L31 中添加硬件浮點(diǎn)單元可以解決這個(gè)問(wèn)題,并使總時(shí)間減少近85%,功耗減少42%,但代價(jià)是芯片面積擴(kuò)大(+207%)。

1649925512748417.png

圖4 Codasip的L31 32位整數(shù)內(nèi)核、32位浮點(diǎn)內(nèi)核以及運(yùn)行手寫(xiě)數(shù)字識(shí)別的量化TFLite模型的32位整數(shù)內(nèi)核之間的PPA比較。

此外還有一個(gè)解決方案:TFLite-Micro 支持神經(jīng)網(wǎng)絡(luò)參數(shù)和輸入數(shù)據(jù)的量化。這個(gè)功能是從最初的TensorFlow Lite 框架中提取的, 并提供了將任何TensorFlow 模型轉(zhuǎn)換為整數(shù)(有符號(hào)/ 無(wú)符號(hào)8/16 位)表示的能力,因此它可以直接在整數(shù)內(nèi)核上運(yùn)行。圖4顯示,在標(biāo)準(zhǔn)整數(shù)L31 內(nèi)核上運(yùn)行的int8 量化模型幾乎達(dá)到了浮點(diǎn)內(nèi)核的性能,運(yùn)行時(shí)間減少了80% 以上,功耗比初始水平進(jìn)一步提高了78%,而不需要增加內(nèi)核的復(fù)雜性和硅面積。

神經(jīng)網(wǎng)絡(luò)模型的量化總是在預(yù)測(cè)精度和算法復(fù)雜性之間進(jìn)行權(quán)衡。從浮點(diǎn)版本切換到int16 和int8 不可避免地會(huì)降低精度,而用戶有責(zé)任確保它不會(huì)降太多。量化(int8)和初始浮點(diǎn)模型都在包含10,000 張圖片的測(cè)試集上得到了驗(yàn)證,結(jié)果準(zhǔn)確率為98.91%(fp32)和98.89%(int8),這似乎是對(duì)資源、功率和性能增益的合理權(quán)衡。

自定義指令集的優(yōu)勢(shì)

在SoC 設(shè)計(jì)的框架內(nèi),“傳統(tǒng)”處理器(MCU、DSP、GPU 等)提供了一些特定的強(qiáng)大功能。為特定需求創(chuàng)建領(lǐng)域?qū)S锰幚砥?,在面積、功耗和性能方面有很大優(yōu)勢(shì)。一個(gè)優(yōu)化的指令集結(jié)構(gòu)(ISA)與最小的所需指令會(huì)產(chǎn)生一個(gè)更緊湊和高效的內(nèi)核,可在更少的周期內(nèi)執(zhí)行所需的任務(wù),從而也降低了功耗。

運(yùn)行TFLite 圖像分類(lèi)任務(wù)的標(biāo)準(zhǔn)L31 內(nèi)核“熱點(diǎn)”識(shí)別提供了提示,即哪些指令可以合并或優(yōu)化以促進(jìn)特定的任務(wù)?為了優(yōu)化矢量存儲(chǔ)器的加載和卷積乘法和累加序列,增加了兩條自定義指令:mac3 將乘法和加法合并到一個(gè)時(shí)鐘周期,lb.pi 在加載指令后立即增加地址。這兩條指令目的在于減少頻繁重復(fù)指令序列所花費(fèi)的時(shí)鐘周期數(shù)。

Codasip 的CodAL 高級(jí)處理器描述語(yǔ)言提供了一種有效的方式來(lái)描述匯編編碼和程序員對(duì)指令功能的想法。這使得迭代嘗試新指令和重新編制代碼以衡量其有效性變得非???。圖5 是一個(gè)如何在CodAL 中定義新指令的例子。

1649925609778211.png

通過(guò)對(duì)運(yùn)行相同圖像分類(lèi)任務(wù)的定制L31 整數(shù)內(nèi)核進(jìn)行分析,表明新指令可以被廣泛使用。圖6 總結(jié)了指令集中最頻繁使用的前5 條指令;其中乘法累積和帶地址增量的字節(jié)加載包含其中。

1649925653415794.png

圖6 指令集中最頻繁使用的前5條指令

利用定制的L31 內(nèi)核進(jìn)行的源代碼分析顯示,以前發(fā)現(xiàn)的“熱點(diǎn)”性能得到了改善。反匯編(圖7)顯示,它們是在新的定制指令的幫助下執(zhí)行的,最深的forloop中的凈周期數(shù)已經(jīng)大大減少。

1649925699509597.png

圖7 自定義指令如何改變?cè)创a的CPU時(shí)間分布。反匯編顯示自定義指令在這里被廣泛使用,導(dǎo)致卷積乘法和字節(jié)數(shù)組加載的時(shí)間大大減少。

圖8 顯示了這些架構(gòu)/ 微架構(gòu)的定制是如何進(jìn)一步改善L31 內(nèi)核在圖像分類(lèi)任務(wù)上的PPA(Power,Performance,and Area,功耗,性能和尺寸)指標(biāo)??jī)蓮垐D比較了定制的L31 的PPA 和之前在量化int8 圖像分類(lèi)任務(wù)上的標(biāo)準(zhǔn)32 位整數(shù)內(nèi)核的參數(shù)。

1649925757640981.png

圖8 Codasip的L31內(nèi)核32位整數(shù)標(biāo)準(zhǔn)核和定制核之間的PPA比較,顯示了在手寫(xiě)數(shù)字識(shí)別任務(wù)上PPA的改善。

通過(guò)僅增加兩條新指令,算法優(yōu)化和從內(nèi)存加載數(shù)組的方法,與在標(biāo)準(zhǔn)內(nèi)核上運(yùn)行的量化模型相比,總運(yùn)行時(shí)間提高了10% 以上,功耗降低了8% 以上,而面積只增加了0.8%,這似乎是一個(gè)合理的定制成本。使用SIMD(Single Instruction Multiple Data,單指令多數(shù)據(jù)流)指令可能會(huì)進(jìn)一步提升性能,但很可能會(huì)大大增加面積。

對(duì)于許多人工智能公司來(lái)說(shuō),用于加速其設(shè)計(jì)的確切機(jī)制往往是企業(yè)的“秘密武器”。因此,Codasip 的處理器設(shè)計(jì)自動(dòng)化工具Studio 使客戶能夠靈活地定制機(jī)器學(xué)習(xí)(ML)特定的內(nèi)核并創(chuàng)建專(zhuān)有的加速器解決方案。

(本文來(lái)源于《電子產(chǎn)品世界》雜志2022年4月期)



評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉