全新CMSIS-NN神經(jīng)網(wǎng)絡(luò)內(nèi)核讓微控制器效率提升5倍
目前,在許多需要在本地進(jìn)行數(shù)據(jù)分析的“永遠(yuǎn)在線”的物聯(lián)網(wǎng)邊緣設(shè)備中,神經(jīng)網(wǎng)絡(luò)正在變得越來越普及,主要是因?yàn)榭梢杂行У赝瑫r(shí)減少數(shù)據(jù)傳輸導(dǎo)致的延時(shí)和功耗。 而談到針對(duì)物聯(lián)網(wǎng)邊緣設(shè)備上的神經(jīng)網(wǎng)絡(luò),我們自然會(huì)想到Arm Cortex-M系列處理器內(nèi)核,那么如果您想要強(qiáng)化它的性能并且減少內(nèi)存消耗,CMSIS-NN就是您最好的選擇?;贑MSIS-NN內(nèi)核的神經(jīng)網(wǎng)絡(luò)推理運(yùn)算,對(duì)于運(yùn)行時(shí)間/吞吐量將會(huì)有4.6X的提升,而對(duì)于能效將有4.9X的提升。
本文引用地址:http://m.butianyuan.cn/article/201801/375170.htmCMSIS-NN庫包含兩個(gè)部分: NNFunction和NNSupportFunctions。 NNFunction包含實(shí)現(xiàn)通常神經(jīng)網(wǎng)絡(luò)層類型的函數(shù),比如卷積(convolution),深度可分離卷積(depthwise separable convolution),全連接(即內(nèi)積inner-product), 池化(pooling)和激活(activation)這些函數(shù)被應(yīng)用程序代碼用來實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)推理應(yīng)用。 內(nèi)核API也保持簡(jiǎn)單,因此可以輕松地重定向到任何機(jī)器學(xué)習(xí)框架。NNSupport函數(shù)包括不同的實(shí)用函數(shù),如NNFunctions中使用的數(shù)據(jù)轉(zhuǎn)換和激活功能表。 這些實(shí)用函數(shù)也可以被應(yīng)用代碼用來構(gòu)造更復(fù)雜的NN模塊,例如, 長(zhǎng)期短時(shí)記憶(LSTM)或門控循環(huán)單元(GRU)。
對(duì)于某些內(nèi)核(例如全連接和卷積),會(huì)使用到不同版本的內(nèi)核函數(shù)。 我們提供了一個(gè)基本的版本,可以為任何圖層參數(shù)“按原樣”通用。 我們還部署了其他版本,包括進(jìn)一步的優(yōu)化技術(shù),但會(huì)對(duì)輸入進(jìn)行轉(zhuǎn)換或?qū)訁?shù)有一些限制。 理想情況下,可以使用簡(jiǎn)單的腳本來分析網(wǎng)絡(luò)拓?fù)洌⒆詣?dòng)確定要使用的相應(yīng)函數(shù)。
我們?cè)诰矸e神經(jīng)網(wǎng)絡(luò)(CNN)上測(cè)試了CMSIS-NN內(nèi)核,在CIFAR-10數(shù)據(jù)集上進(jìn)行訓(xùn)練,包括60,000個(gè)32x32彩色圖像,分為10個(gè)輸出類。 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)基于Caffe中提供的內(nèi)置示例,具有三個(gè)卷積層和一個(gè)完全連接層。 下表顯示了使用CMSIS-NN內(nèi)核的層參數(shù)和詳細(xì)運(yùn)行時(shí)結(jié)果。 測(cè)試在運(yùn)行頻率為216 MHz的ARM Cortex-M7內(nèi)核STMichelectronics NUCLEO-F746ZG mbed開發(fā)板上進(jìn)行。
整個(gè)圖像分類每張圖像大約需要99.1毫秒(相當(dāng)于每秒10.1張圖像)。 運(yùn)行此網(wǎng)絡(luò)的CPU的計(jì)算吞吐量約為每秒249 MOps。 預(yù)量化的網(wǎng)絡(luò)在CIFAR-10測(cè)試集上達(dá)到了80.3%的精度。 在ARM Cortex-M7內(nèi)核上運(yùn)行的8位量化網(wǎng)絡(luò)達(dá)到了79.9%的精度。 使用CMSIS-NN內(nèi)核的最大內(nèi)存占用空間為?133 KB,其中使用局部im2col來實(shí)現(xiàn)卷積以節(jié)省內(nèi)存,然后進(jìn)行矩陣乘法。 沒有使用局部im2col的內(nèi)存占用將是?332 KB,這樣的話神經(jīng)網(wǎng)絡(luò)將無法在板上運(yùn)行。
為了量化CMSIS-NN內(nèi)核相對(duì)于現(xiàn)有解決方案的好處,我們還使用一維卷積函數(shù)(來自CMSIS-DSP的arm_conv),類似Caffe的pooling和ReLU來實(shí)現(xiàn)了一個(gè)基準(zhǔn)版本。 對(duì)于CNN應(yīng)用,下表總結(jié)了基準(zhǔn)函數(shù)和CMSIS-NN內(nèi)核的比較結(jié)果。 CMSIS-NN內(nèi)核的運(yùn)行時(shí)間/吞吐量比基準(zhǔn)函數(shù)提高2.6至5.4倍。 能效提高也與吞吐量的提高相一致。
高效的NN內(nèi)核是充分發(fā)揮ARM Cortex-M CPU能力的關(guān)鍵。 CMSIS-NN提供了優(yōu)化的函數(shù)來加速關(guān)鍵的NN層,如卷積,池化和激活。 此外,非常關(guān)鍵的是CMSIS-NN還有助于減少對(duì)于內(nèi)存有限的微控制器而言至關(guān)重要的內(nèi)存占用。 更多細(xì)節(jié)在我們的白皮書中您可以讀到,您可以使用下面的按鈕從康奈爾大學(xué)圖書館網(wǎng)站下載。
CMSIS-NN內(nèi)核可在github.com/ARM-software/CMSIS_5上找到。 應(yīng)用 代碼可以直接使用這些內(nèi)核來實(shí)現(xiàn)Arm Cortex-M CPU上的神經(jīng)網(wǎng)絡(luò)算法。 或者,這些內(nèi)核可以被機(jī)器學(xué)習(xí)框架用作原語函數(shù)(primitives)來部署訓(xùn)練過的模型。
如需進(jìn)一步資源,更詳細(xì)的產(chǎn)品信息和教程,幫助您解決來自邊緣ML的挑戰(zhàn),請(qǐng)?jiān)L問我們的新機(jī)器學(xué)習(xí)開發(fā)者網(wǎng)站。
參考:CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs White Paper
評(píng)論