中興通訊股份有限公司 余金清 章 偉 賀小龍
本文提出一種對(duì)神經(jīng)網(wǎng)絡(luò)權(quán)重進(jìn)行編排方法,根據(jù)量化的權(quán)重值的稀疏特性,通過只編排權(quán)重非0值,從而減少權(quán)重帶寬;同時(shí),提出一種硬件實(shí)現(xiàn)架構(gòu),結(jié)合編排好的權(quán)重,能夠有效減少卷積網(wǎng)絡(luò)的乘法運(yùn)算,特別是在網(wǎng)絡(luò)權(quán)重稀疏情況下,可以進(jìn)一步減少卷積計(jì)算,從而提升神經(jīng)網(wǎng)絡(luò)處理能力。
近些年來,人工智能技術(shù)在在全世界范圍內(nèi)得到了迅猛的發(fā)展,與此同時(shí)神經(jīng)網(wǎng)絡(luò)的規(guī)模不斷增長(zhǎng),典型的神經(jīng)網(wǎng)絡(luò)動(dòng)輒幾十層甚至上百層,計(jì)算量不斷的增加造成推理需要的時(shí)間也需來越長(zhǎng)。
但實(shí)際應(yīng)用中,在如此高的運(yùn)算量中并不是所有的計(jì)算都是有效計(jì)算,特別是對(duì)于算法經(jīng)過定點(diǎn)化或是稀疏化后,出現(xiàn)的權(quán)重為零的點(diǎn),實(shí)際運(yùn)行中,是不需要計(jì)算的。因此,神經(jīng)網(wǎng)絡(luò)的硬件加速器利用權(quán)重的稀疏特性減少計(jì)算量,且在此基礎(chǔ)上進(jìn)一步降低處理時(shí)間,提高效能,目前業(yè)界都在關(guān)注的重點(diǎn)技術(shù)問題。
本設(shè)計(jì)采用兩種方法來提升神經(jīng)網(wǎng)絡(luò)設(shè)計(jì):
(1)權(quán)重編排:通過離線方式,對(duì)提前訓(xùn)練好的權(quán)重( weights)進(jìn)行特別編排,去掉值為0的權(quán)重,完成對(duì)非0權(quán)重的編排。
(2)計(jì)算加速:卷積網(wǎng)絡(luò)加速器,完成神經(jīng)網(wǎng)絡(luò)稀疏計(jì)算(只計(jì)算非0權(quán)重)提升網(wǎng)絡(luò)處理能力。
權(quán)重編排,通過編譯器對(duì)每個(gè)積核中點(diǎn)化后的權(quán)重值重新編排,編排后的權(quán)重變?yōu)橹甘痉?映射表的形式。如圖1所示,通過代運(yùn)算將一個(gè)R*S*CH大小的卷積核切分成多個(gè)R*S*CH的卷積核(其中R為卷積核的列寬,S為卷積核的行寬,CH為子卷積核的通道數(shù),假設(shè)層的卷積核通道數(shù)尾C,存在C<=CH),并對(duì)每個(gè)子卷積核中定點(diǎn)化后的權(quán)重值重新編排,編排后的權(quán)重變?yōu)橹甘痉?映射表的形式。
權(quán)重編排的實(shí)施方式,把相同規(guī)律的權(quán)重編排(即分類,對(duì)于8bit定點(diǎn)處理,如將1,2,4,8分為一類,3,6,12,24分為一類)在一起,先排正數(shù)權(quán)重,之后排負(fù)數(shù)權(quán)重。使用本文的方式,可以使原來需要R*S*C次乘加作,而編排后最多只需要R*S*C+256次加法操作和256次乘法操作同時(shí),當(dāng)卷積計(jì)算的累加和小于偏置時(shí),可以提前停止卷積運(yùn)算。
圖1 權(quán)重編排流程
根據(jù)激活函數(shù) ReLU(Rectified Linear Unit)特性,設(shè)置提前停止功能,正數(shù)權(quán)重和負(fù)數(shù)權(quán)重分開組合,正數(shù)權(quán)重類型排在向量前面,負(fù)數(shù)排在后面。
將離線編排好的權(quán)重?cái)?shù)據(jù),提前存儲(chǔ)在存儲(chǔ)單元中。
(1)對(duì)于權(quán)重為0的數(shù)據(jù),由于其運(yùn)算結(jié)果也為0,則不需要存儲(chǔ),包括對(duì)應(yīng)索引信;后續(xù)運(yùn)算直接跳過。
(2)對(duì)于特征數(shù)據(jù),順序存儲(chǔ)在存儲(chǔ)單元中。
權(quán)重0由于完成卷積運(yùn)算結(jié)果還是0,在權(quán)重編排時(shí)就被丟棄,不參與計(jì)算,節(jié)省了存儲(chǔ)資源與數(shù)據(jù)讀寫帶寬,并提高了計(jì)算效率。
圖2為本文所述稀疏卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的方法架構(gòu),其處理流程包括:
CPU根據(jù)當(dāng)前處理的網(wǎng)絡(luò)模型下發(fā)對(duì)應(yīng)的指令給硬件加速器;同時(shí),CPU會(huì)給DMA下發(fā)指令,讓DMA去對(duì)應(yīng)的存儲(chǔ)單元中讀出相應(yīng)的權(quán)重以及特性數(shù)據(jù)。硬件解析指令,分別送給對(duì)應(yīng)的控制以及輸入輸出緩存單元。
根據(jù)配置信息,需要將當(dāng)前處理進(jìn)度的權(quán)數(shù)據(jù)以及特征數(shù)據(jù)提前存放在緩存單元中。先從緩存單元中獲取權(quán)重信息以及位置索引信息(權(quán)重位置信息),并根據(jù)權(quán)重對(duì)應(yīng)的索引信息,去從數(shù)據(jù)緩存單元中素引對(duì)應(yīng)的數(shù)據(jù)。
計(jì)算單元中的控制器,先將第一個(gè)指示符讀到控制器中,之后按照順序讀取權(quán)重編排后的映射表內(nèi)容,以映射表內(nèi)容為地址選擇條件,數(shù)據(jù)緩存中讀取數(shù)據(jù)。
圖2 稀疏的神經(jīng)網(wǎng)絡(luò)處理架構(gòu)
圖3 卷積計(jì)算結(jié)構(gòu)
卷積計(jì)算,如圖3所示,指示符內(nèi)的映射表項(xiàng)讀取時(shí),在沒有達(dá)到結(jié)束條件,在計(jì)算單元的分類累加單元進(jìn)行計(jì)算預(yù)處理和加減操作。在計(jì)算單元的分類累加單元進(jìn)行計(jì)算預(yù)處理(即移位操作,移位量取決于指示符表中的配置)和加減操作(加減取決于指示符表中的配置)。
分類累加過程,當(dāng)同個(gè)指示符內(nèi)的映表項(xiàng)讀取完時(shí)即達(dá)到同一權(quán)重的結(jié)束條件時(shí),查看分類結(jié)束標(biāo)志,如果分類結(jié)束標(biāo)志為未結(jié)束,則讀取下一個(gè)指示符表項(xiàng),繼續(xù)完成累加操作。
分類切換控制,當(dāng)分類結(jié)束標(biāo)志為結(jié)束,則將累加后的結(jié)果,對(duì)應(yīng)的權(quán)重值和分類累加計(jì)算單元編號(hào)送到分類乘加計(jì)算單元;同時(shí),讀取下一個(gè)指示符表項(xiàng),并將分類累加處理器中的累加值清零,重新累加減操作,直到指示符表項(xiàng)中的分類結(jié)束標(biāo)志指示為整個(gè)卷積操作完成。
分類乘法,分類乘加計(jì)算單元完成輸入的權(quán)重和數(shù)據(jù)的乘法操作,并將乘的結(jié)果累加到部分和中。
根據(jù)該方案,配置分類乘法單元是否能提前停止運(yùn)算,如果激活函數(shù)為ReLU,則使能提前停止功能,即判斷當(dāng)前卷積的部分和的值與偏置值的差值是否小于0,如果小于零,則反饋給計(jì)算單元的控制器,該計(jì)算完成處理。
該方法可以達(dá)到提前終卷積運(yùn)算的結(jié)果目的,從而減少運(yùn)算量,減少運(yùn)算功耗,進(jìn)而提高能效比。
總結(jié):采用本文所述方法,與現(xiàn)有技術(shù)相比,通過權(quán)重轉(zhuǎn)換和新計(jì)算單元相結(jié)合,提前離線對(duì)權(quán)重進(jìn)行了零數(shù)據(jù)壓縮,使得卷積操作的時(shí)間只非零權(quán)重的個(gè)數(shù)有關(guān),較好的利用了權(quán)重卷積核的稀疏特性,節(jié)省了推理運(yùn)行時(shí)間。與此同時(shí),新的計(jì)算單元結(jié)構(gòu)擴(kuò)展性更好,可以支持計(jì)算提前中功能,即可以利用數(shù)據(jù)的稀疏特性,進(jìn)一步降低運(yùn)算量。