• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于ZYNQ的深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)加速平臺設(shè)計

      2022-12-26 12:54:50劉之禹王英鶴
      計算機測量與控制 2022年12期
      關(guān)鍵詞:編譯器算子運算

      劉之禹,李 述,王英鶴

      (1.哈爾濱理工大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,哈爾濱 150080;2.哈爾濱理工大學(xué) 電氣與電子工程學(xué)院, 哈爾濱 150080)

      0 引言

      當今時代人工智能技術(shù)發(fā)展迅速,深度學(xué)習(xí)也是其中的重點領(lǐng)域之一,尤其是卷積神經(jīng)網(wǎng)絡(luò)用途最廣泛,圖像分類,目標檢測等圖像處理技術(shù)都需要它[1]。隨著算法的不斷優(yōu)化,其網(wǎng)絡(luò)性能也在不斷提升,但其參數(shù)量也在大幅度增長,如VGG系列,殘差網(wǎng)絡(luò)系列,有的甚至可以達到幾億參數(shù),面對如此龐大的數(shù)據(jù)量就需要提升神經(jīng)網(wǎng)絡(luò)的推理速度[2]。深度神經(jīng)網(wǎng)絡(luò)的硬件部署情況各有優(yōu)劣,其在CPU上運行速度過慢,在GPU上運行雖然速度很快,但其功耗過高,并且價格昂貴,不適合部署在移動端設(shè)備上。而FPGA由于其高度并行性,可重構(gòu)性,功耗低,并且相對于專用集成電路成本低,因此可以較好地實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的加速[2]。但目前大部分研究人員設(shè)計的傳統(tǒng)的硬件加速器,一般只能針對某種特定的神經(jīng)網(wǎng)絡(luò)模型進行加速。目前各種神經(jīng)網(wǎng)絡(luò)算法迭代速度快,硬件設(shè)計卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)較難,周期長,容易跟不上算法的快速發(fā)展,并且當將不同的神經(jīng)網(wǎng)絡(luò)部署在不同的硬件設(shè)備上時,要進行適配,性能優(yōu)化,寫算子代碼等大量重復(fù)性工作,及其耗費時間人力,因此通用深度學(xué)習(xí)加速器應(yīng)運而生。例如中科院和寒武紀研究的Diannao系列芯片[4],谷歌的TPU,英偉達的NVDLA,都是性能不錯的通用型硬件加速芯片,可對多種神經(jīng)網(wǎng)絡(luò)進行部署加速。但在這些芯片在設(shè)計出來之后,還要解決如何讓不同的深度學(xué)習(xí)框架訓(xùn)練出來的網(wǎng)絡(luò)都能與該芯片兼容的難題,這就需要深度學(xué)習(xí)編譯器來解決,它可以作為神經(jīng)網(wǎng)絡(luò)模型與硬件之間的橋梁,當今應(yīng)用較多的深度學(xué)習(xí)編譯器框架有TVM,GLOW等[5]。

      本設(shè)計針對NVDLA的官方深度學(xué)習(xí)編譯器進行了優(yōu)化,采用了Tengine這一開源的AI推理框架來代替官方的編譯器,并且在軟硬協(xié)同的ZYNQ平臺上設(shè)計了一套完整的深度學(xué)習(xí)加速器平臺。

      1 NVDLA介紹

      NVDLA是英偉達官方于2017年發(fā)布的一款開源深度學(xué)習(xí)加速器[6],它可用于卷積神經(jīng)網(wǎng)絡(luò)的推理操作。它是一款高度可配置的CNN加速器框架,包含full,large,small版本,small版本規(guī)模最小,僅支持int8類型的運算,適合部署在嵌入式移動端設(shè)備上,并且可以在它上面部署不同的神經(jīng)網(wǎng)絡(luò)模型??傮w框架包含了軟件與硬件設(shè)計兩個部分,small的系統(tǒng)結(jié)構(gòu)如圖所示。CPU與CSB接口相連,負責(zé)配置NVDLA的內(nèi)部寄存器數(shù)據(jù)來完成所要運行的操作,IRQ接口為外部中斷接口,NVDLA會向CPU發(fā)送一些中斷信號。DBBIF接口與外部DRAM相連,負責(zé)從NVDLA中存入和取出輸入輸出數(shù)據(jù),CPU也與DRAM相連獲取操作指令數(shù)據(jù),NVDLA系統(tǒng)框架如圖1所示。

      圖1 small版本NVDLA系統(tǒng)框圖

      NVDLA內(nèi)部包含寄存器配置模塊,與CSB接口相連,卷積運算模塊,卷積緩沖運算模塊,數(shù)據(jù)點操作激活函數(shù)模塊(SDP),本地響應(yīng)規(guī)范化模塊(CDP),池化模塊(PDP),以及small版本不支持的重塑reshape模塊和橋接DMA模塊。其中每個模塊均與內(nèi)存接口模塊相連,每個模塊都有一個寄存器配置接口和一個數(shù)據(jù)傳送接口,圖2為NVDLA內(nèi)部數(shù)據(jù)流向模塊圖。數(shù)據(jù)從卷積模塊處開始輸入,一路送至CDP模塊,最后通過內(nèi)存接口輸出數(shù)據(jù)。

      圖2 small版本NVDLA內(nèi)部模塊

      NVDLA框架整體包含軟件與硬件兩個層次,硬件即NVDLA的電路邏輯單元結(jié)構(gòu),是進行CNN推理運算的主要部分,主要通過硬件部分的高度并行性來加速神經(jīng)網(wǎng)絡(luò)的大量數(shù)據(jù)運算,其中包含了卷積運算,激活函數(shù),池化,歸一化4種算子。軟件部分包括在CPU上運行的compiler與runtime兩部分,compiler即深度學(xué)習(xí)編譯器部分,負責(zé)接收由caffe訓(xùn)練的caffemodel模型,將其轉(zhuǎn)化為一種中間表示(IR)形式,一種計算圖表示結(jié)構(gòu),然后compiler再對該圖進行一些網(wǎng)絡(luò)結(jié)構(gòu)的圖優(yōu)化,再轉(zhuǎn)化為硬件層面上的抽象語法樹結(jié)構(gòu),最后生成硬件可以識別的文件格式,便于不同神經(jīng)網(wǎng)絡(luò)在硬件上部署。runtime部分又分為UMD和KMD兩個部分,UMD為用戶模式驅(qū)動程序,通過接受compiler生成的loadable文件并解析。然后發(fā)送給KMD,即內(nèi)核模式驅(qū)動程序,它接收到要進行推理的指定神經(jīng)網(wǎng)絡(luò)后,將硬件配置信息發(fā)送給硬件部分的配置寄存器,從存儲器中取數(shù)據(jù),執(zhí)行所配置的寄存器操作,開始運行卷積網(wǎng)絡(luò)并輸出結(jié)果,NVDLA軟件棧工作流程如圖3所示。

      圖3 軟件棧流程

      NVDLA硬件與軟件部分代碼完全開源,內(nèi)容規(guī)范完整,尤其是它的硬件架構(gòu)和軟件編譯器部分十分重要,為深度學(xué)習(xí)加速器的研究提供了極大的參考價值。

      2 深度學(xué)習(xí)加速器

      2.1 卷積運算特點

      隨著深度學(xué)習(xí)算法的不斷優(yōu)化,以及各種為了便攜式嵌入式設(shè)備而研究的輕量型深度神經(jīng)網(wǎng)絡(luò)的出現(xiàn),因此相應(yīng)的深度學(xué)習(xí)加速器也成為了研究人員展開研究的熱點。卷積神經(jīng)網(wǎng)絡(luò)更是深度神經(jīng)網(wǎng)絡(luò)中的主流方向,在深度學(xué)習(xí)加速器中,卷積相關(guān)的運算一般都占了一半以上的運行時間,絕大部分數(shù)據(jù)也都要進行卷積運算的過程,但卷積運算是十分規(guī)則的矩陣乘累加運算[7],并且其中涵蓋著大量的數(shù)據(jù)重用[1],可以針對CNN的卷積運算的一致性而專門針對卷積運算設(shè)計相應(yīng)的硬件電路結(jié)構(gòu)[8],因此可以用FPGA或ASIC這種并行度高的硬件電路來設(shè)計卷積運算框架,來加速卷積運算[7]。卷積運算分為直接卷積運算與快速卷積運算,本設(shè)計只針對直接卷積運算,即將一個卷積核在輸入圖像上按指定步長滑動,卷積核的參數(shù)與相應(yīng)位置的圖像進行乘累加運算得到輸出特征圖的一個像素點的值??焖倬矸e計算包括FFT和Winograd變換等方法[10],通過優(yōu)化卷積運算來減少耗費資源和功耗的乘法次數(shù)來提升卷積操作性能。卷積運算之后還會緊跟池化層也叫下采樣層可用于降維并將特征信息進行壓縮減小運算量,分為最大池化,最小池化,平均池化三重計算。然后有非線性層,它對卷積層或全連接層的輸出施加激活函數(shù)來為網(wǎng)絡(luò)引入非線性特征,來增強網(wǎng)絡(luò)的學(xué)習(xí)能力,如Relu,sigmoid函數(shù)等。一般最后有全連接層,每一層的神經(jīng)元都與下一層的每個神經(jīng)元相連,全連接層的參數(shù)量一般占了網(wǎng)絡(luò)中的大部分參數(shù),全連接層的輸出結(jié)果連接softmax函數(shù),其結(jié)果為分類結(jié)果,卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)[10]如圖4所示。

      圖4 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)

      式(1)為卷積神經(jīng)網(wǎng)絡(luò)計算的公式,O為輸出特征圖,I代表輸入特征圖,W為卷積核,b為偏置,C為卷積通道數(shù),F(xiàn)為卷積核的寬和高,S為指定的步長。

      O[n][x][y]=Relu(b[n]+

      (1)

      2.2 深度學(xué)習(xí)編譯器

      由于CNN算法框架的增多,如yolo,bert系列等,它們的網(wǎng)絡(luò)結(jié)構(gòu)不同,算子種類也不盡相同,算子組合方式多種多樣,并且應(yīng)用場景也隨之被不斷發(fā)掘。隨著各種嵌入式移動設(shè)備廣泛應(yīng)用,因此就需要將各種深度學(xué)習(xí)算法部署在各種硬件上[12],如CPU,GPU,F(xiàn)PGA,NPU(Neural Nework Unit)等。以前的方法是由人工針對各種網(wǎng)絡(luò)結(jié)構(gòu)去做優(yōu)化,寫出算子代碼,并且還要針對不同的硬件后端,還要去做優(yōu)化測試和適配,而這會帶來極大的工作量[13]。因此就要想辦法高效的將不同的神經(jīng)網(wǎng)絡(luò)可以用一種較為容易的方法去部署到不同的硬件上,讓它們之間形成一道通用的橋梁,因此深度學(xué)習(xí)編譯器就被提了出來[10]。

      廣義的編譯器技術(shù)在計算機中應(yīng)用廣泛,它是一種程序,將某種高級語言如Java,Go,Python等,轉(zhuǎn)換為一個中間表示,再把他翻譯成等價含義的另一種目標語言程序,一般為機器語言或低級語言。深度學(xué)習(xí)編譯器的過程與其類似,因為深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)本身抽象化之后就是一個有向圖結(jié)構(gòu),圖的每一個節(jié)點代表一個卷積計算過程,兩個節(jié)點之間包含著所對應(yīng)的數(shù)據(jù),因此深度學(xué)習(xí)編譯器主要是對計算圖相關(guān)的優(yōu)化,包括前端,后端[5]。編譯器前端先實現(xiàn)一個解析的功能,先接受由深度學(xué)習(xí)訓(xùn)練框架訓(xùn)練好的網(wǎng)絡(luò),再把它們轉(zhuǎn)換成一個中間的表示形式,構(gòu)建了一個有向計算圖的表示形式。再對該有向圖進行硬件無關(guān)的優(yōu)化,比如算子融合,層融合等優(yōu)化方法,可以將計算圖的結(jié)構(gòu)變的簡化一些,減少神經(jīng)網(wǎng)絡(luò)的推理運行時間。然后將優(yōu)化后的圖IR送給后端,后端與部署目標硬件關(guān)系十分緊密,負責(zé)基于特定硬件的優(yōu)化,如對硬件在運行推理操作時的數(shù)據(jù)存取,內(nèi)存管理,計算單元調(diào)度等操作做出一系列指定,生成針對目標硬件體系結(jié)構(gòu)的優(yōu)化代碼[11]。有時不同的硬件對應(yīng)著不同的體系結(jié)構(gòu),如嵌入式設(shè)備一般采用ARM體系結(jié)構(gòu)[14],主機采用X86架構(gòu),以及現(xiàn)如今發(fā)展最為火熱的RISC-V等[11],因此針對不同體系結(jié)構(gòu)的硬件后端,設(shè)計編譯器時也要有所區(qū)分。

      NVDLA的官方也發(fā)布了相應(yīng)的編譯器,它只能接受caffe訓(xùn)練的模型,tensorflow與caffe都是目前流行的深度學(xué)習(xí)框架,而caffe訓(xùn)練框架已逐漸被其余訓(xùn)練框架取代[15]。NVDLA官方的編譯器設(shè)計流程為,首先接受caffemodel后,通過解析器解析網(wǎng)絡(luò)模型結(jié)構(gòu),生成IR中間表示,然后構(gòu)建一個抽象語法樹,也就是一個跟硬件架構(gòu)無關(guān)的圖優(yōu)化結(jié)構(gòu),然后又根據(jù)硬件特點轉(zhuǎn)化成一個跟硬件相關(guān)的的抽象語法樹,該語法樹包含了硬件的寄存器配置和內(nèi)存分配信息,經(jīng)過轉(zhuǎn)化生成了一個針對硬件的圖優(yōu)化結(jié)構(gòu)。與硬件無關(guān)的抽象語法樹就是整個卷積神經(jīng)網(wǎng)絡(luò)各算子按順正常序連接的形式。

      2.3 Tengine深度學(xué)習(xí)推理框架的應(yīng)用

      Tengine是一個靈活,輕型的邊緣AI計算框架,并且開源免費,它能夠快速將深度學(xué)習(xí)前端模型部署到各種CPU,GPU,NPU平臺,也具有深度學(xué)習(xí)編譯器功能,可以進行模型轉(zhuǎn)換,模型量化,多種端側(cè)部署功能,可以高效地發(fā)揮端側(cè)不同芯片的異構(gòu)計算能力。它可以接收大部分訓(xùn)練框架如caffe,tensorflow等,通過序列化操作[5],轉(zhuǎn)換成抽象計算圖形式,然后再對其進行圖優(yōu)化操作,統(tǒng)一保存為一種tmfile格式的文件。如果有量化需求的話可以使用Tengine自帶量化工具進行int8的對稱和非對稱量化兩種量化形式,直接導(dǎo)入網(wǎng)絡(luò)模型和訓(xùn)練集即可完成量化。在后端進行部署時,Tengine有著獨特的自動切圖機制,可將支持NPU的算子在NPU上運行,不支持NPU的算子切到CPU或其他設(shè)備上去運行,這充分發(fā)揮了設(shè)備的異構(gòu)計算能力。對接后端時要注意,針對不同的后端設(shè)備,可以通過修改Tengine的接口函數(shù)文件,給硬件分配各節(jié)點和輸入數(shù)據(jù)的內(nèi)存以及切圖模式,將已經(jīng)轉(zhuǎn)換為Tengine的與硬件無關(guān)的計算圖變成與硬件相關(guān)的計算圖結(jié)構(gòu)。在不同的硬件后端上部署神經(jīng)網(wǎng)絡(luò)時,要添加該網(wǎng)絡(luò)對應(yīng)的算子,Tengine官方針對不同訓(xùn)練框架所對應(yīng)的算子與硬件相關(guān)的就是根據(jù)硬件架構(gòu)將每個算子映射到NVDLA的不同模塊上的各模塊連接方式。例如卷積模塊包含一個輸入與權(quán)重相乘的乘法模塊和其相乘結(jié)果與偏置相加的加法模塊,這樣一個卷積算子就映射到了兩個模塊上,接著生成針對NVDLA硬件的優(yōu)化代碼,最后生成loadable數(shù)據(jù)流文件。然后是進行runtime階段,負責(zé)硬件方面的配置和調(diào)度,它接收loadable文件,然后開始配置NVDLA的寄存器配置,內(nèi)存分配,處理終端等配置。官方的編譯器的缺點明顯,比如現(xiàn)如今tensorflow,pytorch等已成為主流訓(xùn)練框架,而它只能接受caffe訓(xùn)練的框架,其次量化方面必須要下載TensorRT,并且還要寫python代碼來進行操作,過程復(fù)雜。此外官方的支持的算子數(shù)量少,官方源碼難以修改去添加其他算子,而以上缺點采用Tengine推理框架可以得到較好的解決,官方編譯器的工作流程如圖5所示[5]。

      圖5 NVDLA官方的compiler流程

      大部分都已經(jīng)添加,因此可以直接從源碼文檔中尋找對應(yīng)算子自行添加。Tengine在執(zhí)行時,通過將待分類的圖像輸入給Tengine編譯好的可執(zhí)行分類程序,就可以輸出分類結(jié)果。Tengine系統(tǒng)框架如圖6所示。并且Tengine還提供了靈活的調(diào)試功能,它可以輸出每個節(jié)點的輸入輸出數(shù)據(jù),以及每個算子中的參數(shù)和設(shè)備運行算子的執(zhí)行時間,為調(diào)試后端硬件功能提供了極大便利。

      圖6 Tengine系統(tǒng)框架圖

      本設(shè)計采用Tengine編譯器代替官方的編譯工具,即在原來官方編譯流程中的通用抽象語法樹處插入Tengine的編譯器。在這之前仍然采用官方的編譯器去生成中間表示IR,然后在通用語法樹處接入Tengine編譯工具,這樣可以采用Tengine編譯器來對計算圖結(jié)構(gòu)進行切圖,圖優(yōu)化等操作,使NVDLA得到由Tengine優(yōu)化的結(jié)構(gòu),將原來生成loadable文件的過程去掉,直接將tmfile文件交給runtime部分。與后端設(shè)備對接時要實現(xiàn)以下幾個功能,首先要初始化數(shù)據(jù),為優(yōu)化的計算圖結(jié)構(gòu)開辟內(nèi)存,然后要把數(shù)據(jù)送入NVDLA,以及取出NVDLA的輸出數(shù)據(jù),最后,釋放空間內(nèi)存,要寫出以上函數(shù)來實現(xiàn)對接。Tengine代替原來編譯器流程的結(jié)構(gòu)如圖7所示[14]。

      圖7 Tengine框架編譯流程

      2.4 量化技術(shù)

      神經(jīng)網(wǎng)絡(luò)的參數(shù)量化技術(shù),目前也是壓縮神經(jīng)網(wǎng)絡(luò)的主流方法之一。神經(jīng)網(wǎng)絡(luò)訓(xùn)練時都是32位浮點數(shù),量化是指將參數(shù)量化成16位8位4位等低精度格式,目前主流量化方案是int8量化,這樣可以降低設(shè)備對于網(wǎng)絡(luò)模型的存儲壓力[16],大量減少了數(shù)據(jù)訪存次數(shù)和計算量同時降低了功耗[17]。并且也有研究表明,由于CNN對于噪聲不敏感,因此int8量化后的網(wǎng)絡(luò)與之前浮點32位的網(wǎng)絡(luò)精度相差無幾[18],并且硬件比較適合進行定點運算[19]。量化方案包含對稱量化與非對稱量化,對稱量化是將待量化數(shù)據(jù)絕對值的最大值映射到新數(shù)據(jù)范圍內(nèi)的最大值,非對稱量化是指將待量化數(shù)據(jù)的最大值和最小值映射到新范圍內(nèi)的最大值最小值,本設(shè)計針對對稱量化展開研究。

      量化的過程為先計算數(shù)據(jù)的最大最小值,計算出縮放因子scale,然后得到它的數(shù)據(jù)分布,最后對其進行數(shù)據(jù)截斷。Tengine的量化原理與TensorRT類似,采用一種反量化方法,即將輸入數(shù)據(jù)和權(quán)重進行int8量化,即把它們與scale相乘,偏置值不量化,然后輸入數(shù)據(jù)與權(quán)重相乘,之后再轉(zhuǎn)換成浮點32位,最后再與偏置值相加得到結(jié)果[20]。Tengine的量化工具經(jīng)過官方研究表明其效果好于大部分NPU自帶的量化工具。Tengine已經(jīng)根據(jù)量化原理設(shè)計好量化工具,在工具庫里可以找到,直接輸入要量化的tmfile格式的文件模型執(zhí)行量化程序來量化,量化時還需要加上訓(xùn)練集中的一部分數(shù)據(jù)來進行量化時的校準,使得量化結(jié)果更為準確。

      3 實驗結(jié)果與分析

      3.1 實驗環(huán)境介紹

      本實驗硬件平臺采用賽靈思的ZYNQ UltarSCALE+系列的ZCU104開發(fā)板搭載雙核ARM A53處理器,PC端使用vivado和petalinux開發(fā)軟件和pycharm軟件進行神經(jīng)網(wǎng)絡(luò)訓(xùn)練,采用tensorflow框架訓(xùn)練網(wǎng)絡(luò),PC端的中央處理器型號為i5-1035G1。

      使用mnist手寫數(shù)字訓(xùn)練集訓(xùn)練lenet-5網(wǎng)絡(luò)和cifar-10訓(xùn)練集訓(xùn)練resnet-18網(wǎng)絡(luò),將訓(xùn)練好的模型分別采用NVDLA官方的深度學(xué)習(xí)編譯器和Tengine的編譯器去將該模型轉(zhuǎn)化為NVDLA硬件可以接受的形式,在開發(fā)板上對測試集進行推理,最后分析實驗結(jié)果。

      3.2 NVDLA在FPGA上的映射

      官方發(fā)布的NVDLA是針對ASIC設(shè)計的,現(xiàn)要將其映射到FPGA上。首先要將NVDLA中的RAM結(jié)構(gòu)替換為FPGA上的BRAM資源,因為官方的代碼描述的RAM是RTL行為級的,直接映射到FPGA上的話,會使的FPGA上的查找表資源來實現(xiàn)RAM,會浪費大量資源。然后還要關(guān)閉門控時鐘,因為FPGA上的時鐘資源與ASIC不同,如果采用ASIC的門控時鐘行為,會導(dǎo)致保持時間違例[13]。

      圖8和圖9為NVDLA的寄存器配置部分仿真圖和數(shù)據(jù)傳輸接口部分仿真圖。NVDLA作為從機,與其進行數(shù)據(jù)交互的CPU作為主機。如圖8所示,當輸入信號valid與NVDLA的給出的輸出信號ready同時為高時,代表握手信號成功,write寫信號被拉高,寄存器地址和要寫入的數(shù)據(jù)發(fā)送給NVDLA。如圖9所示,當valid信號和ready信號同時為高時,數(shù)據(jù)寫入NVDLA的內(nèi)部存儲單元內(nèi)。

      圖8 NVDLA寄存器配置接口仿真圖

      圖9 NVDLA數(shù)據(jù)傳輸接口仿真圖

      例化NVDLA模塊后還需要將它與CPU相連,ZCU104上的ARM處理器可當作CPU使用。NVDLA的CSB接口上加一個CSB轉(zhuǎn)APB協(xié)議的轉(zhuǎn)接器模塊,并且想要與ARM通信只能采用AXI協(xié)議,因此要設(shè)計一個APB轉(zhuǎn)AXI的橋接模塊將NVDLA與ARM相連。還要將csb_clk與core_clk兩個時鐘短接,它們負責(zé)寄存器的讀寫最后得出,時鐘頻率定為100 Mhz,時序符合要求,F(xiàn)PGA的資源占用情況見表1。還要生成xsa文件,用于在 petalinux中定制操作系統(tǒng)。

      表1 資源使用情況

      與NVDLA的加速任務(wù),異步電路的存在使得vivado難以進行靜態(tài)時序分析,因此要把它轉(zhuǎn)換成同步時序電路。將各個模塊集成連線,設(shè)計成完整的SOC系統(tǒng),進行邏輯綜合布局布線,得到時序符合要求的設(shè)計,圖10為NVDLA總體電路結(jié)構(gòu)圖。

      圖10 NVDLA總體電路結(jié)構(gòu)圖

      3.3 網(wǎng)絡(luò)模型訓(xùn)練

      在pycharm軟件上采用tensorflow框架訓(xùn)練lenet-5和resnet-18兩個網(wǎng)絡(luò)。mnist手寫數(shù)字數(shù)據(jù)集訓(xùn)練集60 000張圖片,測試集10 000張圖片,cifar-10數(shù)據(jù)集訓(xùn)練集有50 000張圖片,測試集有10 000張圖片,resnet-18網(wǎng)絡(luò)比lenet-5復(fù)雜。訓(xùn)練模型的精確度如表2所示,均為32位浮點數(shù)形式,tensorflow訓(xùn)練模型輸出為pb格式文件。

      表2 PC端訓(xùn)練模型精確度

      3.4 開發(fā)板推理網(wǎng)絡(luò)模型對比

      為了在開發(fā)板上完整設(shè)計NVDLA平臺,還需要ZYNQ上移植一個ubuntu16.04的操作系統(tǒng),存放在SD卡上,插到開發(fā)板卡槽上,打開開發(fā)板啟動開關(guān)即可運行Linux系統(tǒng)。同時還要將由vivado生成的xsa文件導(dǎo)入petalinux軟件中,定制操作系統(tǒng)鏡像文件,將NVDLA設(shè)計增加到了系統(tǒng)的設(shè)備樹中,這樣就可以在Linux系統(tǒng)中使用NVDLA外設(shè)。整個平臺的架構(gòu)如圖11所示,通過鍵盤輸入Linux系統(tǒng)下的各種指令,在顯示屏上查看結(jié)果。

      圖11 系統(tǒng)架構(gòu)圖

      采用NVDLA官方編譯器與Tengine編譯器分別優(yōu)化轉(zhuǎn)換以上兩個網(wǎng)絡(luò),進行int8量化,將測試集的圖片輸入,分析它們的運行時間后再將兩個網(wǎng)絡(luò)在CPU上運行,得到數(shù)據(jù)分析對時間和準確率,然后并將它們對比,結(jié)果如表3所示。

      表3 不同方案數(shù)據(jù)對比

      如表3對比可知,由于lenet-5網(wǎng)絡(luò)簡單,因此使用不同編譯器的網(wǎng)絡(luò)優(yōu)化效果不明顯,對比使用CPU推理網(wǎng)絡(luò)有大約30%的加速效果。對于resnet-18網(wǎng)絡(luò),由于該網(wǎng)絡(luò)較為復(fù)雜,因此可以明顯看出采用Tengine的編譯器優(yōu)化結(jié)構(gòu)效果要好于采用官方編譯器,速度增加了約2.5倍,對比CPU增加了約3.7倍,并且功耗也比CPU低約6.5倍。

      表4 準確率對比 %

      量化后的測試集準確率如表4所示,由于采用官方編譯器與Tengine編譯器的量化方案不同,因此準確率會有一些差別,與表2中原來的32位浮點數(shù)形式的準確率對比,誤差在合理范圍之內(nèi)。

      4 結(jié)束語

      針對多種卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)硬件加速時,在不同硬件后端部署時遇到的效率低的問題,提出了采用Tengine這一深度學(xué)習(xí)推理框架的方案來解決該問題,在ZYNQ平臺上部署了完整流程的深度學(xué)習(xí)加速器。又對深度學(xué)習(xí)編譯器和NVDLA特性結(jié)構(gòu)進行研究,將Tengine這一框架應(yīng)用于NVDLA上,使用Tengine的編譯器來將CNN模型與NVDLA硬件部分對接。通過實驗在ZCU104開發(fā)板上搭建了NVDLA這一加速器平臺,實現(xiàn)了lenet-5和resnet-18兩個網(wǎng)絡(luò)的圖像分類任務(wù)。實驗結(jié)果表明使用Tengine工具鏈的深度學(xué)習(xí)加速器可以支持接受多種深度學(xué)習(xí)訓(xùn)練框架模型,并且其圖優(yōu)化結(jié)果要好于官方的深度學(xué)習(xí)編譯器,使得卷積神經(jīng)網(wǎng)絡(luò)推理速度更快,量化工具等其余功能使用起來也很方便,對于研究卷積神經(jīng)網(wǎng)絡(luò)的落地應(yīng)用有一定的研究意義。

      猜你喜歡
      編譯器算子運算
      重視運算與推理,解決數(shù)列求和題
      擬微分算子在Hp(ω)上的有界性
      各向異性次Laplace算子和擬p-次Laplace算子的Picone恒等式及其應(yīng)用
      有趣的運算
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設(shè)計
      一類Markov模算子半群與相應(yīng)的算子值Dirichlet型刻畫
      “整式的乘法與因式分解”知識歸納
      撥云去“誤”學(xué)乘除運算
      Roper-Suffridge延拓算子與Loewner鏈
      通用NC代碼編譯器的設(shè)計與實現(xiàn)
      湘潭县| 松潘县| 新巴尔虎左旗| 响水县| 井冈山市| 塔城市| 定西市| 河北区| 绍兴市| 湖北省| 康保县| 长海县| 济阳县| 白山市| 泗阳县| 吴江市| 获嘉县| 兴仁县| 海原县| 绥江县| 石屏县| 韶山市| 辽宁省| 德江县| 高要市| 上饶县| 泰顺县| 吴堡县| 旺苍县| 仪征市| 新竹县| 福鼎市| 长子县| 白朗县| 东阿县| 金湖县| 邵阳市| 上高县| 兴海县| 寿宁县| 梓潼县|