<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設(shè)計(jì)應(yīng)用 > PYNQ中實(shí)現(xiàn)SoftMax函數(shù)加速器

          PYNQ中實(shí)現(xiàn)SoftMax函數(shù)加速器

          作者:孫齊偉 時(shí)間:2019-05-29 來源:電子產(chǎn)品世界 收藏

            孫齊偉

          本文引用地址:http://www.ex-cimer.com/article/201905/401026.htm

           ?。ㄎ髂辖煌ù髮W(xué) 信息科學(xué)與技術(shù)學(xué)院,四川 成都 611756)

            摘要:函數(shù)通常在深度學(xué)習(xí)中作為激活函數(shù)使用,但其計(jì)算涉及自然指數(shù)和除法運(yùn)算,傳統(tǒng)PC機(jī)上計(jì)算較慢,拖累了一個神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。本文針對自然指數(shù)運(yùn)算的特點(diǎn),提出了一種名為基底拆分法的新方法。該方法將函數(shù)中自然指數(shù)計(jì)算拆分為多個由查找表實(shí)現(xiàn)的特定基底上,通過這種方法,一個復(fù)雜的自然指數(shù)計(jì)算過程即可由查找表過程和乘法過程實(shí)現(xiàn)。這種方法有效的降低了硬件復(fù)雜度以及邏輯傳播延時(shí)。由于該方法中使用了自定義的數(shù)據(jù)結(jié)構(gòu),因此本文采用了CPU + FPGA的架構(gòu),通過合理分工,加速函數(shù)計(jì)算。同時(shí),本文將基于這種方法設(shè)計(jì)的IP核在-Z2開發(fā)板上進(jìn)行了板級調(diào)試。

            關(guān)鍵詞:,,SoftMax,

            * 本作品獲得第二屆“全國大學(xué)生集成電路創(chuàng)新創(chuàng)業(yè)大賽”全國一等獎

            0 引言

            Xilinx推出的系列FPGA中嵌入了一顆雙核ARM,既能發(fā)揮FPGA的定制特性,也能發(fā)揮處理器的通用特性,而且兩個部分之間接口豐富、官方文檔齊全,可玩性極高。同時(shí)相應(yīng)的開發(fā)板也很多。傳統(tǒng)的開發(fā)板(Zedboard等)需要結(jié)合vivado和SDK兩大工具分別對PL、PS端進(jìn)行硬件和軟件開發(fā)。本次我介紹的平臺為開發(fā)板可使用Python將軟件操作和硬件控制進(jìn)行無縫銜接,目前已經(jīng)出到Z2版本,由依元素進(jìn)行代理銷售,999塊極具性價(jià)比。

          1.png

            PYNQ是Xilinx一項(xiàng)旨在使用Python和一些lib讓SoC開發(fā)更加簡單的開源項(xiàng)目,以我的理解其本質(zhì)是Python的一些第三方庫,是對PS端操作的封裝。傳統(tǒng)的ZYNQ開發(fā)板也能使其變?yōu)镻YNQ開發(fā)板,當(dāng)引入Python后就可以使用一些Python中強(qiáng)大的第三方庫了例如Numpy、Matplotlib等。

            1 SoftMax函數(shù)介紹及計(jì)算方案介紹

            SoftMax 函數(shù)是神經(jīng)網(wǎng)絡(luò)中的一種輸出層函數(shù),計(jì)算輸出層的值,主要用于神經(jīng)網(wǎng)絡(luò)最后一層。其表達(dá)式如下所示:

          2.png

            設(shè)計(jì)中的關(guān)鍵問題是 自然指數(shù)的計(jì)算 ,傳統(tǒng)的方案有:

           ?。?)查表法:同等規(guī)格定點(diǎn)數(shù)下精度極高,但若要在較大范圍上計(jì)算需要消耗大量資源。

           ?。?)CORDIC:利用迭代特性,資源復(fù)用,占用資源極小,常用于計(jì)算器中,但在大規(guī)模計(jì)算中需要進(jìn)行流水線化改造,且需要想辦法克服最大旋轉(zhuǎn)角度限制的問題。

           ?。?)泰勒級數(shù)展開:也即多項(xiàng)式擬合,該法較為靈活,多項(xiàng)式次數(shù)越高精度越高,劃分區(qū)間越細(xì)精度越高,是較為常用的方法。

            本文針對指數(shù)計(jì)算的特性,設(shè)計(jì)了一種原理簡單的計(jì)算方案,并且通過了板級測試。根據(jù)其計(jì)算特性稱其為基底查表法。

          1559616708925171.jpg

          1559616708645912.jpg

          5.png

            在十進(jìn)制中,若要計(jì)算3.68的自然指數(shù)我們可以通過公式(1)分別計(jì)算e3,e0.6,e0.08,所以可以事先將需要的自然指數(shù)值存在ROM表中,計(jì)算時(shí)將待計(jì)算數(shù)字通過基底拆分分別得到個位、十分位、百分位,并作為ROM的尋址地址,最后將查表得到的值進(jìn)行乘法操作即可得到最終結(jié)果。但數(shù)字電路中實(shí)現(xiàn)十進(jìn)制取整取余操作時(shí)較為復(fù)雜的,因此實(shí)際使用時(shí)對二進(jìn)制情況進(jìn)行了優(yōu)化。

            圖2為基于二進(jìn)制移位操作的基底拆分示意圖,待計(jì)算的16bit數(shù)據(jù),高三位表示的是小數(shù)點(diǎn)的位置信息,低十三位為數(shù)據(jù)位。經(jīng)過左移并按照人為設(shè)計(jì)的格式輸出即可還原數(shù)據(jù)。這種方法僅采用移位操作進(jìn)行基底劃分,因此硬件結(jié)構(gòu)簡單、傳播延時(shí)小。

            工程中設(shè)計(jì)的IP核內(nèi)部結(jié)構(gòu),見圖3。

            其中的關(guān)鍵流水線如圖4。

            大致原理就是如此,可以看出這種方法也是很靈活的,可以通過簡單地增加ROM和乘法器數(shù)量即可擴(kuò)大計(jì)算范圍,而且精度可以通過增減ROM表存儲的定點(diǎn)數(shù)位寬進(jìn)行改變,乘法器可以使用ZYNQ中的DSP資源來提高性能。本次設(shè)計(jì)的范圍針對[-10,10]。

            2 誤差結(jié)果

            測試時(shí)分別使用[-10,10],[-5,5]兩個區(qū)間中4096個點(diǎn)進(jìn)行誤差分析,大致過程如圖5。

            最后得到的絕對誤差圖,見圖6。

            誤差在10^-7數(shù)量級上,可以說是很小了。

            3 IP核接口介紹

            深度學(xué)習(xí)又被稱為煉丹,究其原因就是其訓(xùn)練速度較慢,因此考慮深度學(xué)習(xí)中的加速問題十分有意義。FPGA由于其定制特性,可以通過邏輯門電路十分高效的完成計(jì)算過程。

          1559616546480625.jpg

            本次我使用FPGA實(shí)現(xiàn)了一款A(yù)XI接口的激活函數(shù)softmax的加速器,并且通過PYNQ開發(fā)板對其進(jìn)行驗(yàn)證同時(shí)完成了精度測試。輸入輸出均為形式,內(nèi)部采用了一個AXI_S和一個AXI_M,其中,輸入AXI_S用于ARM端向ip核傳遞寫地址、讀地址、數(shù)據(jù)個數(shù)、輸出數(shù)據(jù)16/8bit切換,AXI_M完成對PS端DDR的讀寫操作,這樣設(shè)計(jì)的目的是為了最大化減小ARM端的工作量,使整個系統(tǒng)更加高效,因?yàn)锳XI_M可以主動的讀寫AXI_S并且AXI_S只能被動的被AXI_M進(jìn)行讀寫,這個過程設(shè)計(jì)好后無需ARM端干預(yù)。其結(jié)構(gòu)圖如圖7所示。

            因此涉及的操作為 GPIO口操作,AXI寫操作,DDR操作。這里原本設(shè)計(jì)采用ZYNQ上的AXI-HP端口,但是調(diào)試時(shí)發(fā)現(xiàn)該端口在數(shù)據(jù)格式配置為32 bit時(shí)仍采用的64bit數(shù)據(jù)位,估計(jì)是個bug,因此不得不換成AXI-GP端口了。

           ?。?)從ARM引出的兩個GPIO一個作為復(fù)位信號,另一個作為觸發(fā)信號

           ?。?)AXI_M接口,用于配置ip核的一些信息。

            4 任務(wù)劃分

            為了充分發(fā)揮ARM對通用任務(wù)的處理特性以及PL的定制特性,本次設(shè)計(jì)的系統(tǒng)中PS完成了讀取數(shù)據(jù)、數(shù)據(jù)的定點(diǎn)化和數(shù)據(jù)移動任務(wù),PL端利用其定制化特性完成計(jì)算的加速。整體結(jié)構(gòu)框圖如圖8。

            圖中的CPU即為ARM,工作時(shí)將模擬輸入的數(shù)據(jù)寫入DDR,并且完成定點(diǎn)化工作。圖中硬件即為PL端設(shè)計(jì)的加速器,其工作分為兩個階段,一是計(jì)算元素的自然指數(shù)值并對其進(jìn)行求和,二是利用第一個階段的自然指數(shù)值和和做除法求得每個元素的softmax值。

            5 PYNQ平臺的優(yōu)勢

            我的設(shè)計(jì)在曾在傳統(tǒng)的ZYNQ開發(fā)板上進(jìn)行過調(diào)試。設(shè)計(jì)好硬件后需要結(jié)合SDK工具對ARM核進(jìn)行C語言開發(fā),結(jié)果最后需要通過串口返回PC機(jī)進(jìn)行處理。

            在SDK中返回的數(shù)據(jù),返回的數(shù)據(jù)經(jīng)過上位機(jī)的處理才能得到想要的誤差數(shù)據(jù),較為繁瑣。

            但PYNQ不一樣,PYNQ上使用了Jupyter可以使用瀏覽器進(jìn)行在線Pyhthon編程,而且Python中numpy科學(xué)計(jì)算庫可以只使用3句話就實(shí)現(xiàn)softmax的高精度計(jì)算,結(jié)合pynq的相應(yīng)庫可以實(shí)現(xiàn)軟件處理和硬件控制的無縫銜接,PL端加載bit文件、PL端控制、軟件計(jì)算、matplotlib繪制均使用Python完成,最后的結(jié)果都可以在網(wǎng)頁中顯示出來,極其方便。

            圖中我使用了matplotlib庫將軟件計(jì)算結(jié)果與硬件計(jì)算結(jié)果進(jìn)行了絕對誤差計(jì)算,可直接在網(wǎng)頁中顯示出圖像,更加形象化。本次我的設(shè)計(jì)中,使用PYNQ完成了 從SD卡中讀入數(shù)據(jù),數(shù)據(jù)定點(diǎn)化,數(shù)據(jù)寫入DDR,控制PL端進(jìn)行加速計(jì)算,讀DDR,將軟件結(jié)果與硬件結(jié)果對比通過誤差散點(diǎn)圖來測試設(shè)計(jì)的IP核的精度。

            ZYNQ與PYNQ平臺的差異可通過對比兩個平臺的系統(tǒng)框圖得到

            可以看出,傳統(tǒng)ZYNQ通常為裸機(jī)開發(fā),而且PYNQ一般為在自身運(yùn)行的Ubuntu上進(jìn)行Python開發(fā),因此PYNQ相對而言上手簡單加上一些強(qiáng)大的第三方庫的支持使用起來也十分方便、有趣。

            6 PYNQ使用方法

            一些基礎(chǔ)操作可以參考官方Get Start我總結(jié)有如下步驟:

          1560412924331554.jpg

           ?。?)vivado中設(shè)計(jì)PL端的硬件結(jié)構(gòu)--PC操作,如圖13。

           ?。?)vivado導(dǎo)出設(shè)計(jì)tcl文件和bit文件--PC操作

            write_bd_tcl -force C:/Users/Administrator/Desktop/test.tcl

           ?。?)將tcl文件和bit文件放入PYNQ中--PC操作,如圖14。

            windows上運(yùn)行 \pynq 即可通過sdb功能連接PYNQ開發(fā)板,進(jìn)行文件移動

           ?。?)使用Overlay將bit文件進(jìn)行加載--PYNQPython操作

            overlay = Overlay('/home/xilinx/pynq/overlays/softmax/design_1.bit')

            至此設(shè)計(jì)就初始化在PL端,使用Python控制相應(yīng)外設(shè)即可。

            7 Python中相關(guān)lib的基本使用

            1.Overlay

            from pynq import Overlayov

            overlay = Overlay('/home/xilinx/pynq/overlays/softmax/design_1.bit')

            用于加載比特流文件至PL端

            2.GPIO

            from pynq import GPIO

            rst = GPIO(GPIO.get_gpio_pin(0), 'out')

            triggle = GPIO(GPIO.get_gpio_pin(1), 'out')

            triggle.write(1)

            rst.write(1)

            rst.write(0)

            rst.write(1)

            操作PS端的GPIO口,操作的是64bit的PS-PL端的EMIO

            3.Xlnk

            from pynq import Xlnk

            xlnk = Xlnk()

            buf = xlnk.cma_array(shape=(num,), dtype=np.uint32, cacheable=0)

            addr = buf.physical_address

            結(jié)合numpy在DDR中分配空間,用于PL端AXI_M使用其中physical_address可以得到DDR中的物理地址在分配空間時(shí),有個cacheable屬性,由于PS和PL端都要對DDR進(jìn)行操作,所以為了防止PS的cache導(dǎo)致讀到的數(shù)據(jù)未被更新,所以通常需要關(guān)閉緩存功能。

            4.AXI從端操作

            myip = overlay.axi_s_control_0

            myip.write(0x00,addr)

            myip.write(0x04,addr)

            myip.write(0x08,num)

            myip.write(0x0c,bool_16)

            myip.read(0x08)

            其中axi_s_control_0是我AXI_S的模塊名稱,這個是python從導(dǎo)出的原理圖tcl文件讀出的,因此需要保證tcl和bit文件的一致性,而且需要兩者同名

            注:這些信息都在上文提到的Get Start連接中可以找到,具體請參考官方的說明。

            8 結(jié)論

            此次借助“全國大學(xué)生集成電路創(chuàng)新創(chuàng)業(yè)大賽”契機(jī),我們分別在傳統(tǒng)ZYNQ和PYNQ平臺上完成了SoftMax函數(shù)的加速,獲得了比較好的效果。

            在傳統(tǒng)的ZYNQ平臺上開發(fā)SoC需要具備數(shù)字電路和ARM嵌入式開發(fā)知識,比較偏向于底層。反觀PYNQ平臺,利用Python這一優(yōu)美的語言對ZYNQ操作的封裝極大的降低了開發(fā)難度,同時(shí)結(jié)合Python強(qiáng)大的第三方庫,可玩性極高。

            當(dāng)今數(shù)字電路工程師僅僅掌握數(shù)字集成電路的知識是遠(yuǎn)遠(yuǎn)不夠的,項(xiàng)目開發(fā)更加需要復(fù)合型人才。我在項(xiàng)目中采用Verilog作為硬件開發(fā)語言,使用HLS做雛形開發(fā),同時(shí)使用Python及Matlab進(jìn)行建模及數(shù)據(jù)分析,使用的軟件工具有Xilinx的VIVADO、ISE,以及Synopsys的DC,ICC,Synplify??梢钥闯鰞H僅掌握一門技能是遠(yuǎn)遠(yuǎn)不夠支撐一個項(xiàng)目的。時(shí)代在進(jìn)步,科技在發(fā)展,因此數(shù)字IC工程師應(yīng)該保持住學(xué)習(xí)的狀態(tài),就比如說近幾年大火的深度學(xué)習(xí),十幾年前這個領(lǐng)域還是沒有人愿意去碰的,但現(xiàn)在該領(lǐng)域已經(jīng)讓很多停滯不前的方向又迎來新春。

            世界上還是存在很多機(jī)會的,但機(jī)會都是留給有準(zhǔn)備的人。

            附件:本文設(shè)計(jì)的softmax ip核在PYNQ運(yùn)行所需的所有文件https://pan.baidu.com/s/1OuaoS34nIp4Ci96gMCEmug 密碼:ifme

            本文來源于科技期刊《電子產(chǎn)品世界》2019年第6期第69頁,歡迎您寫論文時(shí)引用,并注明出處




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();