首發(fā):GiantPandaCV
作者:ybai62868
【GiantPandaCV導(dǎo)語(yǔ)】
這篇文章為大家介紹了一下面向低功耗AI芯片上的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì),隨著這幾年神經(jīng)網(wǎng)絡(luò)和硬件(CPU,GPU,FPGA,ASIC)的迅猛發(fā)展,深度學(xué)習(xí)在包括互聯(lián)網(wǎng),自動(dòng)駕駛,金融,安防等很多行業(yè)都得到了廣泛的應(yīng)用。然而當(dāng)我們真正在實(shí)際部署深度學(xué)習(xí)應(yīng)用的時(shí)候,許多場(chǎng)景例如無(wú)人駕駛對(duì)設(shè)備在功耗,成本,散熱性等方面都有額外的限制,導(dǎo)致了無(wú)法大規(guī)模應(yīng)用深度學(xué)習(xí)解決方案。感興趣的同學(xué)可以了解一下有關(guān)如何面向AI芯片來(lái)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)。
一、目前算法和硬件co-design的一個(gè)大背景
從硬件方面來(lái)看,我們都知道,深度神經(jīng)網(wǎng)絡(luò)中的計(jì)算都是大量的稠密型運(yùn)算。那么,當(dāng)前的硬件發(fā)展其實(shí)已經(jīng)很難滿足這些稠密型的運(yùn)算需求了。那么,設(shè)計(jì)低功耗,低成本,高性能的硬件計(jì)算部署平臺(tái)就成為了當(dāng)務(wù)之急。
對(duì)于算法來(lái)說(shuō),其實(shí)在某些公開的數(shù)據(jù)集上,已經(jīng)有很多非常不錯(cuò)的算法了,但是這些算法僅僅是針對(duì)特定數(shù)據(jù)集(瘋狂刷點(diǎn)...)而在真實(shí)的業(yè)務(wù)場(chǎng)景下,這些算法有時(shí)候就并不一定能表現(xiàn)的非常出色。這個(gè)時(shí)候,我們就要去設(shè)計(jì)那些不僅是針對(duì)一些public數(shù)據(jù)集能夠表現(xiàn)的比較comparable的,同時(shí)在一些特定的業(yè)務(wù)場(chǎng)景下,也要能夠表現(xiàn)令人滿意的算法。
二、當(dāng)前AI芯片的發(fā)展?fàn)顩r
總的來(lái)說(shuō),目前的硬件家族可以被分為兩個(gè)大類。
一大類是以通用需求為主的:CPU, GPU
另一大類以特殊用途為主的:FPGA, ASIC
先有一個(gè)大體的宏觀概念。然后在看看看算法和這些硬件是怎么結(jié)合的。
早期的代碼都是跑在CPU上的,比如說(shuō),我們知道的LeNet,那會(huì)GPU并不像現(xiàn)在這么盛行。直到ImageNet的冠軍Alex把網(wǎng)絡(luò)跑到了GPU上。這個(gè)時(shí)候,大家都開始使用GPU作為自己的訓(xùn)練平臺(tái)。其實(shí),CPU并不能非常高效的去運(yùn)行我們需要的神經(jīng)網(wǎng)絡(luò)。因?yàn)镃PU的運(yùn)行方式是以串行為主,并且CPU上有很多操作都是為了優(yōu)化多級(jí)緩存,更加偏向的是對(duì)于數(shù)據(jù)IO處理的的能力。而這些方面的設(shè)計(jì)對(duì)于神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)都是多余的。
那么,什么樣的硬件結(jié)構(gòu)設(shè)計(jì)才能更加滿足神經(jīng)網(wǎng)絡(luò)的特性呢?
其實(shí),這個(gè)問(wèn)題上,超哥講的很好。究竟什么樣的硬件結(jié)構(gòu)更加適合神經(jīng)網(wǎng)絡(luò),還得從神經(jīng)網(wǎng)絡(luò)自身的特性來(lái)分析。
就拿我們熟悉的全連接層來(lái)講,比如說(shuō),現(xiàn)在第i層的神經(jīng)元和第i+1層的神經(jīng)元之間是以全連接的方式溝通的,那么溝通每個(gè)神經(jīng)元的運(yùn)算實(shí)際上是非常簡(jiǎn)單的乘法和加法。那么在網(wǎng)絡(luò)進(jìn)行一次前向運(yùn)算的過(guò)程中,硬件上能夠支持乘法和加法的運(yùn)算單元越多,那么此時(shí)就能夠承載下更深的網(wǎng)絡(luò)。
對(duì)于同一層上的不同神經(jīng)元來(lái)說(shuō),我們需要他們能夠相互獨(dú)立的完成各自的運(yùn)算,從這點(diǎn)來(lái)看,神經(jīng)網(wǎng)絡(luò)具有大規(guī)模的并行性。
不論是在網(wǎng)絡(luò)進(jìn)行前向計(jì)算還是反向計(jì)算的過(guò)程中,都會(huì)產(chǎn)生很多的中間計(jì)算結(jié)果。而這些中間結(jié)果并不是每個(gè)都會(huì)被復(fù)用,要能放下在網(wǎng)絡(luò)運(yùn)算過(guò)程中產(chǎn)生的中間結(jié)果,就需要我們的硬件有足夠的帶寬。對(duì)于一個(gè)理想的設(shè)備來(lái)說(shuō),它應(yīng)該有比較大的片上存儲(chǔ),并且?guī)捯惨銐颉_@個(gè)時(shí)候,對(duì)于屬于的圖片信息(以視覺任務(wù)為主)和網(wǎng)絡(luò)的權(quán)重才能有足夠的空間來(lái)做存儲(chǔ)。就是說(shuō)要它充分的利用片上資源,減少片外的訪存。
其實(shí),在我們對(duì)一個(gè)網(wǎng)絡(luò)進(jìn)行train和inference的過(guò)程中,網(wǎng)絡(luò)本身對(duì)于計(jì)算精度并沒(méi)有我們想象的那么敏感。那么,為了能夠存下更多的權(quán)重(deep的網(wǎng)絡(luò)),我們可以使用那些比較簡(jiǎn)單的數(shù)據(jù)類型,比如說(shuō),int8,fp16。因此,這些年來(lái),大家對(duì)于CPU+(GPU, FPGA, TPU, ASIC)這些硬件所組成的異構(gòu)計(jì)算平臺(tái)。
第一種組合:CPU+GPU
其實(shí),在我們平時(shí)做實(shí)驗(yàn),訓(xùn)練模型的過(guò)程中,用的最多的就是CPU+GPU這樣的組合。
借助現(xiàn)有的非常成熟的深度學(xué)習(xí)框架(mxnet,pytorch,tensorflow等),我們就能非常方便和容易的完成開發(fā)。
優(yōu)點(diǎn):編程容易,運(yùn)算力和吞吐量大。
缺點(diǎn):GPU的功耗高,延遲大,部署實(shí)際的AI產(chǎn)品,沒(méi)人會(huì)用服務(wù)器級(jí)別的GPU。
第二種組合:CPU+FPGA
這種組合方式的功耗相比CPU+GPU就要低很多。但是,對(duì)于FPGA的開發(fā)難度則會(huì)大很多。
優(yōu)點(diǎn):功耗低,方便落地
缺點(diǎn):編程開發(fā)難度大,需要學(xué)習(xí)專用的硬件語(yǔ)言來(lái)支持相應(yīng)的設(shè)備
第三種組合:CPU+ASIC
ASIC指的的是按照產(chǎn)品需求不同而定制化的特殊規(guī)格集成電路,由特定使用者要求和特定電子系統(tǒng)的需要而設(shè)計(jì),制造。也就是說(shuō),ASIC在特定功能上進(jìn)行了專項(xiàng)強(qiáng)化,可以根據(jù)需要進(jìn)行復(fù)雜的設(shè)計(jì),從而實(shí)現(xiàn)更高的處理速度和更低的功耗。那么,ASIC的生產(chǎn)成本就會(huì)更高!
那么其實(shí),可以對(duì)上面講的這些硬件進(jìn)行一個(gè)歸類,CPU,GPU叫做通用性芯片。ASIC叫做定制化芯片,而FPGA叫做半定制化芯片。
Google的TPU就是采用了定制化芯片的設(shè)計(jì)。
其中TPUv1采用了大量的乘法單元,有256x256個(gè)8位乘法器。片上有28MB的緩存,能夠存儲(chǔ)網(wǎng)絡(luò)的參數(shù)和輸入。同時(shí),TPU上的數(shù)據(jù)和指令
說(shuō)白了,就是將訓(xùn)練好的model拿來(lái)定點(diǎn)化做inference。
TPUv2支持了train的功能,并且也能夠使用fp進(jìn)行訓(xùn)練。
講了這三種組合,其實(shí)如果就拿inference來(lái)說(shuō),F(xiàn)PGA才是合適的硬件。
各種硬件用于前向推理的優(yōu)缺點(diǎn)
現(xiàn)在來(lái)看,要想設(shè)計(jì)一款適合深度神經(jīng)網(wǎng)絡(luò)的芯片,我們需要其具備什么特性呢?
支持主流的視覺任務(wù)(inference),不僅僅要支持int8,還要支持fp。
high performance,low engergy,low cost
方便開發(fā)和支持主流的DL框架
這里要提的就是地平線自己設(shè)計(jì)的BPU,它也屬于ASIC的范疇。并且支持主流的CV任務(wù)。
BPU最大的特點(diǎn)就是設(shè)計(jì)了彈性的Tensor Core,它能夠?qū)⒛切?duì)于image來(lái)說(shuō)所需要的op硬件化,這些op包括CNN中常見的(卷積,池化等),從而非常高效的去執(zhí)行這些操作。中間通過(guò)一個(gè)叫做數(shù)據(jù)路由橋(Data Routing Bridge)的結(jié)構(gòu)從片上來(lái)讀取數(shù)據(jù),負(fù)責(zé)數(shù)據(jù)的傳輸和調(diào)度。同時(shí),整個(gè)數(shù)據(jù)存儲(chǔ)資源和計(jì)算資源都可以通過(guò)編輯器輸出的指令來(lái)執(zhí)行調(diào)度,從而方便實(shí)現(xiàn)各種算法,各種model的結(jié)構(gòu),和各種不同的任務(wù)。
三,如何從算法層面設(shè)計(jì)高效的神經(jīng)網(wǎng)絡(luò)
從AI的解決方案來(lái)看存在兩種方式:
云端 AI
前端 AI
云端 AI 說(shuō)的就是把我們的計(jì)算放在遠(yuǎn)程服務(wù)器上去執(zhí)行,然后把最終的計(jì)算結(jié)果傳回本地,這就要求我們的設(shè)備時(shí)時(shí)刻刻聯(lián)網(wǎng),并且存在很大的安全問(wèn)題和計(jì)算傳輸延遲問(wèn)題,也就是我們通常所說(shuō)的通信代價(jià)。
前端 AI 說(shuō)的就是設(shè)備本身就能進(jìn)行運(yùn)算,不需要聯(lián)網(wǎng)。那么在安全性,實(shí)時(shí)性,適用性方面都要?jiǎng)龠^(guò)云端 AI 。但是,他們?cè)诠?,?jì)算,內(nèi)存存儲(chǔ)等方面有很多受限。
其實(shí)關(guān)于AI 產(chǎn)品落地,還是回到上面硬件部分講過(guò)的內(nèi)容,如何去尋求一套 低功耗,高性能,低成本的解決方案。
這里拿IPC和TX2進(jìn)行比較來(lái)說(shuō)明這個(gè)問(wèn)題。
IPC通過(guò)網(wǎng)線來(lái)供電,功耗非常低,只有12.5w,TX2的功耗是10-15w。TX2雖然在算力和計(jì)算成本方面都要?jiǎng)龠^(guò)IPC,但是TX2的價(jià)位對(duì)于嵌入式的方案是不能接受的。。。
那么,要想做好前端AI方案(針對(duì)embedd AI)設(shè)備來(lái)說(shuō),我們就要在給定功耗(12.5w)和算力(IPC最大能力)的情況下,去優(yōu)化我們的算法和神經(jīng)網(wǎng)絡(luò)模型,來(lái)達(dá)到符合場(chǎng)景落地的需要。
那么,說(shuō)白了,我們最終加速網(wǎng)絡(luò)的目的就是,在網(wǎng)絡(luò)保持不錯(cuò)性能的的前提下,盡量去降低計(jì)算代價(jià)和帶寬的需求。
關(guān)于網(wǎng)絡(luò)加速方面看songhan的,補(bǔ)。我在cs231n上學(xué)到的東西。
網(wǎng)絡(luò)量化,網(wǎng)絡(luò)剪枝,參數(shù)共享,蒸餾以及模型結(jié)構(gòu)優(yōu)化。
在工業(yè)界,用的最多的就是網(wǎng)絡(luò)量化和模型結(jié)構(gòu)化的方法。
下面重點(diǎn)來(lái)講講這些方法:
3.1 量化
量化其實(shí)說(shuō)的就是離散化。將我們?cè)冗B續(xù)變化的量通過(guò)近似從而達(dá)到離散的目的。
神經(jīng)網(wǎng)絡(luò)的量化,值得就是將原先用浮點(diǎn)數(shù)表示的情況改成用更低的bit,從而繼續(xù)完成原先浮點(diǎn)數(shù)能夠完成的訓(xùn)練和測(cè)試。
前面再將神經(jīng)網(wǎng)絡(luò)特性的時(shí)候,我們也提到了網(wǎng)絡(luò)本身對(duì)于計(jì)算精度并沒(méi)有我們想象的那么敏感。所以,比較常用的方法,就是用fp16代替fp32來(lái)做train和inference。
其實(shí),使用fp16去訓(xùn)練,有時(shí)候還能得到比f(wàn)p32更好的精度。從ML的角度來(lái)看,量化網(wǎng)絡(luò)本身就是對(duì)數(shù)據(jù)集正則化的一種方式,可以增強(qiáng)模型的泛化能力,從而提高精度。
其實(shí)還可以進(jìn)一步的用int8來(lái)取代fp16,這樣操作后,帶寬只有fp32的四分之一。
當(dāng)然,如果你不擔(dān)心精度的損失,那么也可以使用4bit, 2bit, 1bit去代替int8。
神經(jīng)網(wǎng)絡(luò)的量化其實(shí)可以分為:網(wǎng)絡(luò)權(quán)重的量化和網(wǎng)絡(luò)特征的量化。
網(wǎng)絡(luò)權(quán)重的量化對(duì)于最終的結(jié)果輸出損失比較小,而特征量化對(duì)最終的結(jié)果輸出損失就比較大。大模型和小模型對(duì)量化的敏感程度也不一樣,一般小模型會(huì)更加敏感。
關(guān)于量化想更深入的了解可以看一下下面的這些講解:
深度學(xué)習(xí)量化技術(shù)科普
Pytorch實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練量化(QAT)
MXNet實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練量化
深入了解NNIE量化技術(shù)
ICCV2019 高通Data-Free Quantization論文解讀
EasyQuant 后量化算法論文解讀
3.2 模型剪枝和參數(shù)共享
可以參考下面的講解:
如何讓你的YOLOV3模型更小更快?
YOLOV3剪枝方法匯總
深度學(xué)習(xí)算法優(yōu)化系列八 | VGG,ResNet,DenseNe模型剪枝代碼實(shí)戰(zhàn)
3.3 知識(shí)蒸餾
蒸餾的思想非常簡(jiǎn)單,其實(shí)就是用一個(gè)小模型來(lái)取代一個(gè)大模型,從而使得小模型能夠?qū)崿F(xiàn)大模型的效果。大模型在這里一般叫做Teacher Net, 小模型叫做Student Net。從小模型到大模型的學(xué)習(xí)目標(biāo),包括最終的輸出層,網(wǎng)絡(luò)中間的特征結(jié)果,以及網(wǎng)絡(luò)的連接方案。
其實(shí),知識(shí)蒸餾本質(zhì)是一種transfer learning,比直接用小數(shù)據(jù)從頭開始訓(xùn)練一個(gè)model要得到更好的效果。
3.4 低秩近似
可以參考:https://blog.csdn.net/kathrynlala/article/details/82943291
3.5 二值化/三值化網(wǎng)絡(luò)
可以參考下面的講解:
基于Pytorch構(gòu)建一個(gè)可訓(xùn)練的BNN
基于Pytorch構(gòu)建三值化網(wǎng)絡(luò)TWN
低比特量化之XNOR-Net
低比特量化之DoreFa-Net理論與實(shí)踐
3.6 Winograd 變化
可以參考下面的講解:
詳解Winograd變換矩陣生成原理
詳解卷積中的Winograd加速算法
3.7 模型結(jié)構(gòu)化
模型結(jié)構(gòu)化其實(shí)是對(duì)模型加速最有效的一種方式。
那么關(guān)于模型結(jié)構(gòu)優(yōu)化,又會(huì)涉及到很多的知識(shí)。
接下來(lái),就要講講怎么去設(shè)計(jì)一個(gè)高效的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它需要遵循一些基本原則。
從最初的AlexNet到現(xiàn)在的MobileNetv2,網(wǎng)絡(luò)的參數(shù)從最初的240MB降低到了35MB,
準(zhǔn)確率從57%也提高了75%。那么,我們肯定是去設(shè)計(jì)小的模型結(jié)構(gòu)從而完成相對(duì)于大模型難以完成的任務(wù)。那么在這個(gè)設(shè)計(jì)的過(guò)程中,會(huì)涉及哪些基本原則呢?
關(guān)于這些,超哥也講的非常到位,我也總結(jié)下:
小模型其實(shí)并不一定比大模型運(yùn)行(inference)的快。
一個(gè)網(wǎng)絡(luò)計(jì)算量小,并不代表他就一定運(yùn)行的快,因?yàn)檫\(yùn)行速度還和帶寬有關(guān),計(jì)算量?jī)H僅是其中的一個(gè)因素。
那么,結(jié)合上面兩點(diǎn),我們就能明白。一個(gè)好的,跑起來(lái)比較快的網(wǎng)絡(luò)結(jié)構(gòu)。必須要衡量計(jì)算量和帶寬的需求。
4. 總結(jié)
總結(jié)下,如果要設(shè)計(jì)高效的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來(lái)部署到硬件平臺(tái)。那么我們應(yīng)該盡可能的讓網(wǎng)絡(luò)中的operator去做并行化計(jì)算,同時(shí)減少這些operator對(duì)于帶寬的需求。
審核編輯 黃昊宇
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4840瀏覽量
108119 -
人工智能
+關(guān)注
關(guān)注
1819文章
50284瀏覽量
266784 -
AI芯片
+關(guān)注
關(guān)注
17文章
2161瀏覽量
36858
發(fā)布評(píng)論請(qǐng)先 登錄
探索MAX78002:低功耗卷積神經(jīng)網(wǎng)絡(luò)加速器的AI微控制器
為什么 VisionFive V1 板上的 JH7100 中并存 NVDLA 引擎和神經(jīng)網(wǎng)絡(luò)引擎?
神經(jīng)網(wǎng)絡(luò)的初步認(rèn)識(shí)
NMSIS神經(jīng)網(wǎng)絡(luò)庫(kù)使用介紹
在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)
液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)
【「AI芯片:科技探索與AGI愿景」閱讀體驗(yàn)】+神經(jīng)形態(tài)計(jì)算、類腦芯片
【「AI芯片:科技探索與AGI愿景」閱讀體驗(yàn)】+化學(xué)或生物方法實(shí)現(xiàn)AI
【「AI芯片:科技探索與AGI愿景」閱讀體驗(yàn)】+AI的未來(lái):提升算力還是智力
【「AI芯片:科技探索與AGI愿景」閱讀體驗(yàn)】+第二章 實(shí)現(xiàn)深度學(xué)習(xí)AI芯片的創(chuàng)新方法與架構(gòu)
【「AI芯片:科技探索與AGI愿景」閱讀體驗(yàn)】+AI芯片的需求和挑戰(zhàn)
【書籍評(píng)測(cè)活動(dòng)NO.64】AI芯片,從過(guò)去走向未來(lái):《AI芯片:科技探索與AGI愿景》
Nordic收購(gòu) Neuton.AI 關(guān)于產(chǎn)品技術(shù)的分析
MAX78000采用超低功耗卷積神經(jīng)網(wǎng)絡(luò)加速度計(jì)的人工智能微控制器技術(shù)手冊(cè)
MAX78002帶有低功耗卷積神經(jīng)網(wǎng)絡(luò)加速器的人工智能微控制器技術(shù)手冊(cè)
面向低功耗AI芯片上的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)介紹
評(píng)論