<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 智能計算 > 設計應用 > 實(shí)測!AlexNet卷積核在FPGA占90%資源仍跑750MHz 算力達288萬(wàn)張圖像/秒

實(shí)測!AlexNet卷積核在FPGA占90%資源仍跑750MHz 算力達288萬(wàn)張圖像/秒

—— Achronix創(chuàng )新的機器學(xué)習處理器(MLP)突破傳統FPGA時(shí)序性能瓶頸
作者:Achronix 時(shí)間:2020-04-25 來(lái)源:電子產(chǎn)品世界 收藏
編者按:本文將重點(diǎn)描述基于A(yíng)lexNet的2D卷積核的實(shí)例應用。

_Conv2D是功能齊全的設計,可將2D輸入圖像與多個(gè)內核同時(shí)進(jìn)行卷積。 該設計充分利用了和BRAM模塊,每個(gè)一個(gè)周期執行12個(gè)int8乘法。此外,MLP列和BRAM塊均等級聯(lián)以有效地將圖像數據傳遞,從而允許同時(shí)處理多個(gè)內核。

本文引用地址:http://dyxdggzs.com/article/202004/412404.htm

該設計使用NoC接入點(diǎn)(NAP)從片上網(wǎng)絡(luò )(NoC)讀取或寫(xiě)入數據。NoC連接到Speedster7t器件中的GDDR6控制器再到外部存儲器。

AlexNet

盡管最初為AlexNet圖像和內核大小配置了MLP_Conv2D設計,但是2D卷積是一個(gè)通用過(guò)程,因此可以重新配置該設計并使其適應許多不同的2D方法。

2D卷積的一般原理是在圖像(實(shí)際上是另一個(gè)2D矩陣)上傳遞內核(2D矩陣)。對于每次計算,內核均以輸入圖像的像素為中心,并對每個(gè)內核值(稱(chēng)為權重)與其當前對齊的像素執行乘法運算。這些乘法的總和給出了原始圖像像素的特定卷積結果。然后將內核移至下一個(gè)像素,并重復該過(guò)程。

經(jīng)過(guò)訓練的內核,2D卷積生成一個(gè)輸出結果圖像,突出顯示輸入圖像的特定特征,例如垂直線(xiàn),水平線(xiàn),變化角度的對角線(xiàn)和變化半徑的曲線(xiàn)。然后可以將這些特征輸入到其他處理層(包括其他2D卷積),然后可以將其標識為(通常在軟件中)為特定對象。

因此,二維卷積處理不應被視為圖像識別的完整解決方案,而應被視為處理操作鏈中的單個(gè)關(guān)鍵組件。

1587775777189864.png

圖1 單個(gè)Kernel進(jìn)行2D卷積的動(dòng)態(tài)示意圖

乘法密度

2D卷積的挑戰是所需的乘法數量,這就是MLP中專(zhuān)用的乘法器陣列。對于A(yíng)lexNet配置,每個(gè)內核為11×11= 121個(gè)權重值。但是,卷積實(shí)際上是3D的,因為輸入圖像具有三層(RGB),因此一組內核有121×3 = 363個(gè)乘法來(lái)產(chǎn)生單個(gè)輸出結果。AlexNet輸入圖像為227×227;但是,此圖像的stride為4(在計算之間內核移動(dòng)了四個(gè)像素)。此過(guò)程導致輸出結果矩陣為54×54 = 2916個(gè)結果。因此,對于一幅圖像需要363×2916 = 1,058,508次乘法;即處理一個(gè)圖像需要進(jìn)行一百萬(wàn)次以上的累加運算。其中單個(gè)Kernel進(jìn)行2D卷積的動(dòng)態(tài)示意圖如下:

對于MLP_Conv2D,其設計旨在一次處理一幅圖像中的60個(gè)內核,單次執行超過(guò)6000萬(wàn)次乘法累加操作。

1587775827463097.png

