本發明涉及神經網絡,尤其涉及一種逐塊計算的向量-零值稀疏感知的卷積神經網絡加速器。
背景技術:
1、卷積神經網絡是一種強大的算法,其通過一系列卷積層來提取特征,然后將特征送到具體的任務頭,完成分類、檢測等任務。卷積神經網絡在圖像數據上實現了非常好的效果,近幾年,卷積神經網絡開始用于從點云數據中提取有效信息,給定輸入特征圖中的一個特征向量和權重,基本的卷積操作可用公式表示為:
2、
3、其中,表示輸入通道數,為輸入特征圖在方向的大小,為卷積核在方向的大小,表述輸出通道數,表示輸出特征向量的第個值,表示向下取整,表示權重或特征在方向上的偏移。在現有神經網絡中,常用的卷積核大小為),然后,每一層的輸出特征在經過批歸一化和激活函數之后,作為下一層的輸入特征,權重通過訓練得到,這里的都是整數。
4、卷積神經網絡廣泛使用relu作為激活函數,公式表示如下:
5、
6、公式(1)卷積計算的結果有正有負,經過relu激活函數計算后所有負數將變為0,這導致神經網絡特征圖中存在大量的零值稀疏性。對于權重,無顯式的零值稀疏性,即權重中顯式的零很少,或者幾乎沒有。但一般而言,神經網絡中的權重存在不少冗余,使用網絡剪枝技術去掉這些冗余權重,模型準確率等性能指標幾乎不變的同時,也能產生較強的稀疏性。此外,點云在空間中的分布范圍很大(典型的激光雷達掃描范圍為50-100m),空間中只有少量的位置存在點,這導致輸入特征圖中只有少數位置存在特征向量,絕大部分位置為空(即沒有特征向量),稱之為向量稀疏性,對應的特征圖也稱為稀疏特征圖。相反,圖像數據無顯式的向量稀疏性。具體來說,給定一張圖片,其圖片大小是固定的,圖片中每個位置對應一個像素,但通常情況下,圖片中有很大一部分像素為背景,去掉后對具體的分類、檢測等任務的準確率影響不大。在這種情況下,圖片中像素的分布也將變得稀疏,對應的特征圖成為稀疏特征圖,包含大量的向量稀疏性。
7、同時,神經網絡的計算需要消耗大量的資源,為了讓神經網絡能夠在資源受限的環境實現部署,如移動設備、嵌入式系統等,需要設計專用的神經網絡加速器,如果可以利用零值稀疏性和向量稀疏性,減少不必要的計算,那硬件的性能就能夠得到提升。然而,考慮了稀疏性之后,特征圖和權重將變得不規整,其加載、計算、存儲方式變得復雜。gpu等通用ai處理器無法利用稀疏性,因為它們只能處理規整的數據。
8、稀疏壓縮編碼是利用零值稀疏性來減少存儲需求的一種方法,常見的稀疏數據壓縮方式包括行程長度編碼(rlc,run?length?code)、頻繁值壓縮(fvc,frequent?valuecompression),零值壓縮(zvc,?zero?value?compression)。行程長度編碼在特征或權重不規則時,編碼長度不可控,需要設計切分組裝的存儲方式,這給數據讀取帶來了困難,也需要額外的切分位置信息記錄。而頻繁值壓縮采用哈夫曼樹編碼同樣存在編碼長度不固定的數據存儲問題,并且哈夫曼編碼的壓縮和解壓縮過程相對復雜,需要較多的時間,不適用于實時數據傳輸。零值壓縮用0-1索引表示特征向量中零值和非零值的位置,實現方式簡單高效,不需要單獨的碼表,有利于硬件實現。
9、此外,一般而言,神經網絡特征圖較大,遠超一個加速器內部的存儲容量。一種做法是,先將特征圖分為多個小塊,然后按塊將特征加載到片上,執行對應的卷積運算,如圖1所示。在分塊時,若某些塊無特征向量,則可直接刪除,從而提高加速器的工作效率。但是,將特征圖分塊存在如下問題:(1)卷積計算存在數據依賴性,計算當前位置輸出特征需要用到鄰近的多個輸入特征,這導致計算塊邊界的輸出特征時需要用到鄰近塊的輸入特征,加速器計算完每個塊的輸出特征圖后,需要將邊界特征同時更新到鄰近特征塊中;(2)對于稀疏的神經網絡特征圖,每個塊有多少特征,邊界是否有特征,是隨機的,無法事先知曉,這些問題使得分塊計算變得困難,不做針對性的考慮的情況下很容易導致加速器的存儲和計算資源利用率低,計算延時大等問題。因而當前尚沒有能很好地支持對稀疏神經網絡特征圖進行逐塊計算的神經網絡加速器。
技術實現思路
1、為了解決上述問題,本發明提供一種逐塊計算的向量-零值稀疏感知卷積神經網絡加速器,該加速器能較好的支持稀疏神經網絡特征圖的逐塊計算,能有效利用稀疏特征圖中的向量稀疏性和零值稀疏性來提高特征圖的計算效率,減少了資源和能量消耗。
2、本發明提供一種逐塊計算的向量-零值稀疏感知的卷積神經網絡加速器,包括:整體控制器、特征搜索單元、輸入特征管理單元、權重管理單元、卷積計算陣列、輸出特征管理單元和內存管理單元,整體控制器負責控制整個加速器的運行;特征搜索單元用于確定輸出特征向量與輸入特征的映射關系,即計算每個輸出特征向量都需要哪些特征向量的參與;輸入特征管理單元用于暫存即將用到的輸入特征向量,并根據特征搜索單元搜索到的映射關系將對應的特征向量中的非零值加載到卷積計算陣列,以執行具體的卷積運算;卷積計算陣列包含多個卷積計算單元,每個卷積計算單元包含乘法器、加法樹、累加器和批歸一化單元,用以執行卷積運算中的乘法、加法操作,以及后續的批歸一化操作;權重管理單元用于暫存權重,并根據需要將權重輸出到卷積計算陣列;輸出特征管理單元暫存輸出特征向量,并采用零值壓縮算法將特征向量壓縮;內存管理單元將壓縮后的特征寫回片外存儲器,如ddr4等,完成特征塊的更新。
3、特征搜索單元包括坐標緩沖區和特征搜索器,坐標緩沖區用于存儲特征塊中每個特征向量的坐標;特征搜索器用于搜索有效特征,首先將特征塊轉化為空間位圖,然后用卷積核按照從左到右,從上到下遍歷空間位圖,從而得到輸入特征和輸出特征的映射關系,通過這種方式,加速器避免了向量稀疏性相關的冗余計算。
4、輸入特征管理單元包括特征譯碼器,坐標緩沖區,0-1索引緩沖區,非零值緩沖區,坐標匹配單元和特征聚合器;特征譯碼器首先從片外存儲器讀取壓縮過的特征向量,并對讀入的特征向量進行解碼,解碼后得到特征向量的坐標、0-1索引和非零值三部分,并將這三部分存入對應的緩沖區;然后,坐標匹配單元讀坐標緩沖區,并判斷讀取的特征向量的坐標與特征搜索單元的搜索結果是否匹配,若匹配,則特征聚合器將檢查該特征向量對應的權重是否已經被剪掉,如果沒有剪掉,特征聚合器將該特征向量中的非零值和對應的權重加載到卷積計算陣列,具體方式為:讀0-1索引緩沖區,遍歷該索引并計數,每遍歷到索引1,則從非零值緩沖區中讀一個非零值,并送到卷積計算陣列中,執行卷積運算,計數值將轉化為該特征對應卷積權重的讀取地址,送到權重管理單元中,讀取對應的權重值。加速器通過這種匹配-聚合的特征讀取方式,能有效利用特征向量和權重中的零值稀疏性,避免了零值相關的卷積運算,有助于提高硬件性能。
5、權重管理單元包括剪枝標志寄存器和權重緩沖區,給定神經網絡中的權重數據,采用網絡剪枝技術去掉權重中的冗余部分,具體為:根據權重絕對值大小按從大到小的順序排序,取前r%個對網絡性能影響較大的權重存入權重緩沖區,r根據實際需求設置,同時,將權重剪枝標志存入剪枝標志寄存器中,所謂權重剪枝標志,用來指示權重數據中,哪些權重已經被剪掉,哪些權重保存在權重緩沖區的標志位。
6、卷積計算陣列包括32個卷積計算單元,每個卷積計算單元包含8個乘法器,一個加法樹,一個累加器和一個批歸一化單元,卷積計算陣列一次能計算32個輸出通道,每個卷積計算單元對應一個輸出通道,這32個輸出通道稱為一組,若輸出通道數為,則將劃分為個組,這里表示向上取整,每個卷積計算單元一個周期能計算8個輸入通道的乘法,并將乘法結果累加,累加的結果(即輸出特征)經過批歸一化和relu函數激活后,將送往輸出特征管理單元的輸出緩沖區暫存,等待進一步的處理,為提高片上權重重用率,減少權重管理單元的存儲資源消耗,先沿坐標維度遍歷輸入特征,計算完所有特征的一組(32個)輸出通道后,再更新權重,計算下一組輸出通道。
7、輸出特征管理單元包括輸出緩沖區、特征編碼器、坐標緩沖區、0-1索引緩沖區、非零值緩沖區、特征組裝器和邊界檢測單元。輸出緩沖區用于緩沖卷積計算陣列的輸出結果,該結果尚未壓縮。特征編碼器對輸出特征進行零值壓縮編碼,并將編碼結果分別存入對應的坐標緩沖區、0-1索引緩沖區和非零值緩沖區中,特征組裝器將壓縮編碼結果組裝成固定長度的標準幀,邊界檢測單元用于檢測當前輸出特征向量是否位于塊邊界,并將檢測結果送往內存管理單元。
8、為便于特征塊在片外存儲器中的存放和讀取,首先對片外存儲器進行分段,每個特征塊獨占片外存儲器的一段,加速器與片外存儲器的交互由內存管理單元完成,內存管理單元包含內存讀寫控制器和特征塊存放表,內存讀寫控制器用于執行具體的片外存儲器讀寫操作,特征塊存放表用于記錄每個特征塊在內存中的存放地址以及完成特征塊更新。特征塊存放表中包含四項內容:塊標簽、塊對應的內存段起始地址、每段已經使用的空間、每個特征塊內特征向量的數量,內存管理單元在將輸出特征向量寫回片外存儲器時,將同步更新表中對應特征塊的第三列和第四列,即已使用空間和特征向量數量,此外,內存管理單元還將檢測輸出特征向量是否為塊邊界,如果是,則該特征向量將同時寫入包含該邊界特征向量的多個特征塊,并同步更新特征塊存放表中對應項,從而完成每個塊內特征向量的更新。
9、在實際應用中,首先主處理器,如cpu,將神經網絡第一層的輸入特征圖分塊、壓縮,將壓縮后的特征塊存放在內存中,并初始化特征塊存放表,然后加速器開始工作。加速器的工作流程為:首先將特征向量坐標、權重、按塊壓縮后的特征向量等數據從片外內存加載到片上,其中,坐標將存放到特征搜索單元,權重存放到權重管理單元,特征向量解壓縮后存放到輸入特征管理單元,壓縮后的特征向量也包含坐標;接著特征搜索單元搜索有效的輸入特征向量,然后特征聚合器先判斷該特征向量對應的權重是否被剪掉,若否,則讀取搜索到的輸入特征向量,并通過遍歷0-1索引的方式過濾掉特征向量中的零值,只將非零值加載到卷積計算陣列;隨后讀取卷積計算需要的權重,進行卷積計算;接著對卷積計算結果進行壓縮編碼,將輸出特征向量重新壓縮回坐標、0-1索引、非零值三項,并將壓縮后的特征組裝為固定長度的標準幀,如512比特;然后將壓縮后的標準幀寫回片外存儲器;最后更新特征塊存放表。
10、相對于現有技術,本發明具有如下的有益技術效果:
11、(1)將片外存儲器分段,每段存儲一個特征塊,并使用一種基于特征塊存放表的內存管理方式來更新特征塊中的數據,這樣只需要對神經網絡的第一層的輸入特征進行顯式的分塊操作(由cpu等通用處理器完成),加速器計算得到輸出特征向量后,只需要更新每個特征塊中的數據(由加速器完成),不再需要顯式的重新分塊操作,顯著地提高了特征塊存儲和加載效率;
12、(2)通過將分塊后的稀疏特征圖轉化為空間位圖,對位圖進行遍歷的方式來搜索計算所需的輸入特征向量,極大降低了特征向量的搜索復雜度,也間接提高了卷積計算效率;
13、(3)采用零值壓縮算法來減少存儲需求,并使用匹配-聚合的輸入特征讀取方式,能有效利用特征向量和權重中的零值稀疏性,避免了向量稀疏和零值稀疏相關的冗余卷據運算,極大地提升了加速器算力。