天天看點

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

AddNet: Deep Neural Networks using FPGA-Optimized Multipliers

設計了一個常系數乘法器,比标準乘法器高效很多,然後訓練網絡設法讓權重盡量往這幾個系數上靠。

摘要

為了加速FPGA上的DNN,低精度算術運算因其可以節省矽片面積和提高吞吐量得到了廣泛研究,然而這些優點犧牲了準确率,RCCM在節省矽片面積上是一種比低精度算術運算更好的方法。RCCM(Reconfigurable Constant Coefficient Multipliers)即可重構常系數乘法器,它僅使用加減法器、移位器和MUX将有限種的系數與輸入值相乘,可以針對FPGA進行大量優化。我們設計了一系列針對FPGA邏輯定制的RCCM以確定其高效利用。為了最小化量化帶來的損失,我們開發了一項新的訓練方法,将RCCM可能的系數表示映射到權重分布,這樣可以在使用RCCM的同時保持高準确率。經過測試,最高比傳統八位量化節省50%的資源,進而實作加速和降低能耗。即使占用資源最少的RCCM也達到了6位定點精度,其他的都至少8位定點精度

一、簡介

傳統定點量化的一個限制是它的權重空間是均勻分割的。然而已經證明,同樣數量非均勻分布的權重會得到更高的準确率,隻要這個分布适當地比對全精度網絡的權重分布,是以降低精度可能不是節省矽片面積最好的方法。另一種方法是RCCM,它通過時分複用和資源共享來節省FPGA資源。RCCM僅使用加、減、移位和MUX實作,這意味着它不需要使用DSP子產品,但它隻能使用有限個系數。我們提出了AddNet以及訓練它的方法,可以将RCCM有限個系數比對到權重分布上。這樣做比降低精度更能節省面積

AddNet包含以下幾個階段。首先,我們設計了一系列針對FPGA邏輯定制的RCCM,它們有可變的系數集,并且占用資源非常少。選擇最比對權重分布的系數集,然後将權重限于這些系數重新訓練。本研究沒有使用FPGA中的乘法器。在實際實作中,我們根據不同CNN層的資源和吞吐量要求選擇使用自帶乘法器還是RCCM

訓練後的網絡能學會讓權重相容RCCM來實作高性能和高準确率。對于給定的吞吐量,這可以顯著減少資源使用,進而使我們的設計适合于資源受限的情況。此外,我們可以擴充設計的并行度以在相同資源消耗的情況下實作更高幀率。具體來說,本文做了以下貢獻:

  • 針對DNN的FPGA架構定制的一批新型RCCM,顯著降低了資源需求
  • 一種根據CNN中權重分布選擇特定RCCM的分布比對技術和一種可以相容所選RCCM的訓練算法
  • 與低精度(1–6位)實作相比,我們的方法顯著提高了準确率。與8位定點精度相比,我們在沒有損失準确率的情況下顯著減少了對查找表(LUT)的使用。此外,通過隐式權重共享減少了權重存儲需求

二、背景

A. 卷積神經網絡

B. 定點訓練

低精度網絡訓練通常保持單精度或雙精度浮點數權重,直到推理前再将其量化。由于采用的量化函數是分段且恒定的,可以計算量化權重的梯度來更新對應的全精度權重。一個可以減少前向和反向過程中的不比對的量化函數對高準确率是至關重要的。可以使用權重共享進一步提高準确率,它包括選擇一個通過碼本來索引的有限全精度權重集。與權重均勻分布的傳統定點量化不同,通常選擇這些權重以比對目标分布來減少資訊損失。使用盡可能小的權重集可以減少索引字的大小,進而減小記憶體占用量。但是,權重共享通常不應用于FPGA中,因為權重映射過程會在電路的關鍵路徑中引入額外的延遲,并需要額外的硬體。此外,高精度算術單元也占用更多面積。利用隐式權重共享,無需任何映射硬體即可減少系數存儲。同時,我們的RCCM針對FPGA硬體進行了優化以減少面積消耗

C. 小型軟核乘法器