圖2 單個(gè)MLP_Conv2D實(shí)例資源使用

MLP_Conv2D設計可以以750 MHz的頻率運行。單個(gè)MLP能夠在137 μs內對具有11×11內核的單個(gè)227×227 RGB輸入圖像進(jìn)行卷積,相當于每秒15.4GOPS(包含乘和加)。 但一個(gè)MLP_Conv2D實(shí)例由60個(gè)并行運行的MLP構成,可以同時(shí)對60個(gè)輸入圖像進(jìn)行卷積,相當于924GOPS。 最后,將多達40個(gè)MLP_Conv2D實(shí)例化到單個(gè)器件中,每個(gè)實(shí)例都通過(guò)自己的NAP將數據傳輸到GDDR6存儲器,從而實(shí)現了組合高達37 TOPS的性能-相當于每秒處理28,8000張圖像(本設計主要針對卷積核)。

1587775867442282.png

圖3 并行40個(gè)MLP_Conv2D實(shí)例資源使用

MLP_Conv2D圍繞MLP和BRAM塊功能而設計,并使用它們各自的內部級聯(lián)走線(xiàn)。 同樣,NAP允許直接從外部存儲器路由數據互聯(lián)。這些功能可實(shí)現最小的附加邏輯或路由要求,利用率表如下:

1587775909341329.png

圖4 MLP_Conv2D框圖

數據流:?jiǎn)蝹€(gè)MLP

每個(gè)MLP都有一個(gè)鄰近的BRAM。 在此設計中BRAM用于存儲內核并將其多次傳遞到MLP。 初始化時(shí),將從輸入NAP中讀取不同的內核,并將其寫(xiě)入相應的BRAM。 BRAM在寫(xiě)側配置為72位,而讀取設置為144位。在操作期間,僅將96位用作內核權重,即讀取為4個(gè)權重×3層×8位。初始圖像數據從NAP讀取到輸入FIFO中,該輸入FIFO用于將圖像存儲為一系列行。盡管此輸入存儲器被列為FIFO,但仍可作為可重復讀取的FIFO,因為可以多次從中讀取行。該存儲器配置為144位寬,僅使用96位,由兩個(gè)BRAM72K組成。每個(gè)字由4個(gè)像素×3層×8位組成。初始化時(shí),將讀取足夠的行以匹配內核中的行數加上垂直跨步所需的行數。即

Initial Lines read = FILTER_HEIGHT + STRIDE

一旦加載了初始數據和內核,便開(kāi)始計算。

從輸入FIFO中讀取第一條圖像行,并讀取與內核水平大小匹配的圖像數據像素數量。在讀取這些像素時(shí),將讀取匹配的內核權重。MLP將這些96位流的每一個(gè)乘以12個(gè)int8值并累加結果。輸入FIFO前進(jìn)到第二行,重復此過(guò)程,直到內核的所有行都與輸入圖像左上角的適當像素相乘。在此過(guò)程中,MLP積累了結果;現在,該結果是圖像與內核卷積的左上角的2D卷積。該結果以16位結果的形式從MLP輸出。重復此過(guò)程,輸入FIFO跨行超前STRIDE參數設置的像素數(對于當前設計,STRIDE固定為4)。在每個(gè)處理周期包括在內時(shí),都會(huì )生成另一個(gè)結果,直到水平地獲取了適當數量的結果為止。

然后,將輸入FIFO下移STRIDE行數,然后重復該過(guò)程以生成輸入圖像中下一組線(xiàn)的卷積結果。當輸入FIFO向下移動(dòng)時(shí),不再需要FIFO中的初始行,因此與MLP計算并行時(shí),將加載下一組用于輸入圖像的STRIDE行??紤]外部存儲源的帶寬要求時(shí),可以看到映像和內核僅從內存中讀取一次。然后,它們可以從各自的BRAM中重新使用,從而減少了外部存儲器帶寬的總體負擔,其過(guò)程參考圖表1。

