本發(fā)明涉及深度神經(jīng)網(wǎng)絡(luò)加速計算領(lǐng)域,特別涉及一種深度神經(jīng)網(wǎng)絡(luò)運算系統(tǒng)及方法。
背景技術(shù):
gpu通用計算技術(shù)發(fā)展已經(jīng)引起業(yè)界不少的關(guān)注,事實也證明在浮點運算、并行計算等部分計算方面,gpu可以提供數(shù)十倍乃至于上百倍于cpu的性能。gpu通用計算方面的標(biāo)準(zhǔn)目前有opencl(opencomputinglanguage,開放運算語言)、cuda(computeunifieddevicearchitecture)、atistream。其中,opencl是第一個面向異構(gòu)系統(tǒng)通用目的并行編程的開放式、免費標(biāo)準(zhǔn),也是一個統(tǒng)一的編程環(huán)境,便于軟件開發(fā)人員為高性能計算服務(wù)器、桌面計算系統(tǒng)、手持設(shè)備編寫高效輕便的代碼,而且廣泛適用于多核心處理器(cpu)、圖形處理器(gpu)、cell類型架構(gòu)以及數(shù)字信號處理器(dsp)等其他并行處理器,在游戲、娛樂、科研、醫(yī)療等各種領(lǐng)域都有廣闊的發(fā)展前景。
目前對深度神經(jīng)網(wǎng)絡(luò)的加速方法通常采用gpu加速方法,其高度優(yōu)化的計算庫cudnn及高性能的gpu并行處理架構(gòu),使得深度神經(jīng)網(wǎng)絡(luò)在gpu平臺上的加速性能十分優(yōu)越,但其高耗電量造成能耗比很低,也是極大的弊端。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種深度神經(jīng)網(wǎng)絡(luò)運算系統(tǒng)及方法,以降低耗電量,提高能耗比,降低運行成本。其具體方案如下:
一種深度神經(jīng)網(wǎng)絡(luò)運算系統(tǒng),包括:
cpu,用于接收目標(biāo)數(shù)據(jù),利用深度神經(jīng)網(wǎng)絡(luò)進行處理,得到深度神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù);
fpga,用于利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算所述輸入層數(shù)據(jù),得到計算結(jié)果。
可選的,所述fpga,包括:
gemm計算單元,用于利用激活函數(shù)所述輸入層數(shù)據(jù),得到所述計算結(jié)果;其中,
所述激活函數(shù)為:
式中,wij表示第一隱含層節(jié)點i和第二隱含層節(jié)點j之間的權(quán)值,bj表示第二隱含層節(jié)點j的閥值,xj表示第二隱含層節(jié)點j的輸出值。
可選的,所述fpga,包括:
并行運算單元,用于通過#pragaunrollx展開計算所述推算環(huán)節(jié),其中,x表示利用pcie帶寬數(shù)確定的展開層數(shù)。
本發(fā)明還公開了一種深度神經(jīng)網(wǎng)絡(luò)運算方法,包括:
接收目標(biāo)數(shù)據(jù),利用深度神經(jīng)網(wǎng)絡(luò)進行處理,得到深度神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù);
利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算所述輸入層數(shù)據(jù),得到計算結(jié)果。
可選的,所述利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算所述輸入層數(shù)據(jù),得到計算結(jié)果的過程,包括:
利用激活函數(shù)所述輸入層數(shù)據(jù)和并行運算程序執(zhí)行推算環(huán)節(jié),得到所述計算結(jié)果;其中,
所述激活函數(shù)為:
式中,wij表示第一隱含層節(jié)點i和第二隱含層節(jié)點j之間的權(quán)值,bj表示第二隱含層節(jié)點j的閥值,xj表示第二隱含層節(jié)點j的輸出值。
可選的,所述利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié)的過程,包括:
通過#pragaunrollx展開并行計算所述gemm計算節(jié)點,執(zhí)行所述推算環(huán)節(jié),其中,x表示利用pcie帶寬數(shù)確定的展開層數(shù)。
本發(fā)明中,深度神經(jīng)網(wǎng)絡(luò)運算系統(tǒng),包括:cpu,用于接收目標(biāo)數(shù)據(jù),利用深度神經(jīng)網(wǎng)絡(luò)進行處理,得到深度神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù);fpga,用于利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算輸入層數(shù)據(jù),得到計算結(jié)果。本發(fā)明通過將深度神經(jīng)網(wǎng)絡(luò)的gemm計算節(jié)點移植到fpga中,由cpu接收用戶輸入的目標(biāo)數(shù)據(jù),基于深度神經(jīng)網(wǎng)絡(luò)將目標(biāo)數(shù)據(jù)轉(zhuǎn)化為深度神經(jīng)網(wǎng)絡(luò)輸入層數(shù)據(jù),并發(fā)送至fpga,fpga利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算輸入層數(shù)據(jù),得到計算結(jié)果,完成運算,基于fpga的硬件特性,由fpga完成推算環(huán)節(jié),極大地降低了運算能耗,降低了運行成本。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種深度神經(jīng)網(wǎng)絡(luò)運算系統(tǒng)結(jié)構(gòu)示意圖;
圖2為本發(fā)明實施例公開的一種深度神經(jīng)網(wǎng)絡(luò)運算方法流程示意圖;
圖3為本發(fā)明實施例公開的一種深度神經(jīng)網(wǎng)絡(luò)gemm節(jié)點結(jié)構(gòu)示意圖;
圖4為本發(fā)明實施例公開的一種深度神經(jīng)網(wǎng)絡(luò)gemm節(jié)點輸出層結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種深度神經(jīng)網(wǎng)絡(luò)運算系統(tǒng),參見圖1所示,該系統(tǒng)包括:
cpu11,用于接收目標(biāo)數(shù)據(jù),利用深度神經(jīng)網(wǎng)絡(luò)進行處理,得到深度神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù)。
具體的,cpu11接收用戶輸入的目標(biāo)數(shù)據(jù),目標(biāo)數(shù)據(jù)的形式可以為一段代碼,或一個計算任務(wù),cpu11將目標(biāo)數(shù)據(jù)轉(zhuǎn)化為滿足深度神經(jīng)網(wǎng)絡(luò)輸入層的格式,并且輸入到輸入層,從而得到深度神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù),以便于后續(xù)深度神經(jīng)網(wǎng)絡(luò)的隱含層和輸出層對目標(biāo)數(shù)據(jù)進行處理,得到計算結(jié)果。
fpga12(fieldprogrammablegatearray,現(xiàn)場可編程門陣列),用于利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算輸入層數(shù)據(jù),得到計算結(jié)果。
具體的,fpga12是在pal、gal、cpld等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物,它是作為專用集成電路領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點,可以實現(xiàn)對深度神經(jīng)網(wǎng)絡(luò)快速的并行計算。
具體的,利用opencl語言將gemm算法移植到fpga12的kernel端,利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算輸入層數(shù)據(jù),得到計算結(jié)果。
本發(fā)明實施例中,fpga12,具體可以包括gemm計算單元和并行運算單元;其中,
gemm計算單元,用于利用激活函數(shù)輸入層數(shù)據(jù),得到計算結(jié)果;其中,
激活函數(shù)為:
式中,wij表示第一隱含層節(jié)點i和第二隱含層節(jié)點j之間的權(quán)值,bj表示第二隱含層節(jié)點j的閥值,xj表示第二隱含層節(jié)點j的輸出值。
其中,隱含層中各節(jié)點計算相對獨立,且均與上一層節(jié)點有關(guān),計算方法相同,均為gemm算法,每個節(jié)點的輸出值是根據(jù)上層所有節(jié)點的輸出值、當(dāng)前節(jié)點與上一層所有節(jié)點的權(quán)值和當(dāng)前節(jié)點的閥值還有激活函數(shù)計算得到的。
需要說明的是,隱含層可以根據(jù)用戶的計算要求進行設(shè)定,而不僅只局限于兩層。
并行運算單元,用于通過#pragaunrollx展開計算推算環(huán)節(jié),其中,x表示利用pcie帶寬數(shù)確定的展開層數(shù)。
具體的,fpga12接收cpu11處理得到的輸入層數(shù)據(jù),基于pcie帶寬數(shù),通過#pragaunrollx程序可以生成與pcie帶寬數(shù)相對應(yīng)的深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點數(shù),每個gemm計算節(jié)點利用激活函數(shù)輸入層數(shù)據(jù),并行運算,執(zhí)行推算環(huán)節(jié),得到計算結(jié)果。
其中,展開層數(shù),也可以在滿足pcie帶寬數(shù)最大限定范圍內(nèi),根據(jù)用戶實際應(yīng)用需求進行設(shè)定,例如,根據(jù)pcie帶寬數(shù)展開層數(shù)最多為20層,用戶可以設(shè)定展開層數(shù)為10層。
需要說明的是,由于fpga12硬件特性,fpga12的能耗量遠低于gpu,因此,將深度神經(jīng)網(wǎng)絡(luò)的gemm計算節(jié)點移植到fpga12中,通過fpga12執(zhí)行深度神經(jīng)網(wǎng)絡(luò)的計算環(huán)節(jié),能夠極大地降低能耗,從而降低運行成本。
可見,本發(fā)明實施例通過將深度神經(jīng)網(wǎng)絡(luò)的gemm計算節(jié)點移植到fpga12中,由cpu11接收用戶輸入的目標(biāo)數(shù)據(jù),基于深度神經(jīng)網(wǎng)絡(luò)將目標(biāo)數(shù)據(jù)轉(zhuǎn)化為深度神經(jīng)網(wǎng)絡(luò)輸入層數(shù)據(jù),并發(fā)送至fpga12,fpga12利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算輸入層數(shù)據(jù),得到計算結(jié)果,完成運算,基于fpga12的硬件特性,由fpga12完成推算環(huán)節(jié),極大地降低了運算能耗,降低了運行成本。
本發(fā)明實施例還公開了一種深度神經(jīng)網(wǎng)絡(luò)運算方法,參見圖2所示,該方法包括:
步驟s11:接收目標(biāo)數(shù)據(jù),利用深度神經(jīng)網(wǎng)絡(luò)進行處理,得到深度神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù);
步驟s12:利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算輸入層數(shù)據(jù),得到計算結(jié)果。
具體的,可以利用激活函數(shù)輸入層數(shù)據(jù)和并行運算程序執(zhí)行推算環(huán)節(jié),得到計算結(jié)果;其中,
激活函數(shù)為:
式中,wij表示第一隱含層節(jié)點i和第二隱含層節(jié)點j之間的權(quán)值,bj表示第二隱含層節(jié)點j的閥值,xj表示第二隱含層節(jié)點j的輸出值。
具體的,可以通過#pragaunrollx展開并行計算gemm計算節(jié)點,執(zhí)行推算環(huán)節(jié),其中,x表示利用pcie帶寬數(shù)確定的展開層數(shù)。
其中,在深度神經(jīng)網(wǎng)絡(luò)中,全連接層主要由gemm節(jié)點計算及分類器輸出計算。gemm節(jié)點計算由于深度神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)特性,其隱含層的同層節(jié)點間計算是相對獨立的,參見圖3所示,且在推算階段均且只與上層節(jié)點相關(guān),參見圖4所示。fpga在處理并行計算時優(yōu)勢明顯,其通過硬件特性實現(xiàn)數(shù)據(jù)并行處理能力。
可見,本發(fā)明實施例通過將深度神經(jīng)網(wǎng)絡(luò)的gemm計算節(jié)點移植到fpga中,由cpu接收用戶輸入的目標(biāo)數(shù)據(jù),基于深度神經(jīng)網(wǎng)絡(luò)將目標(biāo)數(shù)據(jù)轉(zhuǎn)化為深度神經(jīng)網(wǎng)絡(luò)輸入層數(shù)據(jù),并發(fā)送至fpga,fpga利用深度神經(jīng)網(wǎng)絡(luò)中的gemm計算節(jié)點和并行運算程序執(zhí)行推算環(huán)節(jié),計算輸入層數(shù)據(jù),得到計算結(jié)果,完成運算,基于fpga的硬件特性,由fpga完成推算環(huán)節(jié),極大地降低了運算能耗,降低了運行成本。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上對本發(fā)明所提供的一種深度神經(jīng)網(wǎng)絡(luò)運算系統(tǒng)及方法進行了詳細介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。