講到AI相信大家第一時間多半是聯(lián)想到大型語言模型(LLM)和生成式AI(genAI, AIGC)應(yīng)用,可以對話聊天、查詢數(shù)據(jù)、生成文章圖像和音樂,而這些應(yīng)用多半需要用到極大的云端算力才能完成。
對于微型AI應(yīng)用,如語音喚醒(語音命令)、異常偵測(振動、異音、環(huán)境傳感器)、運動偵測(手勢、跌倒)、影像分類、影像對象偵測、影像姿態(tài)偵測(全身、手指)等,通??衫脝?a href="http://www.wenjunhu.com/v/tag/137/" target="_blank">芯片(MCU)或微處理器(MPU)配合較小的AI模型就有機會辦到邊緣(離網(wǎng))就完成推論工作。
在之前的文章中提到,AI推論主要都是在進行巨量的矩陣乘加運算(MAC),就是「a×b+c」。而加速計算方式可使用「提高工作頻率速度」、「平行/向量指令集加速」、「多核心加速」、「NPU神經(jīng)網(wǎng)絡(luò)加速器」等硬件加速作法。
而一般單芯片在單核CPU的情況下,最容易達成的作法就是前兩項,而本文將從「平行/向量指令集加速」的角度來為大家說明如何在沒有神經(jīng)網(wǎng)絡(luò)加速器NPU時也能順利玩微型AI應(yīng)用。
1. Arm精簡指令集的演進
目前市售32bit單芯片大約有八到九成都是使用Arm Cortex-M系列硅IP)完成的,不同系列分別對應(yīng)到不同的指令集(ARMv6-M~v8.1-M),而「-M」就是指將該版本指令集濃縮后專門提供給單芯片使用的。相關(guān)指令集對應(yīng)的IP如下所示。
ARMv6-M: Cortex M0(2009) / M0+(2012) /M1(2007)
ARMv7-M: Cortex M3(2004)
ARMv7E-M: Cortex M4(2010) / M7(2014)
ARMv8-M Baseline: Cortex M23(2016)
ARMv8-M Marnline: Cortex M33(2016) /M35P(2018)
ARMv8.1-M: Cortex M55(2020) / M85(2022) /M52(2023)
Fig. 1 Arm Cortex-M 系列指令集對照表。
2. Cortex-M指令如何加速計算
其中「v7-M」指令集就開始支持單頻率乘加指令MLA,即將原來需要二道指令MUL, ADD分別計算乘法和加法變成一道指令,如此就能將計算速度提升兩倍。到了「v7E-M」DSP擴展指令集時開始支持單指令多數(shù)據(jù)流(Single Instruction Multiple Data, SIMD),如QADD,QADD16, QADD8等,可將32bit分拆成2個16bit或4個8bit數(shù)據(jù)一起計算,如此就能增加2~4倍計算速度。
當(dāng)再搭配工作頻率從數(shù)十MHz提升到數(shù)百MHz后,對于語音喚醒詞(Key Word Spotting, KWS), 傳感器異常偵測(AnomalyDetection, AD), 運動手勢辨識(Motion / Gesture Dectection)等微型AI應(yīng)用大概都能完成,但若遇到有影像類應(yīng)用則遠遠不夠。
Arm Cortex-A系列為64bit CPU,所以其上有NEON(進階SIMD)指令集,可處理128bit或64bit的SIMD計算,讓計算速度更快,但這樣的指令在32bit的Cortex-M并沒有支持,所以Arm在v8.1M指令中加入Helium M型向量擴展指令(M-Profile Vector Extension, MVE)來提升Cortex-M單芯片的算力。
Helium可以處理128bit的向量運算(相當(dāng)于SIMD16x8bit, 8x16bit, 4x32bit),共有8個向量緩存器,可處理整數(shù)、定點數(shù)(Q7,Q15,Q31)及浮點數(shù)(半精度FP16/單精度FP32)計算,有超過150個新指令。
若為了處理128bit的向量計算就把數(shù)據(jù)總線(Data bus)及單芯片內(nèi)部靜態(tài)內(nèi)存(SRAM)都改成128bit寬是不合理的。最簡單的作法是利用四個頻率周期將128bit數(shù)據(jù)當(dāng)成4個32bit的數(shù)據(jù)來處理,但這樣就會變成和單指令周期32bit SIMD指令沒什么不同。因此Helium在向量計算時可以將加載(VLDR)和乘加(VMLA)計算進行重迭,一邊加載一邊計算,這樣就可以再加速一倍以上。如Fig. 2右下所示。
在Cortex-M55/M85采取雙節(jié)拍(Dual Beat)作法,就是1個頻率周期(Clock Cycle)讀取二個節(jié)拍(Beat),即2×32=64bit,所以128bit的向量要2個頻率周期才能處理完成,而1個頻率周期處理的內(nèi)容可以是下列組合。
2個32bit(Q31定點數(shù)或32位整數(shù)或32位浮點數(shù))
4個16bit(Q15定點數(shù)或16位整數(shù)或16位浮點數(shù))
8個8bit(Q7定點數(shù)或8位整數(shù))
而Cortex-M52則采單節(jié)拍(Single Beat)作法,可處理長度則減半為32bit(1x32bit, 2x16bit, 4x8bit),128bit的向量需要4個頻率周期才能處理完成。
Fig. 2 Arm Cortex-M指令與加速計算示意圖。
3. Helium指令集效能比較
目前有支持Helium指令的MCU共有四家公司,如下所示。
Cortex-M55:
ALIF – Ensemble E1(@160MHz), E3(@160MHz),E5(dual core,@160MHz, 400MHz), E7(dual core,@160MHz, 400MHz)
奇景(Himax) – WiseEye2 HX6538(dual Core, @150MHz, 400MHz)
新唐(Nuvoton) – NuMicro M55M1(@200MHz)
Cortex-M85:
瑞薩(Renesas) – RA8D1(@480MHz), RA8M1(@480MHz)
Cortex-M52:
None
以下就以Cortex-M7為基準(100%)和Cortex M55/M85/M52進行比較。如Fig. 3所示,橫軸為傳統(tǒng)性能(DMIPS/MHz),縱軸則為機器學(xué)習(xí)推論性能(ML Performance)。以M55為例,雖然傳統(tǒng)性能較M7低,但機器學(xué)習(xí)性能卻高出3倍,由此可看出Helium指令集提供的效能提升。
Fig. 3 Arm Cortex-M 指令與加速計算示意圖。
以上算力對于非影像的微型AI應(yīng)用大致能滿足,但若遇到影像類應(yīng)用則單靠CPU的SIMD及MVE指令集可能還是不夠。幸運地是以上提及的ALIF, Himax, Nuvoton的MCU都有內(nèi)建Arm Ethos U55 NPU,這樣就能將算力再推高數(shù)十倍,可以滿足低分辨率、低頻度的影像分類、對象偵測甚至姿態(tài)估測等應(yīng)用。
小結(jié)
隨著半導(dǎo)體技術(shù)的提升及配套的軟件開發(fā)工具逐漸到位,利用單芯片提高工作頻率及高度平行乘加運算(SIMD, MVE),開啟了可以不依靠網(wǎng)絡(luò)就能完成微型AI運算的契機,使得平價、低耗能的邊緣智能裝置(Edge AI & TinyML Device)有了更大的創(chuàng)意發(fā)揮空間,讓智慧生活、智能照護、智能制造、智能建筑等更多應(yīng)用能快速實現(xiàn)。
審核編輯:劉清
-
傳感器
+關(guān)注
關(guān)注
2552文章
51276瀏覽量
755068 -
加速器
+關(guān)注
關(guān)注
2文章
804瀏覽量
37962 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4776瀏覽量
100938 -
單芯片
+關(guān)注
關(guān)注
3文章
422瀏覽量
34600 -
NPU
+關(guān)注
關(guān)注
2文章
286瀏覽量
18673
原文標(biāo)題:誰說單芯片沒有神經(jīng)網(wǎng)絡(luò)加速器NPU就不能玩微型AI應(yīng)用?
文章出處:【微信號:易心Microbit編程,微信公眾號:易心Microbit編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論