由于低精度DNN的興起,小型乘法器受到更多的關注。FPGA内置了乘法器,直接調用它們似乎很自然。可以在一個18位乘法器中同時執行兩個8位乘法。如果内置乘法器不夠,則可以使用基于邏輯的高效乘法器即軟核乘法器。實作軟核乘法器的最有效方式是使用Booth4編碼并且在同一LUT中同時映射Booth編碼和解碼器,可以将資源占用減少50%。然而隻在字長大于16時才好用,在小字長時Xilinx Coregen效果最好。我們優化的乘法器增加了更多限制,是以不再支援任意定點數。這是通過應用可重構乘法器的概念來實作的

三、相關工作

四、AddNet可重構乘法器

A. 可重構乘法器

常系數乘法器是一種隻用加、減和移位操作計算

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

的電路,其中c是預設系數。例如要計算

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

,可以将其改寫為

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

RCCM是計算

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

的電路 ,其中

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

是離散系數集

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

内的一個元素,選擇信号s字長為

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

。RCCM隻用加、減、移位和MUX實作,在N很小時相較于通用乘法器節省了大量資源

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

圖1

圖1為系數集

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

時的RCCM,每個加法器都配了一個二選一MUX,s為選擇輸入。三個加法器對移位各種次數的x進行求和。例如,最上層的加法器負責計算:

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

最後輸出為:

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

通過使用MUX可以實作加法器的複用

以前的RCCM研究主要針對預設系數進行優化,但在CNN中,這些系數即權重是不能事先知道的,是以本文不再尋找針對給定系數集的最優RCCM電路,而是尋找一種有效且資源占用極低的系數。這種低成本RCCM取代了正常CNN中的乘法器,它還可以儲存選擇信号s來代替對應的權重系數以節省存儲空間

B. 将乘法器映射到FPGA

Xilinx FPGA的一個slice可以提供1個六輸入LUT(拓撲A)或2個五輸入LUT(拓撲B),是以如圖2所示,我們設計了兩種用于建構RCCM的基本拓撲結構以確定MUX适合加法器的需要,每種都包含一個加法器

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

圖2

操作數以

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

的形式運算。在拓撲A中,

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

有四個源(其中

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

)而

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

有一個,即

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

。在拓撲B中,

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

有三個源(其中

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

)而

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

(其中

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

)有兩個,即

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

。使用兩位選擇信号s來确定符号和值,顯然操作數的種類比s能表示的數要多,是以需要一個函數

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

來選擇真正的操作數,不同的RCCM可能使用不同的函數,這在設計時就要确定。其實還有别的方法将更多的輸入源映射到加法器,但為了確定拓撲适合單個LUT實作,我們沒有用那樣做,并且通過實驗發現我們這種方法已經足夠了

現在FPGA的邏輯塊都是由LUT組成的,後面接快速進位鍊,是以MUX可以在無需額外消耗的情況下擴充一個簡單的加法器。如圖3所示,隻用到了XOR進位構成全加器

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

圖3

C. 考慮的架構

通過對兩種拓撲AB進行多種組合可以構成RCCM單元。拓撲A的優點是有更大的系數集,因為它的輸入

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

有三個不同的源,拓撲B的

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

可以是負數或零,可以提供了關于零對稱的系數。圖4展示了三種不同的RCCM架構,分别稱為2-Add、3-Add和4-Add,它們上半部分由1-3個拓撲A構成,下半部分是1個拓撲B以保持系數對稱。對稱的系數集能更好地比對預訓練的=CNN權重分布,因為權重通常也關于零對稱。這些設計很容易實作流水線。輸入

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

都被硬連接配接到左移操作符

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

,這不需要LUT資源。支援的系數集取決于

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN
5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

圖4

這些RCCM可以有

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

個系數,其中

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

是選擇信号s的位寬。假設最大移位次數限制為3,拓撲A有四種映射函數而拓撲B隻有一種,則表I為三種RCCM最多能表示多少種系數集。通過周遊這些系數集,便可根據與預訓練神經網絡權重分布的相似性來找到所需的系數集。可以通過探索更多的映射函數來結果,該函數将生成大量系數集,但代價是執行時間更長

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