數據流:多個(gè)MLP

MLP的一個(gè)顯著(zhù)特點(diǎn)是能夠將數據和結果從一個(gè)MLP或BRAM級聯(lián)到同一列中。 MLP_Conv2D通過(guò)將MLP及其關(guān)聯(lián)的BRAM放在列組中來(lái)利用這些級聯(lián)路徑。在將BRAM加載到內核時(shí),級聯(lián)路徑用于將數據流水線(xiàn)傳輸到每個(gè)BRAM,并且使用BRAM塊地址模式選擇要寫(xiě)入內核的BRAM。

在計算過(guò)程中,輸入的圖像數據將在MLP的列中級聯(lián),以便每個(gè)MLP在其下一個(gè)鄰居之后的一個(gè)周期接收到圖像數據。同時(shí),控制內核讀取的BRAM讀取地址以一個(gè)周期的延遲級聯(lián)到BRAM列中。這樣,每個(gè)MLP在其先前的MLP之后一個(gè)周期接收相同的圖像數據和相同的內核讀取地址。每個(gè)MLP的計算差異在于,其關(guān)聯(lián)的BRAM將具有不同的內核數據。結果是一個(gè)圖像并行地與多個(gè)內核卷積。并行卷積的數量稱(chēng)為BATCH。

數據流:計算結果

如前所述,每個(gè)MLP為內核和圖像部分的每個(gè)卷積生成16位結果。

MLP排列在16列中,因此從該列中生成一個(gè)256位字,該字由該列中每個(gè)MLP的結果組成。然后將此256位字寫(xiě)入輸出NAP。 這種安排導致卷積結果作為同一圖像的圖層存儲在內存中;因此,當三層或RGB存儲在單個(gè)輸入字中時(shí),匹配輸入字排列。

然后,由于可以在完整的256位結果上的16個(gè)并行實(shí)例中執行激活功能,因此該安排允許將涉及的結果并行處理到激活層中。同樣,一旦256位結果通過(guò)輸出NAP寫(xiě)回到存儲器中,則可以將結果讀回到另一個(gè)2D卷積電路中。

1587776024309959.png

圖5 MLP_Conv2D布局示意圖

布局

在Speedster7t架構中,每個(gè)NAP對應32個(gè)MLP。該設計經(jīng)過(guò)優(yōu)化,可使用兩個(gè)NAP,一個(gè)用于讀取,一個(gè)用于寫(xiě)入,因此可以對應64個(gè)MLP。

但是,輸入和輸出FIFO需要兩個(gè)BRAM 72K存儲塊才能創(chuàng )建一個(gè)256位寬的組合存儲器。因此,這些存儲器將消耗64個(gè)可用位置中的四個(gè)用于數據I / O。

設計被安排為使用與兩個(gè)NAP相關(guān)聯(lián)的四列MLP。但是,第一列和最后一列都使用14個(gè)MLP,剩下兩個(gè)MLP位置分別用于輸入和輸出FIFO。中間兩列使用所有16個(gè)可用的MLP。在平面圖中,各列的排列方式是使第一列(底部具有輸入FIFO存儲器)與NAP相鄰,以改善時(shí)序。

下面顯示了一個(gè)實(shí)例,即使用了60個(gè)MLP(Batch=60)的設計實(shí)際布局圖(突出顯示了路線(xiàn)):

1587776041929850.png

圖6 60個(gè)MLP布局圖

在全芯片構建中使用40個(gè)實(shí)例時(shí),盡力使每個(gè)實(shí)例都使用NAP與內存進(jìn)行通信。結果,FMax仍能達到750MHz,并使用掉芯片中的所有80個(gè)NAP以及94%的MLP和BRAM72K。

1587776111732138.png

圖7 2400個(gè)MLP布局圖



關(guān)鍵詞: MLP FPGA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>