如何在資源受限的RISC-V內核上嵌入人工智能?
人工智能(AI)幾十年來(lái)一直是一個(gè)熱門(mén)的技術(shù)話(huà)題。根據Statista 和Gartner 的預測,人工智能的收入將在未來(lái)4 年內增長(cháng)4 倍,在2024 年后將超過(guò)1 000 億美元(1 美元約為人民幣6.4 元)。
本文引用地址:http://dyxdggzs.com/article/202204/433078.htm傳統上,復雜的人工智能計算在云端數據中心運行。在GPU 加速器和專(zhuān)門(mén)的系統級芯片(SoC)的幫助下,在臺式機上實(shí)現人工智能模型,可以減少云端訪(fǎng)問(wèn)的要求。但在過(guò)去的幾年里,一個(gè)重要的轉變是AI 處理從云端轉到設備級。這主要歸功于嵌入式設備/SoC 的性能不斷提高和安全考慮。這種轉變催生了嵌入式人工智能的概念——機器學(xué)習和深度學(xué)習在設備級嵌入式軟件中的應用。
嵌入式人工智能使設備能夠在邊緣運行簡(jiǎn)單的人工智能模型,并立即重復使用計算結果。從安全角度以及從降低延遲、最小化數據傳輸時(shí)間/ 能耗成本和避免使用通信硬件等方面來(lái)看是有利的。這可能對關(guān)鍵的工業(yè)物聯(lián)網(wǎng)(IIoT)基礎設施特別重要,邊緣AI 算法可用于收集各種傳感器的數據,并實(shí)時(shí)預測系統故障。
鑒于將人工智能計算轉移到邊緣的趨勢,在為物聯(lián)網(wǎng)/IIoT 應用選擇SoC/MCU(微控制器)時(shí),能運行人工智能/ 機器學(xué)習任務(wù)的能力成為一個(gè)“必備”的選項。同時(shí)對于其他的一些案例,如數據傳輸時(shí)間/ 能耗成本可能超過(guò)在設備層運行一個(gè)簡(jiǎn)單的AI 模型時(shí),引入邊緣人工智能也具有價(jià)值。例如,智能可穿戴設備、植入式傳感器、資產(chǎn)跟蹤、環(huán)境傳感器、無(wú)人機、音頻/AR/VR 耳機等應用。
嵌入式設備通常受到資源限制:板上內存小,指令集有限,特定的硬件模塊如FPU(Float Point Unit,浮點(diǎn)運算單元)、DSP(Digital Signal Processing,數字信號處理)較少。這些限制使得即使在嵌入式平臺上運行簡(jiǎn)單的人工智能算法也很棘手。從軟件的角度來(lái)看,它使得通過(guò)專(zhuān)用的人工智能框架,如TensorFlow Lite forMicrocontrollers(TFLite-Micro)變得更加容易。從硬件的角度來(lái)看,使用矢量/ 圖形協(xié)處理器或SIMD 指令可能是一個(gè)解決方案;這兩者通常都是與昂貴的高性能SoC 一起交付。如果成本和功耗預算僅限于帶有(或甚至沒(méi)有)DSP 模塊的MCU,此時(shí)怎么辦?
用于微控制器的TensorFlow Lite框架
基于神經(jīng)網(wǎng)絡(luò )的算法可以提供可靠的結果,同時(shí)從頭去實(shí)現它們通常也相當復雜,包括張量運算和非線(xiàn)性浮點(diǎn)函數。但有幾個(gè)框架可以簡(jiǎn)化開(kāi)發(fā)者的繁瑣任務(wù)。TensorFlow Lite 是在2017 年推出的,針對的是移動(dòng)設備上的神經(jīng)網(wǎng)絡(luò )推理。而最終TensorFlow Lite for Microcontrollers 在2021 年從TensorFlow Lite 中分離出來(lái),專(zhuān)門(mén)針對資源受限的嵌入式系統,將TensorFlow Lite 的其余部分留給Android/iOS 應用。
TFLite-Micro 采用了帶有靜態(tài)內存規劃器的直譯器形式,支持方案提供商特有的優(yōu)化項。它解決了嵌入式系統的常見(jiàn)問(wèn)題,如內存小和功耗限制等,并考慮到了支持各種架構/ 微架構的需要。它在任何嵌入式平臺上開(kāi)箱即用,支持最小的TensorFlow 操作集,如卷積、張量乘法、調整大小和切片,并仍然足以運行豐富的人工智能應用,如圖像分類(lèi)、時(shí)間序列處理或關(guān)鍵詞檢測。Codasip 構建了特定應用的平臺,因此TFLite-Micro 對特定領(lǐng)域專(zhuān)用優(yōu)化項的支持,與Codasip Studio 工具完美吻合。
事實(shí)上,Codasip 處理器設計工具簡(jiǎn)化了ASIP(專(zhuān)用指令集處理器)設計過(guò)程中最耗時(shí)的階段,包括:1)高級架構描述和ISA 探索,2)自動(dòng)編譯器生成,3)剖析器(profiler)和調試分析工具,4)周期精確的(硬件級)仿真,5)綜合驗證環(huán)境。
下面以Codasip 的支持TFLite Micro 的L31 RISC-V嵌入式內核為例來(lái)進(jìn)行分析,來(lái)對標準RISC-V 和自定義擴展都進(jìn)行了評估??蛻?hù)可以利用這些擴展,使功率、性能和面積的權衡超出傳統設計的MCU 所能做到的性能。評估結果將顯示該范圍有多廣,并為進(jìn)一步的改進(jìn)提供建議。
未來(lái)許多客戶(hù)將開(kāi)發(fā)他們自己的神經(jīng)網(wǎng)絡(luò ),但基礎機制是相似的。因此可以使用標準軟件;在這個(gè)示例中,使用了著(zhù)名的“MNIST 手寫(xiě)體數字分類(lèi)”。自卷積神經(jīng)網(wǎng)絡(luò )發(fā)明以來(lái),這一直被認為是一個(gè)基準。
圖1 MNIST“手寫(xiě)體數字識別”基準意味著(zhù)對灰度28x28圖像進(jìn)行智能標簽分配
它是一個(gè)大小為28x28 像素的灰度圖像,包含一個(gè)手寫(xiě)的數字和該圖像最可能輸出的數字(見(jiàn)圖1)。盡管任務(wù)表面上很簡(jiǎn)單,但這包括了TFLite-Micro 支持的大量運算符子集。通常用于解決它的神經(jīng)網(wǎng)絡(luò )架構包含兩個(gè)卷積層和池化層、至少一個(gè)全連接層、向量化非線(xiàn)性函數、數據調整大小和規范化操作等(見(jiàn)圖2)。
圖2 用于手寫(xiě)數字識別的卷積神經(jīng)網(wǎng)絡(luò )
為了探索這段代碼在L31 CPU 上的性能,CodasipStudio 的內置剖析器提供了詳細的PPA(性能- 功耗-面積)預估,源代碼覆蓋率和單個(gè)指令的使用。這使得新的指令可以被快速試用并分析其性能優(yōu)勢。
表1 剖析器提供的代碼覆蓋率分析
表1 顯示了剖析器所提供的代碼覆蓋率分析。正如預期的那樣,對于圖像分類(lèi)任務(wù)來(lái)說(shuō),大部分的時(shí)間(~84%)都花在了圖像卷積函數上。從這個(gè)信息開(kāi)始,我們可以進(jìn)入相應的‘ConvPerChannel’源代碼,對其進(jìn)行更詳細的探索。TFLite-Micro 中的卷積是以嵌套for-loop 的形式編寫(xiě)的,索引各種卷積窗口尺寸以及訓練數據批次。最深的for-loop 掃描了圖像輸入通道,根據分析信息顯示,CPU 在這里花費的時(shí)間最多。
圖3 Codasip的內置剖析工具允許我們找到應用程序代碼中的“熱點(diǎn)”
源代碼(圖3)中標明了在該處花費的周期數,給出了周期數的百分比和絕對數。反匯編顯示了這些“熱點(diǎn)”的CPU 指令。這些信息表明,哪里需要優(yōu)化?哪些指令可以被加入/ 替換以獲得更好的性能?例如,在TFLite 卷積的特殊情況下,大部分時(shí)間花在乘法+ 累加操作上(mul 后面是c.add),以及隨后的(向量)內存加載(for-statement 后面的lb 指令)。此外,合并乘法和加法,以及用即時(shí)地址增量加載字節,似乎是一個(gè)可以提高性能的定制方案。我們將在后面的自定義指令部分再來(lái)討論這個(gè)話(huà)題。
Codasip Studio 工具中提供的剖析器還可以預估ASIP 的功率和面積,提供設計中每個(gè)硬件塊的信息。這使設計者能夠在L31內核的標準變體之間進(jìn)行選擇,并評估使用TFLite-Micro 進(jìn)行量化的好處。
圖4 包含了PPA 圖表,顯示了識別測試集的單一圖像所需的相對時(shí)鐘周期數、消耗的能量和利用的芯片面積。沒(méi)有浮點(diǎn)硬件的基本L31 配置是有效的,但性能相對較慢,因為FP 操作必須在軟件中模擬。而通過(guò)在L31 中添加硬件浮點(diǎn)單元可以解決這個(gè)問(wèn)題,并使總時(shí)間減少近85%,功耗減少42%,但代價(jià)是芯片面積擴大(+207%)。
圖4 Codasip的L31 32位整數內核、32位浮點(diǎn)內核以及運行手寫(xiě)數字識別的量化TFLite模型的32位整數內核之間的PPA比較。
此外還有一個(gè)解決方案:TFLite-Micro 支持神經(jīng)網(wǎng)絡(luò )參數和輸入數據的量化。這個(gè)功能是從最初的TensorFlow Lite 框架中提取的, 并提供了將任何TensorFlow 模型轉換為整數(有符號/ 無(wú)符號8/16 位)表示的能力,因此它可以直接在整數內核上運行。圖4顯示,在標準整數L31 內核上運行的int8 量化模型幾乎達到了浮點(diǎn)內核的性能,運行時(shí)間減少了80% 以上,功耗比初始水平進(jìn)一步提高了78%,而不需要增加內核的復雜性和硅面積。
神經(jīng)網(wǎng)絡(luò )模型的量化總是在預測精度和算法復雜性之間進(jìn)行權衡。從浮點(diǎn)版本切換到int16 和int8 不可避免地會(huì )降低精度,而用戶(hù)有責任確保它不會(huì )降太多。量化(int8)和初始浮點(diǎn)模型都在包含10,000 張圖片的測試集上得到了驗證,結果準確率為98.91%(fp32)和98.89%(int8),這似乎是對資源、功率和性能增益的合理權衡。
自定義指令集的優(yōu)勢
在SoC 設計的框架內,“傳統”處理器(MCU、DSP、GPU 等)提供了一些特定的強大功能。為特定需求創(chuàng )建領(lǐng)域專(zhuān)用處理器,在面積、功耗和性能方面有很大優(yōu)勢。一個(gè)優(yōu)化的指令集結構(ISA)與最小的所需指令會(huì )產(chǎn)生一個(gè)更緊湊和高效的內核,可在更少的周期內執行所需的任務(wù),從而也降低了功耗。
運行TFLite 圖像分類(lèi)任務(wù)的標準L31 內核“熱點(diǎn)”識別提供了提示,即哪些指令可以合并或優(yōu)化以促進(jìn)特定的任務(wù)?為了優(yōu)化矢量存儲器的加載和卷積乘法和累加序列,增加了兩條自定義指令:mac3 將乘法和加法合并到一個(gè)時(shí)鐘周期,lb.pi 在加載指令后立即增加地址。這兩條指令目的在于減少頻繁重復指令序列所花費的時(shí)鐘周期數。
Codasip 的CodAL 高級處理器描述語(yǔ)言提供了一種有效的方式來(lái)描述匯編編碼和程序員對指令功能的想法。這使得迭代嘗試新指令和重新編制代碼以衡量其有效性變得非???。圖5 是一個(gè)如何在CodAL 中定義新指令的例子。
通過(guò)對運行相同圖像分類(lèi)任務(wù)的定制L31 整數內核進(jìn)行分析,表明新指令可以被廣泛使用。圖6 總結了指令集中最頻繁使用的前5 條指令;其中乘法累積和帶地址增量的字節加載包含其中。
圖6 指令集中最頻繁使用的前5條指令
利用定制的L31 內核進(jìn)行的源代碼分析顯示,以前發(fā)現的“熱點(diǎn)”性能得到了改善。反匯編(圖7)顯示,它們是在新的定制指令的幫助下執行的,最深的forloop中的凈周期數已經(jīng)大大減少。
圖7 自定義指令如何改變源代碼的CPU時(shí)間分布。反匯編顯示自定義指令在這里被廣泛使用,導致卷積乘法和字節數組加載的時(shí)間大大減少。
圖8 顯示了這些架構/ 微架構的定制是如何進(jìn)一步改善L31 內核在圖像分類(lèi)任務(wù)上的PPA(Power,Performance,and Area,功耗,性能和尺寸)指標??jì)蓮垐D比較了定制的L31 的PPA 和之前在量化int8 圖像分類(lèi)任務(wù)上的標準32 位整數內核的參數。
圖8 Codasip的L31內核32位整數標準核和定制核之間的PPA比較,顯示了在手寫(xiě)數字識別任務(wù)上PPA的改善。
通過(guò)僅增加兩條新指令,算法優(yōu)化和從內存加載數組的方法,與在標準內核上運行的量化模型相比,總運行時(shí)間提高了10% 以上,功耗降低了8% 以上,而面積只增加了0.8%,這似乎是一個(gè)合理的定制成本。使用SIMD(Single Instruction Multiple Data,單指令多數據流)指令可能會(huì )進(jìn)一步提升性能,但很可能會(huì )大大增加面積。
對于許多人工智能公司來(lái)說(shuō),用于加速其設計的確切機制往往是企業(yè)的“秘密武器”。因此,Codasip 的處理器設計自動(dòng)化工具Studio 使客戶(hù)能夠靈活地定制機器學(xué)習(ML)特定的內核并創(chuàng )建專(zhuān)有的加速器解決方案。
(本文來(lái)源于《電子產(chǎn)品世界》雜志2022年4月期)
評論