表I

五、AddNet訓練

本節将讨論為給定CNN尋找最優系數集。CNN一般可以對其權重進行一定程度的正則化而不損失準确率,可以利用這一點,選擇一個和權重分布很相似的RCCM系數集,通過再訓練使網絡學習該系數集的表示形式

A. 分布比對

為了在量化訓練中減少量化誤差以實作高準确率,需要使用可以有效映射到全精度值的函數,這對于減少資訊損失和好的訓練初始化十分重要。定點量化法通常均勻地分割權重空間,但RCCM的系數集并不是均勻的,它的大小、範圍都可以變化。是以為了有效的訓練,我們使用Kullback-Leibler散度衡量兩個分布相似度,選擇了一個系數集大緻比對預訓練權重的RCCM。設R、P分别代表系數集和預訓練權重的分布,N的權重數量,則散度為

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

分布比對即通過窮舉找到散度最小的五個系數集,再選擇含有系數最多的一個系數集,因為要盡可能增加再訓練時可表示的狀态。系數集中務必包含0,雖然也可以在流水線中通過重置輸出觸發器實作權重0,但這樣做很麻煩。

AlexNet的權重分布如圖5(a)所示,它接近正态分布,是以接近0的小權重出現地更頻繁。表II為具有最佳分布比對RCCM系數集,表III為對應的配置參數,圖5(b)~(d)即為它們的分布圖。窮舉法能找到最有效的比對,圖5(e)是沒有經過分布比對的一組系數集,它的Top-1/Top-5準确率為53.8%/76.9%,而經過分布比對的系數集則為55.8%/79.8%,可見有明顯的提升,并且達到了全精度權重的效果

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

圖5

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

表II

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

表III

B. 權重量化

為了利用上RCCM并取得高準确率,要訓練網絡去比對底層推理硬體。在定點數訓練中,對于每一層

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

,我們先将權重裁剪為

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

,其中M是每一步推理的範圍超參數,然後将其量化為定點數。我們的乘法器包含一個定點數輸入和一個系數集C中的值。在訓練過程中,我們引入了函數

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

将浮點數量化,其中

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

為C中正系數被縮放

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

倍後的值。該式的目的是使量化後的權重值和系數集之間的量化誤差最小。使用

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

進行縮放以便使

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

。通過分布比對最小化了量化誤差以實作有效的初始化。然後使用 stestraight-through estimator(STE) 重新訓練網絡,該方法支援反向傳播中不可微的函數。

需要假設

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

,其中L是損失函數

前向傳播時使用量化權重

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

進行推理,反向傳播時仍然更新浮點權重

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

。在訓練期間,

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

也會在反向傳播時被更新。通過在前向傳播中使用與乘法器相容的表示,網絡可以學習到準确率和硬體效率都很高的表示。 在訓練完成後舍棄浮點權重

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

,并将

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

部署到硬體中

C. 激活值量化

初始訓練結果與大于八位的二進制補碼表示相比并沒有降低準确率,是以我們先将激活值統一量化為八位。我們還相應地選擇了RCCM的輸入字長。在前向傳播時,我們用函數G來近似函數g,它能将的實數

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

統一量化為k位數。m由無符号二進制補碼定點表示,f是小數位數,是以

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

。算法1給出了訓練過程的總結。

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN
5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

算法1

六、實驗設定

本節讨論如何評估AddNet。我們使用VHDL實作了圖2-圖4的電路,并用它替換了Alpha Data的FPGA CNN庫中定點乘法。

A. 系統概述

如圖7(a)所示,加速核與PCIE接口內建在一起,使用DMA傳輸資料。

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

圖7

B. 加速核

C. 架構

D. 存儲占用

RCCM的一個優點就是減少存儲,它不再存儲系數

5位無符号陣列乘法器設計_AddNet:使用優化FPGA乘法器的DNN

,而是存儲它的索引s。這很像權值共享,但我們這個不需要電路實作譯碼本,可以直接隐式使用。

七、結果

八、總結

本文研究了針對CNN推理的可重構的常系數乘法器