本發(fā)明涉及神經(jīng)網(wǎng)絡(luò)加速器,更具體的說是涉及基于動態(tài)特征權(quán)重雙索引與算力分配的稀疏卷積加速方法。
背景技術(shù):
1、目前,為提升卷積神經(jīng)網(wǎng)絡(luò)cnn應(yīng)對復(fù)雜任務(wù)時的特征提取能力,cnn模型的結(jié)構(gòu)復(fù)雜性和參數(shù)量急劇增加,對模型運行的計算與存儲需求亦隨之攀升,給硬件實現(xiàn)帶來了嚴(yán)峻挑戰(zhàn)。
2、為降低模型復(fù)雜度和運算量,業(yè)界引入了剪枝技術(shù),通過減少冗余連接降低復(fù)雜度,同時保持模型精度;然而,剪枝雖能降低網(wǎng)絡(luò)密度,卻也引入了稀疏性問題,導(dǎo)致大量零值計算,進(jìn)而影響計算效率;此外,cnn中的激活函數(shù)可能加劇數(shù)據(jù)的稀疏分布,進(jìn)一步阻礙計算效率的提升,在卷積的乘累加過程中,這些零值乘法計算并未對結(jié)果產(chǎn)生影響,因此可以被視為無效計算,通常將包含大量零值計算的卷積神經(jīng)網(wǎng)絡(luò)稱為稀疏卷積神經(jīng)網(wǎng)絡(luò),近年來,針對稀疏卷積神經(jīng)網(wǎng)絡(luò)的加速技術(shù)已經(jīng)成為研究的熱點之一。
3、專利cn116911357a提出了一種基于csr編碼的卷積計算加速器及加速方法,在該發(fā)明中在卷積計算開始前,需要對分塊后的特征圖進(jìn)行索引計算操作,增加額外的計算時間,而且需要記錄分塊后的特征圖的稀疏位置,也會帶來較高的存儲開銷;此外該發(fā)明僅對特征圖零值進(jìn)行索引,沒有考慮到權(quán)重的零值問題;使用乘法脈動計算陣列也會計算含零值的乘法,未能使乘法器僅運算非零值乘法,造成大量無效運算。
4、專利cn113705794b提出了一種基于動態(tài)激活位稀疏的神經(jīng)網(wǎng)絡(luò)加速器設(shè)計方法,在該發(fā)明中雖然實現(xiàn)了動態(tài)標(biāo)記激活,減少了索引計算時間,但僅對激活數(shù)據(jù)的零值進(jìn)行了動態(tài)的實時監(jiān)測標(biāo)記,沒有充分考慮到權(quán)重零值的標(biāo)記,使乘法器仍有部分做無效運算。
5、專利cn118569329a提出了一種混合粒度稀疏神經(jīng)網(wǎng)絡(luò)訓(xùn)練加速器及計算加速方法,該發(fā)明在計算時可以實時計算索引,但需要同時存儲輸入數(shù)據(jù)和權(quán)重數(shù)據(jù)的行位圖和元素位圖,索引方式復(fù)雜,占用內(nèi)存大,且在計算中還需要進(jìn)一步判斷非零值位置,造成了存儲和計算開銷。
6、盡管這些研究在加速稀疏卷積計算中取得了一定進(jìn)展,但是仍存在兩方面的問題;一是非零索引計算時間長,索引內(nèi)存占用過高;二是仍包含許多零值計算,導(dǎo)致部分乘法單元(multiplicationunit,mu)利用不充分。
7、因此,如何解決現(xiàn)有稀疏神經(jīng)網(wǎng)絡(luò)模型的卷積計算存在的索引時間長、乘法單元利用率不足的問題是本領(lǐng)域技術(shù)人員亟需解決的問題。
技術(shù)實現(xiàn)思路
1、有鑒于此,本發(fā)明提供了一種基于動態(tài)特征權(quán)重雙索引與算力分配的稀疏卷積加速方法以解決背景技術(shù)中提到的技術(shù)問題。
2、為了實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
3、一種基于動態(tài)特征權(quán)重雙索引與算力分配的稀疏卷積加速方法,包括行數(shù)據(jù)復(fù)用模塊、動態(tài)非零值索引模塊、算力動態(tài)分配模塊和乘累加模塊;
4、具體包括以下步驟:
5、s1.依次將各個輸入通道的特征圖數(shù)據(jù)逐行輸入數(shù)據(jù)復(fù)用模塊的緩沖器fifo,經(jīng)各fifo緩存后逐步輸出的k-1行特征圖數(shù)據(jù);
6、s2.動態(tài)非零值索引模塊獲取各個輸入通道特征圖的1行數(shù)據(jù)和經(jīng)各fifo緩存后逐步輸出的k-1行特征圖數(shù)據(jù)以及各個通道的權(quán)重數(shù)據(jù),完成拼接和索引計算后輸出動態(tài)非零值索引至算力動態(tài)分配模塊;
7、s3.算力動態(tài)分配模塊按照動態(tài)非零值索引模塊輸出的動態(tài)非零值索引,對數(shù)據(jù)拼接模塊存儲的拼接數(shù)據(jù)中的非零數(shù)據(jù)對進(jìn)行分配,分配結(jié)果輸出給乘累加模塊;
8、s4.乘累加模塊對算力動態(tài)分配模塊的輸出進(jìn)行乘累加,根據(jù)通道數(shù)、卷積核尺寸和稀疏度調(diào)整乘法單元的數(shù)量以達(dá)到乘法單元的最優(yōu)利用率。
9、優(yōu)選的,緩沖器fifo的個數(shù)為卷積核的階數(shù)k減去1,每個輸入通道的特征圖均表示為一個輸入特征圖矩陣,每個fifo的深度均設(shè)置為輸入特征圖矩陣的列數(shù)。
10、優(yōu)選的,動態(tài)非零值索引模塊包括數(shù)據(jù)拼接模塊和索引計算模塊;
11、數(shù)據(jù)拼接模塊,將各個輸入通道特征圖1行數(shù)據(jù)和經(jīng)各fifo緩存后逐步輸出的k-1行特征圖數(shù)據(jù),存儲至寄存器a中,同時將各個通道的權(quán)重數(shù)據(jù),存儲至寄存器b中,寄存器a的數(shù)據(jù)為卷積核對應(yīng)的特征圖局部區(qū)域數(shù)據(jù);寄存器b中的數(shù)據(jù)為卷積核數(shù)據(jù);將各個通道的卷積核數(shù)據(jù)和對應(yīng)的各通道對應(yīng)的特征圖局部區(qū)域數(shù)據(jù)分別進(jìn)行拼接;
12、索引計算模塊,對數(shù)據(jù)拼接模塊里的寄存器a和寄存器b的輸入特征圖數(shù)據(jù)和權(quán)重數(shù)據(jù)中的非零值進(jìn)行mask索引,再進(jìn)行位置計算得到動態(tài)非零值索引。
13、優(yōu)選的,將各個通道的卷積核數(shù)據(jù)和對應(yīng)的各通道對應(yīng)的特征圖局部區(qū)域數(shù)據(jù)分別進(jìn)行拼接的內(nèi)容為:
14、將c個通道的展平向量依次拼接,第1個卷積核第1行數(shù)據(jù)拼接第2個卷積核第1行數(shù)據(jù),第2個卷積核第1行數(shù)據(jù)拼接第3個卷積核第1行數(shù)據(jù),直至拼接到第c個卷積核第1行數(shù)據(jù);
15、第1個卷積核第2行數(shù)據(jù)拼接第2個卷積核第2行數(shù)據(jù),第2個卷積核第2行數(shù)據(jù)拼接第3個卷積核第2行數(shù)據(jù),直至拼接到第k個卷積核第2行數(shù)據(jù);
16、直到第1個卷積核第k行數(shù)據(jù)拼接第2個卷積核第2行數(shù)據(jù),第2個卷積核第k行數(shù)據(jù)拼接第3個卷積核第k行數(shù)據(jù),直至拼接到第c個卷積核第k行數(shù)據(jù),得到一個大小為k×kc的二維矩陣;
17、權(quán)重數(shù)據(jù)以一維數(shù)組的形式存儲在寄存器中,把k×kc的二維矩陣第1行存到數(shù)組第0-(kc-1)位,第2行存到數(shù)組第kc-2kc位,直到第k行存到數(shù)組第(k-1)kc-(kkc-1)位;
18、對應(yīng)的各通道對應(yīng)的的特征圖局部區(qū)域數(shù)據(jù)同理進(jìn)行拼接。
19、優(yōu)選的,索引計算模塊獲得動態(tài)非零值索引的具體內(nèi)容為:
20、使用mask索引對輸入特征圖數(shù)據(jù)和權(quán)重數(shù)據(jù)的內(nèi)積操作乘法進(jìn)行標(biāo)記;若乘法操作中輸入特征圖數(shù)據(jù)和權(quán)重數(shù)據(jù)中有一個為零,則該乘法視為無效操作,對應(yīng)的索引設(shè)置為“0”;若輸入特征圖數(shù)據(jù)和權(quán)重數(shù)據(jù)均為非零值,則視為有效操作,對應(yīng)的索引設(shè)置為“1”;
21、動態(tài)非零值索引設(shè)置為一個向量,其第0位為非零數(shù)據(jù)對數(shù)量,其它位依次為非零數(shù)據(jù)對的位置;對mask索引中的所有值求和,得到需要進(jìn)行乘法操作的數(shù)據(jù)對的個數(shù),并存放在動態(tài)非零值索引的數(shù)組的第0位;
22、逐個讀取mask索引的值并記錄在向量中的位置,判定值是否為1,如果為1,則把位置信息按照順序依次存入動態(tài)非零值索引,否則不將位置信息存入動態(tài)非零值索引。
23、優(yōu)選的,步驟s3的具體內(nèi)容為:
24、s31.用動態(tài)非零值索引第0位數(shù)據(jù)除以乘法單元數(shù)量得到商q和余數(shù)r,分別對應(yīng)乘法單元滿載時的周期數(shù)和非滿載時需要進(jìn)行計算的乘法單元數(shù)量;
25、s32.通過周期計數(shù)t記錄計算進(jìn)度,一個內(nèi)積操作計算開始時,從0開始計數(shù),記錄當(dāng)前內(nèi)積操作已花費的周期數(shù);
26、s33.對獲取不同周期時的輸入特征圖值和權(quán)重數(shù)據(jù)計算位置基數(shù),用于確定在不同的周期取寄存器a和寄存器b中數(shù)據(jù)的地址;
27、s34.判斷當(dāng)前計算狀態(tài)是否在滿載周期或非滿載周期的有效范圍內(nèi),得到執(zhí)行計算的乘法單元的數(shù)量;
28、s35.獲得當(dāng)前乘法單元所計算的特征圖數(shù)據(jù)和當(dāng)權(quán)重數(shù)據(jù),計算出在內(nèi)積運算各周期的位置信息;
29、s36.根據(jù)位置信息獲取寄存器a內(nèi)輸入特征圖數(shù)據(jù)和寄存器b內(nèi)權(quán)重數(shù)據(jù)內(nèi)對應(yīng)相乘位置同時非零的數(shù)據(jù),輸出給乘累加模塊。
30、優(yōu)選的,步驟s4中,在計算單元滿載狀態(tài)時,累加dmu個乘法單元的乘積,在計算單元非滿載狀態(tài)時,累加r個乘法單元的乘積,從內(nèi)積計算的第一個周期開始累加,每個周期的計算結(jié)果均要相加,直到內(nèi)積計算結(jié)束,得到輸出特征圖的一個數(shù)值。
31、優(yōu)選的,步驟s32中,當(dāng)t小于q時,表示當(dāng)前內(nèi)積操作計算未完成,dmu個乘法單元每周期完成一次計算的同時t自加1;當(dāng)t等于q時,表示一個內(nèi)積操作計算結(jié)束,t清零,開始記錄下一個內(nèi)積操作已花費的周期數(shù);
32、步驟s33中,位置基數(shù)pos為:pos=t×dmu;
33、步驟s34中,當(dāng)t<q時,所有乘法單元均處于滿載狀態(tài),此時無需考慮空載問題;當(dāng)t==q&&mu_num<=r時,部分乘法單元處于空閑狀態(tài),僅采用r個乘法單元執(zhí)行計算,mu_num為乘法單元編號,其值范圍為1-dmu。
34、優(yōu)選的,步驟s35的具體內(nèi)容為:
35、設(shè)獲取當(dāng)前輸入特征圖數(shù)據(jù)為x,設(shè)獲取當(dāng)前權(quán)重數(shù)據(jù)為w,x=ifm[dnv[mu_num+pos]],w=權(quán)重[dnv[mu_num+pos]];
36、在內(nèi)積運算第0個周期時,t=0,pos為0,將取出dnv[1]-dnv[dmu]的位置信息,在內(nèi)積運算第1個周期時,t=1,pos為dmu,將取出dnv[1+dmu]-dnv[dmu+dmu]的位置信息,在內(nèi)積運算第2個周期時,t=2,pos為2×dmu,將取出dnv[1+2×dmu]-dnv[dmu+2×dmu]的位置信息,依次類推;
37、在內(nèi)積運算最后1個周期時,當(dāng)部分乘法單元不滿足t<q||(t==q&&mu_num<=r)條件,只取出滿足運算條件的位置信息,并且將不滿足條件的乘法單元空閑。
38、優(yōu)選的,卷積核與對應(yīng)的特征圖局部區(qū)域執(zhí)行內(nèi)積操作計算時乘法單元利用率為:
39、
40、其中,slocal為內(nèi)積矩陣稀疏度,k為卷積核階數(shù),c為通道數(shù),dmu為乘法單元數(shù)量,為向上取整符號。
41、經(jīng)由上述的技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明公開提供了一種基于動態(tài)特征權(quán)重雙索引與算力分配的稀疏卷積加速方法,通過動態(tài)非零值索引,可以同時對特征和權(quán)重進(jìn)行索引,并且降低索引的計算時間和內(nèi)存需求,采用算力動態(tài)分配策略,對跳零后數(shù)據(jù)進(jìn)行算力分配操作,將多個通道卷積跳零后的數(shù)據(jù)集中分配至一組乘法單元,降低了非零數(shù)據(jù)配對難度,乘法單元的數(shù)量可以根據(jù)通道數(shù)、卷積核尺寸和稀疏度按需調(diào)整,以達(dá)到乘法單元的最優(yōu)利用率,避免計算資源閑置。