本發(fā)明屬于硬件加速設(shè)計、嵌入式設(shè)計及計算機視覺,涉及一種量化輕量級神經(jīng)網(wǎng)絡(luò)硬件加速器及其設(shè)計方法。
背景技術(shù):
1、深度神經(jīng)網(wǎng)絡(luò)已經(jīng)成為許多重要應(yīng)用的核心技術(shù),尤其在計算機視覺和語音處理領(lǐng)域。傳統(tǒng)模型在面對這些復(fù)雜任務(wù)時常常力不從心,而深度神經(jīng)網(wǎng)絡(luò)則展現(xiàn)了良好的建模能力。卷積神經(jīng)網(wǎng)絡(luò)是受到生物視覺感知機制啟發(fā)而發(fā)展而來的,特別適用于圖像識別、圖像分割等計算機視覺任務(wù)。近年來,眾多不同的cnn架構(gòu)被提出,旨在提升模型在計算效率和識別準(zhǔn)確性等方面的表現(xiàn)。然而,這些性能的提升往往伴隨著計算、存儲和帶寬負(fù)載的顯著增加。例如,resnet網(wǎng)絡(luò)在imagenet數(shù)據(jù)集上的top-1準(zhǔn)確率達(dá)到了82%,top-5準(zhǔn)確率達(dá)到了96.5%,但這一成就卻是以巨大的計算和內(nèi)存開銷為代價的。這使得該網(wǎng)絡(luò)只能在具備較強計算能力和充足存儲空間的系統(tǒng)中運行,難以在資源受限的小型移動設(shè)備上實現(xiàn)部署。為了解決這一問題,mobilenet等一系列高效輕量化卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)應(yīng)運而生,它們通過重新設(shè)計網(wǎng)絡(luò)結(jié)構(gòu)來降低計算負(fù)擔(dān)和模型參數(shù)大小,并取得了一定的成功。然而,盡管這些高效網(wǎng)絡(luò)在性能上有所優(yōu)化,許多邊緣設(shè)備仍面臨著存儲等方面的瓶頸,急需進一步的突破和改進。
2、隨著工業(yè)物聯(lián)網(wǎng)和互聯(lián)網(wǎng)的發(fā)展,在邊緣嵌入式設(shè)備中有實時運行高精度、低復(fù)雜度神經(jīng)網(wǎng)絡(luò)模型的需求。但受限于這些嵌入式設(shè)備的成本、面積、功耗等現(xiàn)實問題,其計算和存儲能力都十分有限,例如無法配備低功耗的廉價大容量片外存儲(例如dram)存儲卷積神經(jīng)網(wǎng)絡(luò)計算需要的參數(shù),也無法配備大量的乘法器加快卷積神經(jīng)網(wǎng)絡(luò)計算中的乘法累加運算,從而不能滿足絕大部分應(yīng)用的實時性要求。除此之外,神經(jīng)網(wǎng)絡(luò)不同運算單元計算模式不同,針對不同運算模式分別設(shè)計獨立的計算單元非常浪費資源。因此,如何在邊緣嵌入式設(shè)備上充分利用較小的高速存儲與較弱的運算能力以實現(xiàn)實時的神經(jīng)網(wǎng)絡(luò)應(yīng)用就變成了一個難題。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的在于針對目前神經(jīng)網(wǎng)絡(luò)平臺資源受限導(dǎo)致無法在低功耗、小面積的嵌入式邊緣設(shè)備上部署的技術(shù)缺陷,提出了一種量化輕量級神經(jīng)網(wǎng)絡(luò)硬件加速器及其設(shè)計方法。
2、為了達(dá)到上述目的,本發(fā)明采取如下技術(shù)方案:
3、作為本發(fā)明的第一方面,提出了一種量化輕量級神經(jīng)網(wǎng)絡(luò)硬件加速器,包括頂層控制模塊、存儲器控制模塊、可重構(gòu)存儲器、輸入數(shù)據(jù)預(yù)處理模塊、核心計算單元、后處理模塊,所述頂層控制模塊,負(fù)責(zé)整個硬件加速器的控制,將對應(yīng)單元或模塊的配置信息發(fā)送給輸入數(shù)據(jù)預(yù)處理模塊、核心計算單元以及后處理模塊,同時與存儲器控制模塊雙向傳輸配置及反饋信息;所述存儲器控制模塊控制可重構(gòu)存儲器將數(shù)據(jù)信息發(fā)送給頂層控制模塊、輸入數(shù)據(jù)預(yù)處理模塊以及后處理模塊;所述輸入數(shù)據(jù)預(yù)處理模塊,包括數(shù)據(jù)準(zhǔn)備子模塊以及權(quán)重準(zhǔn)備子模塊;所述核心計算單元,包含乘法器陣列、加法器樹陣列以及累加器陣列且接收數(shù)據(jù)預(yù)處理模塊的數(shù)據(jù)給數(shù)據(jù)準(zhǔn)備子模塊、權(quán)重準(zhǔn)備子模塊以及后處理模塊;所述數(shù)據(jù)準(zhǔn)備子模塊,包括第一子模塊和第二子模塊;所述第一子模塊,包括行緩存器和寄存器組,用于逐通道卷積和標(biāo)準(zhǔn)普通卷積的輸入數(shù)據(jù)準(zhǔn)備;所述第二子模塊,包括寄存器組,用于逐點卷積和全連接算子的輸入數(shù)據(jù)準(zhǔn)備;所述核心計算單元,包括乘法器陣列、加法器樹陣列以及累加器陣列;所述后處理模塊,包括量化子模塊、池化子模塊及跨層連接子模塊;所述跨層連接子模塊,包括地址生成子模塊。
4、所述存儲器控制模塊,包括輸入數(shù)據(jù)存儲器控制子模塊、權(quán)重存儲器控制子模塊以及量化存儲器控制子模塊;所述輸入數(shù)據(jù)存儲器控制子模塊包含第一存儲器及第二存儲器的讀寫控制邏輯;所述權(quán)重存儲器控制子模塊及量化存儲器控制子模塊分別包含第三存儲器以及第四存儲器的讀寫控制邏輯。
5、所述可重構(gòu)存儲器,包括相互獨立的第一存儲器、第二存儲器、第三存儲器和第四存儲器;所述第一存儲器和第二存儲器為輸入數(shù)據(jù)存儲器,所述第三存儲器和第四存儲器分別為權(quán)重參數(shù)存儲器和量化參數(shù)存儲器,分別存儲神經(jīng)網(wǎng)絡(luò)計算中需要的不同參數(shù);第一存儲器和第二存儲器的讀寫由輸入數(shù)據(jù)存儲器控制子模塊控制,該存儲器控制模塊能完成輸入數(shù)據(jù)重排和部分補零工作以適配核心計算單元的計算需求;所述第三存儲器和第四存儲器的讀寫分別由權(quán)重存儲器控制子模塊以及量化存儲器控制子模塊控制。
6、所述輸入數(shù)據(jù)預(yù)處理模塊包括數(shù)據(jù)準(zhǔn)備子模塊以及權(quán)重準(zhǔn)備子模塊;所述數(shù)據(jù)準(zhǔn)備子模塊與第一存儲器、第二存儲器以及核心計算單元內(nèi)部的乘法器陣列相連;所述權(quán)重準(zhǔn)備子模塊接收第三存儲器數(shù)據(jù)并處理后給核心計算單元內(nèi)部的乘法器陣列;所述乘法器陣列將接收的數(shù)據(jù)進行乘法處理后再依次經(jīng)過加法器樹陣列以及累加器陣列進行加法及累加操作。
7、所述后處理模塊的池化子模塊接收輸入數(shù)據(jù)預(yù)處理模塊內(nèi)部的數(shù)據(jù)準(zhǔn)備子模塊的輸出數(shù)據(jù)進行池化處理后,將池化處理后數(shù)據(jù)輸入量化子模塊。
8、所述累加器陣列、第四存儲器以及池化子模塊的輸出數(shù)據(jù)均送入量化子模塊進行量化處理,量化處理產(chǎn)生控制信息送入跨層連接子模塊進行跨層連接處理,將生成的地址返回存儲器控制模塊。
9、所述硬件加速器中各組成部件的功能如下:
10、頂層控制模塊接收外部輸入的控制信號啟動硬件加速器,同時決定當(dāng)前硬件加速器的狀態(tài),并根據(jù)當(dāng)前狀態(tài)通知輸入數(shù)據(jù)存儲器控制子模塊決定第一存儲器和第二存儲器的讀寫邏輯;通知權(quán)重存儲器控制子模塊按照計算需求讀出權(quán)重參數(shù);通知量化存儲器控制子模塊按照量化計算需求讀出量化參數(shù);通知數(shù)據(jù)準(zhǔn)備子模塊接收來自第一存儲器或者第二存儲器的輸出數(shù)據(jù)并根據(jù)計算需求進行數(shù)據(jù)的補零以及數(shù)據(jù)重排工作;通知權(quán)重準(zhǔn)備子模塊接收來自第三存儲器的輸出數(shù)據(jù)并根據(jù)計算需求準(zhǔn)備權(quán)重數(shù)據(jù);通知核心計算單元接收來自數(shù)據(jù)準(zhǔn)備子模塊以及權(quán)重準(zhǔn)備子模塊的輸出完成卷積計算;通知后處理模塊根據(jù)計算需求啟用池化子模塊、量化子模塊以及跨層連接子模塊。
11、輸入數(shù)據(jù)存儲器控制子模塊根據(jù)頂層控制模塊的配置信息將第一存儲器或者第二存儲器的輸出數(shù)據(jù)送至數(shù)據(jù)準(zhǔn)備子模塊;權(quán)重存儲器控制子模塊根據(jù)頂層控制模塊的配置信息將第三存儲器的輸出數(shù)據(jù)發(fā)送至權(quán)重準(zhǔn)備子模塊。
12、數(shù)據(jù)準(zhǔn)備子模塊根據(jù)頂層控制模塊的配置信息接收來自第一存儲器或者第二存儲器輸出的數(shù)據(jù),第一子模塊負(fù)責(zé)將數(shù)據(jù)轉(zhuǎn)換成逐通道卷積、標(biāo)準(zhǔn)普通卷積需要的數(shù)據(jù)格式,第二子模塊負(fù)責(zé)將數(shù)據(jù)轉(zhuǎn)換成逐點卷積、全連接計算需要的數(shù)據(jù)格式;權(quán)重準(zhǔn)備子模塊根據(jù)頂層控制模塊的配置信息接收來自第三存儲器輸出的數(shù)據(jù),根據(jù)當(dāng)前計算需求對權(quán)重數(shù)據(jù)進行補零和數(shù)據(jù)路由,并實現(xiàn)針對權(quán)重數(shù)據(jù)的乒乓緩存切換。
13、所述硬件加速器,使用與現(xiàn)有技術(shù)不同的存儲利用方式,具體為:
14、(1)通過存儲器控制模塊與第一、第二、第三以及第四存儲器相連,實現(xiàn)了數(shù)據(jù)的分期存儲;
15、(2)數(shù)據(jù)預(yù)處理模塊在受跨層連接模塊輸出數(shù)據(jù)與地址的輔助下,依托一種面向神經(jīng)網(wǎng)絡(luò)的高效補零和數(shù)據(jù)重排機制,實現(xiàn)了對計算特征圖的數(shù)據(jù)重排和補零;
16、核心計算單元根據(jù)頂層控制模塊的配置信息接收數(shù)據(jù)準(zhǔn)備子模塊以及權(quán)重準(zhǔn)備子模塊的輸出數(shù)據(jù),根據(jù)配置信息改變乘法器陣列、加法器樹陣列以及累加器陣列的組織形式完成三種卷積算子:標(biāo)準(zhǔn)普通卷積、逐通道卷積、逐點卷積以及全連接四種運算中的某一種計算。
17、所述硬件加速器解決了標(biāo)準(zhǔn)普通卷積、逐通道卷積以及逐點卷積輸入輸出大小不平衡導(dǎo)致的傳統(tǒng)設(shè)計下同大小的輸入輸出緩存在存儲數(shù)據(jù)時利用率低的問題,具體實施時:依托數(shù)據(jù)分期存儲以及數(shù)據(jù)預(yù)處理模塊實現(xiàn)了數(shù)據(jù)準(zhǔn)備。
18、后處理模塊根據(jù)頂層控制模塊的配置信息啟用池化子模塊、量化子模塊以及跨層連接子模塊,池化子模塊根據(jù)當(dāng)前計算是否為池化算子決定是否啟用,池化子模塊接收來自核心計算單元的輸出數(shù)據(jù)并完成池化計算;量化子模塊根據(jù)頂層控制模塊的配置信息接收來自核心計算單元或池化子模塊的輸出數(shù)據(jù)并完成量化計算;跨層連接子模塊根據(jù)頂層控制模塊的配置信息接收量化子模塊的輸出數(shù)據(jù)并進行數(shù)據(jù)重排列,將數(shù)據(jù)排列格式轉(zhuǎn)換成下一次計算需要的數(shù)據(jù)格式;地址生成子模塊與輸入數(shù)據(jù)存儲器控制子模塊相連,負(fù)責(zé)將計算結(jié)果寫回至第一存儲器或第二存儲器。
19、因此,所述硬件加速器使用的計算結(jié)構(gòu)實現(xiàn)了卷積計算的卷積算子和池化算子的硬件算子融合,降低了數(shù)據(jù)反復(fù)讀寫帶來的存儲延時以及訪問功耗;具體實施時,通過核心計算單元、池化子模塊的數(shù)據(jù)、地址及控制的交互實現(xiàn);
20、作為本發(fā)明的另一方面,提出了一種量化輕量級神經(jīng)網(wǎng)絡(luò)硬件加速器的設(shè)計方法,包括如下步驟:
21、s1、接收外部輸入的配置信息并據(jù)此計算量化參數(shù)及權(quán)重,輸出配置信息中包含的配置指令以及算出的權(quán)重和量化參數(shù);
22、s2、接收配置指令以及算出的權(quán)重和量化參數(shù),并根據(jù)配置指令將權(quán)重和量化參數(shù)發(fā)送至相應(yīng)的存儲位置;
23、s3、接收外部輸入的指令數(shù)據(jù)并將指令數(shù)據(jù)送入指令緩沖區(qū)中;
24、s4、將指令緩沖區(qū)中的指令數(shù)據(jù)進行譯碼,將得到的譯碼后指令再依據(jù)譯碼后指令進行存儲器控制、數(shù)據(jù)預(yù)處理、核心計算以及后處理;
25、s5、指令緩沖區(qū)根據(jù)配置信息發(fā)送下一條指令數(shù)據(jù),存入指令緩沖區(qū)中,再跳至s4執(zhí)行該指令數(shù)據(jù);
26、s6、重復(fù)s5,直至完成最后一條指令的計算后,將輸入數(shù)據(jù)存儲器的數(shù)據(jù)返回給外部存儲。
27、s4所述存儲器控制,具體為:依據(jù)接收到的指令信息控制輸入數(shù)據(jù)存儲器、權(quán)重參數(shù)存儲器和量化參數(shù)存儲器的讀數(shù)地址以及讀數(shù)邏輯;所述數(shù)據(jù)預(yù)處理,具體依據(jù)接收到的指令信息對輸入數(shù)據(jù)進行數(shù)據(jù)重排和補零;所述后處理,包括池化、量化及跨層連接;所述池化,具體為:依據(jù)接收到的指令決定是否需要啟用池化;若當(dāng)前指令表明需要啟用池化,則計算池化算子;否則若當(dāng)前指令不需要啟用池化,則不啟用池化,將輸入數(shù)據(jù)作為輸出數(shù)據(jù)進行量化;所述量化,具體為:依據(jù)接收到的指令對自核心計算單元的輸出依據(jù)量化參數(shù)存儲器輸出的量化參數(shù)進行量化計算,得到量化后數(shù)據(jù);所述跨層連接,具體為:依據(jù)接收到的指令對量化后數(shù)據(jù)進行跨層連接操作,產(chǎn)生輸入數(shù)據(jù)存儲器的寫入地址。
28、所述核心計算,具體為:接收并行輸入數(shù)據(jù)和權(quán)重參數(shù)補零數(shù)據(jù)并根據(jù)將接收到的指令排布成不同的形式從而完成不同類型計算;所述并行輸入數(shù)據(jù)為并行輸入的數(shù)據(jù)存儲器接收的數(shù)據(jù)按照外部輸入的指令數(shù)據(jù)進行數(shù)據(jù)重新排布以及補零后的數(shù)據(jù);所述權(quán)重參數(shù)補零數(shù)據(jù)為將權(quán)重參數(shù)存儲器的數(shù)據(jù)補零后輸出的數(shù)據(jù)。
29、所述不同類型計算,通過乘法器陣列、加法器樹陣列以及累加器陣列實現(xiàn),具體由接收到的指令決定,依據(jù)接收到的指令信息進行標(biāo)準(zhǔn)普通卷積、逐通道卷積、逐點卷積或全連接計算。具體實施時:所述方法,依據(jù)不同的卷積算子在不同維度展開做并行計算,與常規(guī)的循環(huán)展開方法相比,具有更高的計算性能、硬件資源利用率以及數(shù)據(jù)重用率。
30、有益效果
31、本發(fā)明提出的一種量化輕量級神經(jīng)網(wǎng)絡(luò)的硬件加速器及其設(shè)計方法,相對于現(xiàn)有神經(jīng)網(wǎng)絡(luò)加速方法,具有以下有益效果:
32、1.所述硬件加速器使用的存儲利用方式解決了標(biāo)準(zhǔn)普通卷積、逐通道卷積以及逐點卷積輸入輸出大小不平衡導(dǎo)致的傳統(tǒng)設(shè)計下同大小的輸入輸出緩存在存儲數(shù)據(jù)時利用率低的問題;
33、2.所述硬件加速器采用一種面向神經(jīng)網(wǎng)絡(luò)的高效補零和數(shù)據(jù)重排機制,借助輸入數(shù)據(jù)預(yù)處理模塊以及跨層連接模塊,實現(xiàn)了對計算特征圖的數(shù)據(jù)重排和補零;
34、3.所述硬件加速器使用的計算結(jié)構(gòu)實現(xiàn)了卷積計算的卷積算子和池化算子的硬件算子融合,降低了數(shù)據(jù)反復(fù)讀寫帶來的存儲延時以及訪問功耗;
35、4.所述方法在提出了不同算子在不同維度展開做并行計算,與常規(guī)的循環(huán)展開方法相比,具有更高的計算性能、硬件資源利用率以及數(shù)據(jù)重用率。