本發(fā)明屬于集成電路設計,具體涉及一種用于卷積神經(jīng)網(wǎng)絡推理的數(shù)據(jù)重用及運算硬件加速器。
背景技術:
1、隨著現(xiàn)代技術的數(shù)字化、自動化、智能化,以深度學習為主要途徑的人工智能算法飛速發(fā)展。在智能安防、智能駕駛、圖像處理、自然語言處理等等領域,深度學習算法均展現(xiàn)出極高的運算精度和優(yōu)秀的可移植性。而現(xiàn)如今,卷積運算已經(jīng)成為大多數(shù)深度神經(jīng)網(wǎng)絡算法的共同常用算子,因此,對該算子進行優(yōu)化可以很大程度上提高整個深度神經(jīng)網(wǎng)絡的運算性能。
2、卷積神經(jīng)網(wǎng)絡相比其他的神經(jīng)網(wǎng)絡,在很多任務上有更高的實現(xiàn)性能、更低的部署難度和更好的可解釋性。但同時,近年來研究者們對于更高精度更高智能化程度的要求使得卷積神經(jīng)網(wǎng)絡的參數(shù)量和運算復雜度飛速增長,網(wǎng)絡的迭代速度已經(jīng)遠遠超過了執(zhí)行硬件的更新速度,而如智能駕駛等邊緣計算應用場景下的硬件系統(tǒng)又很難配備高功耗和高價格的圖形處理器,導致高算力和帶寬需求的神經(jīng)網(wǎng)絡算法很難在常規(guī)硬件上進行部署。因而,有必要針對卷積神經(jīng)網(wǎng)絡運算提出專用硬件架構,在高能效比實現(xiàn)的前提下同時滿足卷積神經(jīng)網(wǎng)絡的高算力需求。
技術實現(xiàn)思路
1、為了克服現(xiàn)有技術的不足,本發(fā)明的目的在于提出一種用于卷積神經(jīng)網(wǎng)絡推理的數(shù)據(jù)重用及運算硬件加速器,以期能夠實現(xiàn)高運算吞吐、高能效比、低功耗、靈活可拓展性的卷積神經(jīng)網(wǎng)絡硬件加速運算,該加速硬件器可以廣泛應用于計算機視覺、自然語言處理等使用卷積神經(jīng)網(wǎng)絡算法實現(xiàn)的領域。
2、本發(fā)明提供的用于卷積神經(jīng)網(wǎng)絡推理的數(shù)據(jù)重用及運算硬件加速器,其結構包括運算單元及由其組織形成的陣列、片上數(shù)據(jù)分發(fā)網(wǎng)絡和收集網(wǎng)絡、用于輸入特征圖中間緩存的行緩沖及相關的第一讀寫控制邏輯、用于輸出部分和緩存的累加和緩沖及相關的第二讀寫控制邏輯;其中:
3、本發(fā)明所述硬件加速器用于執(zhí)行2d卷積算子、組卷積算子、深度可分離卷積算子及計算行為類似的變體卷積算子。為避免混淆,對卷積計算中各參數(shù)進行定義:定義輸入特征圖大小為hi×wi,輸入通道數(shù)為ic;定義權重核大小為kh×kw,權重輸入通道為ic(與特征圖輸入通道相等),權重核個數(shù)為oc;定義輸出特征圖大小為ho×wo,特征圖輸出通道數(shù)為oc(與權重核個數(shù)相等);塊運算過程中,運算單元陣列每行計算tic個輸入通道的部分和,每列計算toc個輸出通道的部分和。
4、所述第一讀寫控制邏輯,負責對卷積運算中的輸入特征圖進行緩存。行緩沖在整個硬件架構中的位置為片上或片外存儲器與片上數(shù)據(jù)分發(fā)網(wǎng)絡之間,在運算單元陣列加載輸入特征圖的過程中,輸入特征圖中的像素值被加載到行緩沖中進行存儲,之后像素值會被輸出給片上數(shù)據(jù)分發(fā)網(wǎng)絡,進而用于運算單元陣列的卷積計算輸入;行緩沖大小為tic×(kh×wi),意為:對輸入特征圖中tic個相鄰輸入通道的每kh個相鄰行中的像素值進行緩存,每行的像素值有wi個。
5、所述片上分發(fā)網(wǎng)絡,負責對行緩沖的輸出數(shù)據(jù)進行排序,之后將輸入特征圖按規(guī)則分發(fā)給運算單元陣列。在當前塊的運算階段,輸入特征圖在被加載到行緩沖的同時,行緩沖輸出tic×kh個值給片上分發(fā)網(wǎng)絡,該輸入數(shù)據(jù)為tic個輸入通道,每個輸入通道的特征圖中的kh行1列像素值。片上分發(fā)網(wǎng)絡對行緩沖的輸出數(shù)據(jù)進行重新排序,使每個運算單元單周期獲得的數(shù)據(jù)來自各個輸入通道,之后以廣播形式輸出給運算單元陣列。
6、所述運算單元陣列,負責卷積運算的乘累加操作。運算單元為加法樹結構,每個葉節(jié)點為1個乘法器,共有tic個乘法器。運算單元陣列由hn×wn個運算單元排列組成,其中hn=kh,wn=kw×toc,每周期可以執(zhí)行tic個輸入通道,toc個輸出通道中kh×kw卷積滑動窗口的乘累加運算。整個運算單元陣列維護有2×(tic×toc×(kh×kw))個權重寄存器,負責存放來自片上分發(fā)網(wǎng)絡預取的權重數(shù)據(jù)。權重寄存器實際硬件包含當前工作和影子共2套,采用乒乓緩沖的方式運轉,以實現(xiàn):對后續(xù)下一次塊運算輸入權重的預取(影子權重寄存器中完成)和當前塊運算輸入權重供給運算單元陣列(當前工作權重寄存器中完成)可以分別獨立進行。每周期每個運算單元接受來自片上分發(fā)網(wǎng)絡的輸入特征圖以及來自權重寄存器的輸入權重,進行乘累加計算生成部分和,部分和經(jīng)過后續(xù)加法樹累加后,與來自上一行運算單元的部分和輸出累加,從運算單元中輸出,給到下一行運算單元。運算單元陣列在行方向上共享輸入特征圖數(shù)據(jù),在列方向上以累加的方式向下將當前行的部分和傳遞給下一行。
7、所述片上收集網(wǎng)絡,負責對運算單元陣列中每列的部分和輸出進行正確聚合,并將輸出的部分和寫入。在運算單元陣列完成對權重與輸入特征圖的乘累加運算之后,每kw列的生成部分和會向下累加從運算單元陣列輸出,并最終經(jīng)過片上收集網(wǎng)絡生成1個kh×kw卷積滑動窗口的部分和。片上收集網(wǎng)絡的輸入以kw列為一組,以脈動累加的形式進行部分和收集。片上收集網(wǎng)絡實現(xiàn)部分和選通邏輯,保證卷積運算起始與結束階段的累加邏輯正確。片上收集網(wǎng)絡的累加完成后,將輸出部分和與累加和緩沖中的已累加部分和相加,結果保存回累加和緩沖。
8、所述第二讀寫控制邏輯,負責儲存輸出特征圖像素值對應的累加和。每周期運算單元陣列運算會輸出一部分累加和,每個輸出特征圖的像素值需要對多周期運算單元陣列計算的結果進行累加。在這個過程完成之前,累加和緩沖將暫存部分累加和,并在輸出特征圖對應的所有塊運算結果累加完成時給出有效數(shù)據(jù)和相關信號,將結果輸出給片上或片外存儲。
9、神經(jīng)網(wǎng)絡中,某一層卷積運算按順序被拆分為多次塊運算,每次塊運算之間相互獨立。輸入特征圖和權重輸入硬件,運算單元陣列進行乘累加運算,及輸出特征圖輸出硬件的過程均按照該順序實現(xiàn)。
10、進一步地,在某次卷積運算中,硬件加速器的處理流程如下:
11、(1)預加載過程,權重從權重存儲器中被加載到運算單元陣列中的權重寄存器。同時啟動輸入特征圖加載,輸入特征圖從存儲器中傳入行緩沖。
12、(2)首行運算過程,當行緩沖初次完全填充以及權重寄存器初次完全填充之后,啟動運算單元陣列的計算。此時行緩沖中的輸入數(shù)據(jù)通過片上分發(fā)網(wǎng)絡進入運算單元陣列,與權重寄存器中的權重進行乘累加運算。在該階段當前工作權重寄存器完成填充,可以同時啟動對下一次塊運算使用的影子權重寄存器的填充過程。
13、每周期行緩沖的一列輸入運算單元陣列,由此規(guī)律逐周期進行輸入特征圖供給。同時運算單元陣列中的部分和累加至每列底部運算單元連接的片上收集網(wǎng)絡,并在其中與累加和緩沖中原先的累加和進行相加,最終重新存入累加和緩沖。
14、(3)運算過程:當行緩沖的每一列全部消耗掉時,該行緩沖中用于存儲最舊行標號對應輸入特征圖的tic行將不會在后續(xù)的卷積運算中被使用到。從存儲器中傳入新一行的輸入特征圖給行緩沖中最舊行標號對應的該tic行,同時該輸入特征圖會旁路給片上分發(fā)網(wǎng)絡,進而傳入運算單元陣列,作為下一行輸出特征圖卷積運算所需的輸入。后續(xù)重復該過程,直到該tic行被重新填滿,此時已重新完成了對行緩沖每一列的輪詢。重復(3)過程,直到該次塊運算中輸入特征圖的行維度已經(jīng)被完全遍歷,此即完成一次塊運算。
15、該次塊的運算結束后,更換下一個塊的運算。重復(1)、(2)、(3)過程。當某次塊運算對應某輸出通道的最后一組輸入通道時,在其結束運算且部分和全部累加進累加和緩沖后,將累加和中的緩沖存儲到片上或片外存儲器,之后進行下一個塊的運算。當所有塊運算都實現(xiàn)之后,完成該層卷積運算任務。
16、與現(xiàn)有技術相比,本發(fā)明的有益技術效果體現(xiàn)在:
17、(1)本發(fā)明采用運算單元陣列進行卷積運算,可以同時進行多個輸入通道多個輸出通道的乘累加運算,運算吞吐大,可以滿足神經(jīng)網(wǎng)絡卷積運算的高運算算力的要求。
18、(2)本發(fā)明的卷積運算總過程采用分塊的方式進行,可以通過調整切分塊的大小來適配硬件不同運算陣列大小、緩沖大小,實現(xiàn)高陣列利用率。該方法有靈活的可拓展性,可以很好地滿足不同超參數(shù)的卷積運算、不同深度神經(jīng)網(wǎng)絡系統(tǒng)的要求。
19、(3)本發(fā)明的硬件計算塊在輸入特征圖行維度、輸入通道維度、輸出通道維度進行切分,不依賴于卷積算子類型,靈活性強,可以實現(xiàn)包括普通1d卷積、2d卷積、深度可分離卷積在內的多種卷積算子。
20、(4)本發(fā)明的硬件和方法可以實現(xiàn)以下數(shù)據(jù)重用方式:對于權重數(shù)據(jù),在輸入通道不變時,運算單元陣列的權重寄存器不需要進行權重重寫,權重在時間維度上進行重用;對于輸入特征圖,輸入被廣播到運算單元陣列,并在行緩沖中暫存,輸入特征圖在時間維度上和空間維度上進行重用;對于輸出特征圖,輸出在累加和緩沖中暫存,輸出特征圖在時間維度上進行重用。由此,該硬件實現(xiàn)了高數(shù)據(jù)重用度,減少了卷積運算的帶寬需求和運算功耗。
21、(5)本發(fā)明采用多級緩沖,減少了整個硬件加速器訪問外部存儲的次數(shù),降低了總線占用率和讀寫內存功耗,緩解了該硬件所在系統(tǒng)的帶寬壓力。