基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器:架構(gòu)、優(yōu)化與應(yīng)用_第1頁
基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器:架構(gòu)、優(yōu)化與應(yīng)用_第2頁
基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器:架構(gòu)、優(yōu)化與應(yīng)用_第3頁
基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器:架構(gòu)、優(yōu)化與應(yīng)用_第4頁
基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器:架構(gòu)、優(yōu)化與應(yīng)用_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器:架構(gòu)、優(yōu)化與應(yīng)用一、引言1.1研究背景與意義在當(dāng)今數(shù)字化時(shí)代,深度學(xué)習(xí)技術(shù)取得了舉世矚目的發(fā)展,尤其在計(jì)算機(jī)視覺、自然語言處理、語音識(shí)別等眾多領(lǐng)域展現(xiàn)出強(qiáng)大的能力。卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)作為深度學(xué)習(xí)的核心算法之一,在圖像分類、目標(biāo)檢測、語義分割等任務(wù)中取得了顯著成果,推動(dòng)了相關(guān)領(lǐng)域的巨大進(jìn)步。例如在圖像分類任務(wù)中,CNN模型能夠?qū)A康膱D像數(shù)據(jù)進(jìn)行特征提取和分類判斷,準(zhǔn)確率大幅超過傳統(tǒng)方法,使得圖像識(shí)別技術(shù)在安防監(jiān)控、醫(yī)療影像診斷等實(shí)際應(yīng)用中發(fā)揮關(guān)鍵作用;在目標(biāo)檢測方面,CNN可以快速準(zhǔn)確地識(shí)別出圖像或視頻中的各類目標(biāo)物體,并確定其位置,為自動(dòng)駕駛、智能交通等領(lǐng)域提供了重要的技術(shù)支持。然而,CNN的計(jì)算過程涉及大量的矩陣乘法和卷積運(yùn)算,對(duì)計(jì)算資源的需求極為龐大。隨著網(wǎng)絡(luò)模型規(guī)模的不斷增大和復(fù)雜度的持續(xù)提高,這種計(jì)算需求呈指數(shù)級(jí)增長。以AlexNet為例,它包含了約6000萬個(gè)參數(shù)和65萬個(gè)神經(jīng)元,在訓(xùn)練和推理過程中需要進(jìn)行海量的計(jì)算操作,這對(duì)硬件計(jì)算平臺(tái)提出了極高的要求。在實(shí)際應(yīng)用中,特別是在資源受限的設(shè)備(如移動(dòng)設(shè)備、嵌入式系統(tǒng)和邊緣計(jì)算設(shè)備)上,傳統(tǒng)的中央處理器(CPU)由于其串行計(jì)算的特性,難以滿足CNN快速處理數(shù)據(jù)的需求,導(dǎo)致計(jì)算效率低下,處理速度緩慢,無法實(shí)現(xiàn)實(shí)時(shí)響應(yīng);而圖形處理器(GPU)雖然具有強(qiáng)大的并行計(jì)算能力,但功耗較高,體積較大,成本也相對(duì)昂貴,在一些對(duì)功耗和成本敏感的場景中應(yīng)用受到限制。因此,如何提高CNN的計(jì)算效率,降低其對(duì)計(jì)算資源的需求,成為了深度學(xué)習(xí)領(lǐng)域亟待解決的關(guān)鍵問題?,F(xiàn)場可編程門陣列(FieldProgrammableGateArray,F(xiàn)PGA)作為一種可重構(gòu)的硬件設(shè)備,具有獨(dú)特的優(yōu)勢(shì),為加速CNN提供了新的解決方案。FPGA內(nèi)部包含大量的可編程邏輯單元、查找表和寄存器等資源,用戶可以根據(jù)具體的應(yīng)用需求對(duì)其進(jìn)行編程配置,實(shí)現(xiàn)特定的硬件邏輯功能。與CPU和GPU相比,F(xiàn)PGA具有更高的并行性和靈活性。它可以針對(duì)CNN的計(jì)算特點(diǎn),定制專門的硬件架構(gòu),實(shí)現(xiàn)卷積運(yùn)算和矩陣乘法的并行加速,從而顯著提高計(jì)算效率。同時(shí),F(xiàn)PGA還具有低功耗、實(shí)時(shí)性強(qiáng)的特點(diǎn),非常適合在資源受限的環(huán)境中應(yīng)用。例如,在智能安防監(jiān)控?cái)z像頭中,利用FPGA加速CNN算法,可以實(shí)時(shí)對(duì)監(jiān)控視頻進(jìn)行分析,快速檢測出異常情況并及時(shí)報(bào)警,同時(shí)降低設(shè)備的功耗,延長電池續(xù)航時(shí)間。為了進(jìn)一步降低CNN的計(jì)算量和存儲(chǔ)需求,低位寬量化技術(shù)應(yīng)運(yùn)而生。量化是指將神經(jīng)網(wǎng)絡(luò)中的浮點(diǎn)數(shù)參數(shù)和激活值轉(zhuǎn)換為低位寬的整數(shù)或定點(diǎn)數(shù)的過程。在傳統(tǒng)的CNN模型中,參數(shù)和激活值通常采用32位或64位的浮點(diǎn)數(shù)表示,這種高精度的表示方式雖然能夠保證模型的準(zhǔn)確性,但也帶來了巨大的計(jì)算量和存儲(chǔ)開銷。通過低位寬量化技術(shù),將參數(shù)和激活值量化為8位、4位甚至更低位寬的整數(shù)或定點(diǎn)數(shù),可以在一定程度上減少計(jì)算量和存儲(chǔ)需求。以8位量化為例,相比于32位浮點(diǎn)數(shù),數(shù)據(jù)存儲(chǔ)量可以減少為原來的四分之一,計(jì)算過程中的乘法和加法運(yùn)算也可以采用整數(shù)運(yùn)算,從而提高計(jì)算效率。雖然量化過程可能會(huì)導(dǎo)致一定的精度損失,但通過合理的量化策略和優(yōu)化方法,可以在可接受的精度損失范圍內(nèi),實(shí)現(xiàn)計(jì)算量和存儲(chǔ)需求的大幅降低,使CNN模型能夠在資源受限的設(shè)備上更加高效地運(yùn)行。綜上所述,基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器的研究具有重要的現(xiàn)實(shí)意義。它能夠充分發(fā)揮FPGA的硬件加速優(yōu)勢(shì)和低位寬量化技術(shù)的降計(jì)算量與存儲(chǔ)需求的特點(diǎn),為深度學(xué)習(xí)在資源受限環(huán)境下的廣泛應(yīng)用提供有力支持,推動(dòng)人工智能技術(shù)在更多領(lǐng)域的普及和發(fā)展。1.2國內(nèi)外研究現(xiàn)狀在基于FPGA的CNN加速器研究方面,國內(nèi)外學(xué)者和研究機(jī)構(gòu)取得了豐富的成果。國外的研究起步較早,在架構(gòu)設(shè)計(jì)和優(yōu)化方面進(jìn)行了深入探索。例如,Xilinx公司的研究團(tuán)隊(duì)提出了一系列基于FPGA的CNN加速器架構(gòu),通過對(duì)卷積運(yùn)算的并行化處理和數(shù)據(jù)通路的優(yōu)化設(shè)計(jì),顯著提高了計(jì)算效率。在其相關(guān)研究中,針對(duì)不同規(guī)模和復(fù)雜度的CNN模型,設(shè)計(jì)了靈活可配置的硬件架構(gòu),能夠根據(jù)模型的特點(diǎn)動(dòng)態(tài)調(diào)整計(jì)算資源的分配,實(shí)現(xiàn)了在多種應(yīng)用場景下的高效加速。如在圖像分類任務(wù)中,利用該架構(gòu)加速AlexNet模型,推理速度相較于傳統(tǒng)CPU有了數(shù)倍的提升,展示了FPGA在CNN加速領(lǐng)域的巨大潛力。國內(nèi)在這一領(lǐng)域也取得了顯著進(jìn)展。一些高校和科研機(jī)構(gòu)致力于結(jié)合國內(nèi)實(shí)際應(yīng)用需求,開展創(chuàng)新性研究。清華大學(xué)的研究團(tuán)隊(duì)提出了一種基于FPGA的稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu),針對(duì)CNN模型中存在的大量稀疏連接結(jié)構(gòu),通過設(shè)計(jì)專門的稀疏數(shù)據(jù)存儲(chǔ)和計(jì)算方式,有效減少了計(jì)算量和存儲(chǔ)需求,進(jìn)一步提高了加速器的能效比。在實(shí)際應(yīng)用中,該加速器在處理大規(guī)模圖像數(shù)據(jù)集時(shí),不僅能夠保持較高的分類準(zhǔn)確率,還能在低功耗條件下實(shí)現(xiàn)快速推理,為智能安防、移動(dòng)設(shè)備等領(lǐng)域的應(yīng)用提供了有力支持。在低位寬量化技術(shù)的研究上,國外的研究側(cè)重于探索量化算法的創(chuàng)新和優(yōu)化。谷歌的研究人員提出了一種新型的量化感知訓(xùn)練算法,在訓(xùn)練過程中考慮量化對(duì)模型參數(shù)和激活值的影響,通過調(diào)整訓(xùn)練策略,使得模型在低位寬量化后仍能保持較高的準(zhǔn)確性。在對(duì)ResNet模型進(jìn)行4位量化時(shí),采用該算法訓(xùn)練的模型在ImageNet數(shù)據(jù)集上的分類準(zhǔn)確率僅下降了2-3個(gè)百分點(diǎn),相比傳統(tǒng)量化方法有了明顯的提升,為低位寬量化技術(shù)在實(shí)際應(yīng)用中的推廣提供了更有效的方法。國內(nèi)的研究則更注重量化技術(shù)與硬件平臺(tái)的結(jié)合,以實(shí)現(xiàn)更好的性能優(yōu)化。中國科學(xué)院計(jì)算技術(shù)研究所的研究團(tuán)隊(duì)針對(duì)FPGA平臺(tái)的特點(diǎn),提出了一種自適應(yīng)低位寬量化方法。該方法能夠根據(jù)FPGA的資源使用情況和計(jì)算需求,動(dòng)態(tài)調(diào)整量化位寬,在保證模型準(zhǔn)確性的前提下,充分發(fā)揮FPGA的硬件優(yōu)勢(shì),提高計(jì)算效率。在基于FPGA實(shí)現(xiàn)的圖像目標(biāo)檢測系統(tǒng)中,采用該自適應(yīng)量化方法,使得系統(tǒng)在資源受限的情況下,仍能快速準(zhǔn)確地檢測出目標(biāo)物體,提升了系統(tǒng)的整體性能。然而,現(xiàn)有研究仍存在一些不足之處。在基于FPGA的CNN加速器方面,雖然已經(jīng)提出了多種架構(gòu),但部分架構(gòu)的通用性較差,難以適應(yīng)不同類型和規(guī)模的CNN模型,限制了其在更廣泛領(lǐng)域的應(yīng)用。此外,F(xiàn)PGA與外部存儲(chǔ)器之間的帶寬瓶頸問題仍然較為突出,導(dǎo)致數(shù)據(jù)傳輸效率較低,影響了加速器的整體性能。在低位寬量化技術(shù)方面,量化過程中的精度損失問題尚未得到完全解決,特別是在極低量化位寬(如2位、1位)下,模型性能下降較為明顯,如何在進(jìn)一步降低量化位寬的同時(shí)保持模型的準(zhǔn)確性,是亟待解決的關(guān)鍵問題。同時(shí),量化算法與硬件實(shí)現(xiàn)之間的協(xié)同優(yōu)化還不夠完善,需要進(jìn)一步加強(qiáng)兩者之間的結(jié)合,以充分發(fā)揮低位寬量化技術(shù)的優(yōu)勢(shì)。1.3研究目標(biāo)與內(nèi)容本研究的核心目標(biāo)是設(shè)計(jì)并實(shí)現(xiàn)一種高效的基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器,旨在充分發(fā)揮FPGA的硬件優(yōu)勢(shì),結(jié)合低位寬量化技術(shù),顯著提升卷積神經(jīng)網(wǎng)絡(luò)在計(jì)算效率、存儲(chǔ)需求和能耗等方面的性能,以滿足資源受限環(huán)境下對(duì)深度學(xué)習(xí)應(yīng)用的需求。具體研究內(nèi)容主要涵蓋以下三個(gè)方面:基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計(jì):深入研究FPGA的硬件結(jié)構(gòu)和資源特性,結(jié)合低位寬量化卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算特點(diǎn),設(shè)計(jì)專門的硬件架構(gòu)。通過對(duì)卷積運(yùn)算、矩陣乘法等核心操作進(jìn)行并行化設(shè)計(jì),優(yōu)化數(shù)據(jù)通路和存儲(chǔ)結(jié)構(gòu),提高計(jì)算資源的利用率,實(shí)現(xiàn)高效的硬件加速。同時(shí),開發(fā)相應(yīng)的硬件描述語言(HDL)代碼,完成加速器的硬件實(shí)現(xiàn),并對(duì)設(shè)計(jì)進(jìn)行功能驗(yàn)證和時(shí)序分析,確保其正確性和穩(wěn)定性。加速器性能評(píng)估與優(yōu)化:建立全面的性能評(píng)估指標(biāo)體系,包括計(jì)算效率、存儲(chǔ)需求、能耗、準(zhǔn)確率等,對(duì)設(shè)計(jì)實(shí)現(xiàn)的加速器進(jìn)行性能評(píng)估。通過實(shí)驗(yàn)測試,分析加速器在不同量化位寬、網(wǎng)絡(luò)模型和應(yīng)用場景下的性能表現(xiàn),找出性能瓶頸和存在的問題。針對(duì)這些問題,提出針對(duì)性的優(yōu)化策略,如進(jìn)一步優(yōu)化硬件架構(gòu)、改進(jìn)量化算法、優(yōu)化數(shù)據(jù)調(diào)度和存儲(chǔ)管理等,不斷提升加速器的性能。加速器在實(shí)際應(yīng)用中的驗(yàn)證:選擇具有代表性的實(shí)際應(yīng)用場景,如智能安防監(jiān)控、移動(dòng)設(shè)備圖像識(shí)別等,將設(shè)計(jì)優(yōu)化后的加速器應(yīng)用于其中,進(jìn)行實(shí)際應(yīng)用驗(yàn)證。通過實(shí)際運(yùn)行,評(píng)估加速器在真實(shí)環(huán)境下的性能和可靠性,驗(yàn)證其在實(shí)際應(yīng)用中的有效性和可行性。同時(shí),根據(jù)實(shí)際應(yīng)用的反饋,對(duì)加速器進(jìn)行進(jìn)一步的改進(jìn)和完善,使其更好地滿足實(shí)際應(yīng)用的需求。二、相關(guān)理論基礎(chǔ)2.1卷積神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)是一種專門為處理具有網(wǎng)格結(jié)構(gòu)數(shù)據(jù)(如圖像、音頻)而設(shè)計(jì)的深度學(xué)習(xí)模型,其基本結(jié)構(gòu)通常包含輸入層、卷積層、激活層、池化層、全連接層和輸出層。各層在網(wǎng)絡(luò)中承擔(dān)著不同的功能,協(xié)同工作以實(shí)現(xiàn)對(duì)輸入數(shù)據(jù)的特征提取和分類、回歸等任務(wù)。輸入層負(fù)責(zé)接收原始數(shù)據(jù),對(duì)于圖像數(shù)據(jù)而言,通常是包含像素值的矩陣,這些像素值代表了圖像的顏色、亮度等信息,是網(wǎng)絡(luò)后續(xù)處理的基礎(chǔ)。以一張常見的RGB彩色圖像為例,其輸入數(shù)據(jù)是一個(gè)三維張量,維度分別對(duì)應(yīng)圖像的高度、寬度以及顏色通道(一般為3,分別表示紅、綠、藍(lán)通道),如一張分辨率為224×224的RGB圖像,其輸入張量大小為224×224×3。卷積層是CNN的核心組成部分,通過卷積核在輸入特征圖上滑動(dòng)進(jìn)行卷積操作,實(shí)現(xiàn)對(duì)局部特征的提取。卷積核是一個(gè)小型的權(quán)重矩陣,其大小通常遠(yuǎn)小于輸入特征圖,常見的卷積核大小有3×3、5×5等。在卷積過程中,卷積核與輸入特征圖對(duì)應(yīng)位置的元素進(jìn)行乘法和累加運(yùn)算,得到輸出特征圖上的一個(gè)像素值。通過不斷滑動(dòng)卷積核,遍歷輸入特征圖的每一個(gè)位置,從而生成完整的輸出特征圖。卷積層具有參數(shù)共享和局部連接的特點(diǎn),參數(shù)共享意味著卷積核在不同位置進(jìn)行卷積操作時(shí)使用相同的權(quán)重,大大減少了網(wǎng)絡(luò)的參數(shù)數(shù)量,降低了計(jì)算量和模型的過擬合風(fēng)險(xiǎn);局部連接則使得卷積層能夠聚焦于輸入數(shù)據(jù)的局部區(qū)域,提取局部特征,同時(shí)由于圖像等數(shù)據(jù)具有局部相關(guān)性,這種局部連接的方式能夠有效地捕捉數(shù)據(jù)的空間結(jié)構(gòu)信息。例如,在一個(gè)簡單的圖像邊緣檢測任務(wù)中,一個(gè)3×3的卷積核可以通過設(shè)計(jì)合適的權(quán)重,對(duì)圖像中像素值的變化進(jìn)行敏感響應(yīng),從而提取出圖像的邊緣特征。激活層緊跟在卷積層之后,其作用是為網(wǎng)絡(luò)引入非線性因素。常見的激活函數(shù)有ReLU(RectifiedLinearUnit)函數(shù)、Sigmoid函數(shù)和Tanh函數(shù)等。ReLU函數(shù)因其計(jì)算簡單、能夠有效緩解梯度消失問題等優(yōu)點(diǎn),在CNN中被廣泛應(yīng)用。其數(shù)學(xué)表達(dá)式為f(x)=max(0,x),即當(dāng)輸入值大于0時(shí),輸出為輸入值本身;當(dāng)輸入值小于等于0時(shí),輸出為0。激活層通過對(duì)卷積層輸出的特征圖進(jìn)行非線性變換,使得網(wǎng)絡(luò)能夠?qū)W習(xí)到更復(fù)雜的特征表示,增強(qiáng)了模型的表達(dá)能力。例如,在一個(gè)多分類任務(wù)中,經(jīng)過激活層處理后的特征能夠更好地區(qū)分不同類別的數(shù)據(jù)特征,提高分類的準(zhǔn)確性。池化層主要用于對(duì)特征圖進(jìn)行下采樣,降低特征圖的分辨率,減少數(shù)據(jù)量和計(jì)算量,同時(shí)保留主要的特征信息。常見的池化操作有最大池化和平均池化。最大池化是在一個(gè)固定大小的池化窗口內(nèi)選擇最大值作為輸出,能夠突出顯著特征;平均池化則是計(jì)算池化窗口內(nèi)所有元素的平均值作為輸出,更注重整體特征的平均情況。例如,在2×2的最大池化操作中,將輸入特征圖劃分為一個(gè)個(gè)2×2的子區(qū)域,每個(gè)子區(qū)域中選擇最大的像素值作為輸出,得到下采樣后的特征圖,這樣可以在保留重要特征的同時(shí),有效地降低數(shù)據(jù)維度,加快計(jì)算速度。全連接層位于CNN的后端,將前面卷積層和池化層提取到的特征進(jìn)行匯總,實(shí)現(xiàn)對(duì)特征的綜合處理和分類判斷。全連接層的每個(gè)神經(jīng)元都與上一層的所有神經(jīng)元相連,通過權(quán)重矩陣進(jìn)行線性變換,將高維的特征向量映射為低維的輸出向量,輸出向量的維度通常對(duì)應(yīng)于分類任務(wù)中的類別數(shù)或回歸任務(wù)中的目標(biāo)值維度。例如,在一個(gè)手寫數(shù)字識(shí)別任務(wù)中,經(jīng)過前面各層處理后的特征向量,最終通過全連接層映射為一個(gè)長度為10的輸出向量,每個(gè)元素代表對(duì)應(yīng)數(shù)字類別的概率,通過Softmax函數(shù)進(jìn)行歸一化處理后,選擇概率最大的類別作為識(shí)別結(jié)果。輸出層根據(jù)具體的任務(wù)類型,采用不同的輸出方式和損失函數(shù)。在分類任務(wù)中,通常使用Softmax函數(shù)將全連接層的輸出轉(zhuǎn)換為各類別的概率分布,然后通過交叉熵?fù)p失函數(shù)來衡量預(yù)測結(jié)果與真實(shí)標(biāo)簽之間的差異,指導(dǎo)網(wǎng)絡(luò)的訓(xùn)練;在回歸任務(wù)中,輸出層直接輸出一個(gè)或多個(gè)連續(xù)的數(shù)值,通過均方誤差等損失函數(shù)來評(píng)估模型的預(yù)測準(zhǔn)確性。卷積層在CNN中起著至關(guān)重要的作用,是實(shí)現(xiàn)特征提取的核心環(huán)節(jié)。其計(jì)算過程涉及大量的乘法和加法運(yùn)算,計(jì)算復(fù)雜度較高。假設(shè)輸入特征圖的大小為H_{in}×W_{in}×C_{in},卷積核的大小為K×K×C_{in},輸出特征圖的大小為H_{out}×W_{out}×C_{out},步長為S,填充為P。則輸出特征圖的高度H_{out}=\frac{H_{in}-K+2P}{S}+1,寬度W_{out}=\frac{W_{in}-K+2P}{S}+1。在計(jì)算每個(gè)輸出像素值時(shí),需要進(jìn)行K×K×C_{in}次乘法和K×K×C_{in}-1次加法運(yùn)算。因此,整個(gè)卷積層的乘法計(jì)算量為H_{out}×W_{out}×C_{out}×K×K×C_{in},加法計(jì)算量也大致相同。以一個(gè)輸入特征圖大小為224×224×3,卷積核大小為3×3×3,輸出特征圖大小為112×112×64,步長為2,填充為1的卷積層為例,乘法計(jì)算量約為112×112×64×3×3×3\approx2.2×10^7次,如此龐大的計(jì)算量對(duì)硬件計(jì)算平臺(tái)提出了很高的要求,這也促使了對(duì)CNN加速技術(shù)的研究和發(fā)展。2.2FPGA技術(shù)FPGA是在可編程邏輯器件的基礎(chǔ)上發(fā)展而來的一種可重構(gòu)硬件設(shè)備,其內(nèi)部結(jié)構(gòu)主要包含可編程輸入輸出單元(IOB)、可編程邏輯單元(CLB)、數(shù)字時(shí)鐘管理模塊(DCM)、嵌入式塊RAM(BRAM)、布線資源以及底層內(nèi)嵌功能單元和內(nèi)嵌專用硬核等部分??删幊梯斎胼敵鰡卧荈PGA芯片與外界電路的接口,能夠根據(jù)不同的電氣特性對(duì)輸入輸出信號(hào)進(jìn)行驅(qū)動(dòng)和匹配,支持多種電氣標(biāo)準(zhǔn),如LVTTL、LVCMOS、PCI、LVDS、RSDS等,還可通過軟件配置調(diào)整驅(qū)動(dòng)電流大小、上下拉電阻等參數(shù),以適應(yīng)不同的應(yīng)用需求??删幊踢壿媶卧荈PGA實(shí)現(xiàn)邏輯功能的核心部分,一般基于查找表(LUT)和寄存器構(gòu)成。查找表本質(zhì)上是一個(gè)靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM),常見的4輸入LUT可視為一個(gè)具有4位地址線的16×1的RAM。當(dāng)利用原理圖或硬件描述語言設(shè)計(jì)邏輯電路時(shí),開發(fā)軟件會(huì)預(yù)先計(jì)算邏輯電路的所有可能結(jié)果,并將其寫入LUT。在FPGA工作時(shí),輸入信號(hào)相當(dāng)于地址,通過查找表獲取對(duì)應(yīng)地址的內(nèi)容并輸出,從而實(shí)現(xiàn)組合邏輯功能;寄存器則用于存儲(chǔ)狀態(tài)或臨時(shí)計(jì)算結(jié)果,在時(shí)鐘信號(hào)的控制下完成時(shí)序邏輯功能。例如,在實(shí)現(xiàn)一個(gè)簡單的加法器時(shí),可通過對(duì)LUT的配置,使其根據(jù)輸入的兩個(gè)操作數(shù)地址,輸出對(duì)應(yīng)的和值。數(shù)字時(shí)鐘管理模塊用于對(duì)時(shí)鐘信號(hào)進(jìn)行管理和處理,包括時(shí)鐘分頻、倍頻、相位調(diào)整等功能,能夠?yàn)镕PGA內(nèi)部的各個(gè)模塊提供穩(wěn)定、精確的時(shí)鐘信號(hào),確保各模塊在正確的時(shí)序下工作。例如,在一個(gè)高速數(shù)據(jù)處理系統(tǒng)中,DCM可將外部輸入的時(shí)鐘信號(hào)進(jìn)行分頻和相位調(diào)整,為不同速度的模塊提供合適的時(shí)鐘,保證數(shù)據(jù)的準(zhǔn)確傳輸和處理。嵌入式塊RAM是FPGA內(nèi)部的一種高速存儲(chǔ)資源,可用于存儲(chǔ)數(shù)據(jù)和程序代碼。它具有高速讀寫的特點(diǎn),能夠滿足一些對(duì)存儲(chǔ)速度要求較高的應(yīng)用場景。在CNN加速器中,BRAM可用于緩存卷積核、特征圖等數(shù)據(jù),減少對(duì)外部存儲(chǔ)器的訪問次數(shù),提高數(shù)據(jù)訪問速度。布線資源連接著FPGA內(nèi)部的所有單元,包括全局連線和局部連線。全局連線用于實(shí)現(xiàn)邏輯塊之間的遠(yuǎn)距離連接,如跨時(shí)鐘域連接;局部連線則負(fù)責(zé)鄰近邏輯塊之間的連接。通過編程開關(guān)控制布線資源的通斷,可靈活實(shí)現(xiàn)邏輯塊之間的連接,從而構(gòu)建出不同的電路拓?fù)浣Y(jié)構(gòu)。布線資源的合理使用對(duì)FPGA設(shè)計(jì)的性能和穩(wěn)定性至關(guān)重要,布局布線的質(zhì)量會(huì)直接影響設(shè)計(jì)的功能實(shí)現(xiàn)和運(yùn)行效率。底層內(nèi)嵌功能單元和內(nèi)嵌專用硬核是FPGA為了滿足特定應(yīng)用需求而集成的功能模塊。底層內(nèi)嵌功能單元通常包括鎖相環(huán)(PLL)、數(shù)字信號(hào)處理(DSP)等通用模塊,這些模塊可增強(qiáng)FPGA的功能,提高其在數(shù)字信號(hào)處理、通信等領(lǐng)域的應(yīng)用能力。例如,鎖相環(huán)可用于實(shí)現(xiàn)時(shí)鐘同步和頻率合成,在通信系統(tǒng)中,通過PLL可產(chǎn)生穩(wěn)定的載波信號(hào);數(shù)字信號(hào)處理模塊則可加速乘法、加法等運(yùn)算,在音頻處理、圖像壓縮等應(yīng)用中發(fā)揮重要作用。內(nèi)嵌專用硬核是指在FPGA芯片中以硬件形式實(shí)現(xiàn)的特定處理器核心或?qū)S糜布K,如一些FPGA芯片集成了ARM處理器硬核,用戶可直接利用這些硬核實(shí)現(xiàn)復(fù)雜的處理任務(wù),無需再通過邏輯資源構(gòu)建處理器,大大提高了系統(tǒng)的性能和處理能力。FPGA的工作原理基于可編程邏輯塊和可編程互連網(wǎng)絡(luò)。通過向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù),可確定邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的連接方式,進(jìn)而實(shí)現(xiàn)所需的電路功能。在設(shè)計(jì)過程中,工程師使用硬件描述語言(如Verilog、VHDL)對(duì)電路功能進(jìn)行描述,然后通過綜合工具將其轉(zhuǎn)換為門級(jí)網(wǎng)表,再利用布局布線工具將邏輯單元和布線資源進(jìn)行合理配置,最終生成可下載到FPGA中的編程文件。在運(yùn)行時(shí),F(xiàn)PGA根據(jù)加載的編程文件,通過查找表和寄存器實(shí)現(xiàn)相應(yīng)的邏輯功能,并利用布線資源完成信號(hào)的傳輸和模塊間的連接。在實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)加速方面,F(xiàn)PGA具有諸多優(yōu)勢(shì)。首先,F(xiàn)PGA具有高度的并行性。由于CNN的卷積運(yùn)算和矩陣乘法等操作具有天然的并行性,F(xiàn)PGA可通過合理配置邏輯單元,實(shí)現(xiàn)多個(gè)卷積核并行運(yùn)算,同時(shí)處理多個(gè)數(shù)據(jù)通道,大大提高計(jì)算效率。與CPU的串行計(jì)算方式相比,F(xiàn)PGA能夠在同一時(shí)間內(nèi)執(zhí)行更多的計(jì)算任務(wù),從而顯著縮短計(jì)算時(shí)間;與GPU相比,雖然GPU也具有強(qiáng)大的并行計(jì)算能力,但FPGA的并行性更加靈活,可根據(jù)具體的CNN模型結(jié)構(gòu)和計(jì)算需求進(jìn)行定制化配置,能夠更高效地利用硬件資源。例如,在處理一幅圖像時(shí),F(xiàn)PGA可將圖像劃分為多個(gè)子區(qū)域,同時(shí)使用多個(gè)卷積核對(duì)這些子區(qū)域進(jìn)行卷積操作,實(shí)現(xiàn)并行計(jì)算。其次,F(xiàn)PGA具有低功耗的特點(diǎn)。在資源受限的設(shè)備中,功耗是一個(gè)關(guān)鍵因素。與GPU相比,F(xiàn)PGA在完成相同計(jì)算任務(wù)時(shí)的功耗要低得多。這是因?yàn)镕PGA采用了可重構(gòu)的硬件架構(gòu),能夠根據(jù)實(shí)際需求動(dòng)態(tài)調(diào)整硬件資源的使用,避免了不必要的功耗浪費(fèi)。在一些對(duì)功耗要求嚴(yán)格的應(yīng)用場景,如移動(dòng)設(shè)備、物聯(lián)網(wǎng)設(shè)備等,使用FPGA加速CNN可以有效延長設(shè)備的電池續(xù)航時(shí)間,降低設(shè)備的散熱需求。再者,F(xiàn)PGA具有實(shí)時(shí)性強(qiáng)的優(yōu)勢(shì)。由于其能夠快速響應(yīng)輸入信號(hào)并進(jìn)行處理,在一些對(duì)實(shí)時(shí)性要求較高的應(yīng)用中,如視頻監(jiān)控、自動(dòng)駕駛等,F(xiàn)PGA能夠?qū)崟r(shí)對(duì)采集到的數(shù)據(jù)進(jìn)行處理和分析,及時(shí)做出決策。在自動(dòng)駕駛場景中,車輛需要實(shí)時(shí)對(duì)攝像頭采集到的圖像進(jìn)行分析,檢測道路、車輛和行人等目標(biāo),F(xiàn)PGA能夠快速完成CNN的推理計(jì)算,為車輛的決策提供及時(shí)準(zhǔn)確的信息。此外,F(xiàn)PGA還具有靈活性和可重構(gòu)性。用戶可根據(jù)不同的CNN模型和應(yīng)用需求,隨時(shí)對(duì)FPGA進(jìn)行重新編程和配置,實(shí)現(xiàn)不同的硬件邏輯功能。這種靈活性使得FPGA能夠適應(yīng)不斷發(fā)展的深度學(xué)習(xí)算法和多樣化的應(yīng)用場景,具有很強(qiáng)的通用性和擴(kuò)展性。當(dāng)出現(xiàn)新的CNN模型或?qū)ΜF(xiàn)有模型進(jìn)行改進(jìn)時(shí),只需對(duì)FPGA的編程文件進(jìn)行更新,即可快速實(shí)現(xiàn)新的功能,無需重新設(shè)計(jì)硬件電路。2.3低位寬量化技術(shù)低位寬量化技術(shù)是指將神經(jīng)網(wǎng)絡(luò)中原本以較高精度(如32位浮點(diǎn)數(shù))表示的參數(shù)和激活值,轉(zhuǎn)換為較低位寬(如8位、4位甚至更低)的整數(shù)或定點(diǎn)數(shù)來表示的過程。在傳統(tǒng)的深度學(xué)習(xí)框架中,神經(jīng)網(wǎng)絡(luò)的參數(shù)和激活值通常采用32位的單精度浮點(diǎn)數(shù)(float32)進(jìn)行存儲(chǔ)和計(jì)算,這種高精度表示方式能夠保證模型的準(zhǔn)確性和穩(wěn)定性,但也帶來了巨大的計(jì)算量和存儲(chǔ)開銷。隨著深度學(xué)習(xí)模型在資源受限設(shè)備(如移動(dòng)設(shè)備、嵌入式系統(tǒng)、物聯(lián)網(wǎng)終端等)上的應(yīng)用需求不斷增加,低位寬量化技術(shù)應(yīng)運(yùn)而生,旨在在一定程度上降低模型的計(jì)算復(fù)雜度和存儲(chǔ)需求,同時(shí)盡可能保持模型的性能。常見的量化方法主要包括均勻量化和非均勻量化。均勻量化是將原始數(shù)據(jù)的取值范圍均勻地劃分為若干個(gè)區(qū)間,每個(gè)區(qū)間對(duì)應(yīng)一個(gè)量化值。例如,對(duì)于8位量化,將數(shù)據(jù)范圍劃分為256個(gè)區(qū)間,每個(gè)區(qū)間的寬度相等。在實(shí)際操作中,首先確定數(shù)據(jù)的最大值和最小值,然后根據(jù)量化位寬計(jì)算量化步長。假設(shè)數(shù)據(jù)的最大值為x_{max},最小值為x_{min},量化位寬為b,則量化步長s=\frac{x_{max}-x_{min}}{2^b-1}。對(duì)于任意一個(gè)原始數(shù)據(jù)x,其量化值q可以通過公式q=clip(round(\frac{x}{s}),0,2^b-1)計(jì)算得到,其中clip函數(shù)用于將結(jié)果限制在量化值的有效范圍內(nèi),round函數(shù)用于對(duì)結(jié)果進(jìn)行四舍五入。這種量化方法簡單直觀,易于實(shí)現(xiàn),在許多實(shí)際應(yīng)用中被廣泛采用。例如在圖像識(shí)別任務(wù)中,對(duì)卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)和激活值進(jìn)行8位均勻量化,能夠有效減少存儲(chǔ)需求,同時(shí)在一定程度上保持模型的分類準(zhǔn)確率。非均勻量化則是根據(jù)數(shù)據(jù)的分布特性,對(duì)不同的數(shù)據(jù)區(qū)間采用不同的量化步長。對(duì)于數(shù)據(jù)分布較為密集的區(qū)間,采用較小的量化步長,以提高量化精度;對(duì)于數(shù)據(jù)分布較為稀疏的區(qū)間,采用較大的量化步長,以減少量化誤差。這種量化方法能夠更好地適應(yīng)數(shù)據(jù)的實(shí)際分布情況,在一些對(duì)精度要求較高的應(yīng)用中表現(xiàn)出更好的性能。以語音識(shí)別中的神經(jīng)網(wǎng)絡(luò)模型為例,由于語音信號(hào)的能量分布具有一定的特性,采用非均勻量化可以更準(zhǔn)確地表示語音信號(hào)的特征,從而提高語音識(shí)別的準(zhǔn)確率。量化對(duì)卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算和存儲(chǔ)產(chǎn)生了多方面的影響。在計(jì)算方面,量化后的整數(shù)運(yùn)算通常比浮點(diǎn)數(shù)運(yùn)算更加高效。以乘法運(yùn)算為例,在傳統(tǒng)的32位浮點(diǎn)數(shù)乘法中,需要進(jìn)行復(fù)雜的指數(shù)和尾數(shù)運(yùn)算,而量化為8位整數(shù)乘法后,運(yùn)算過程大大簡化,計(jì)算速度顯著提高。同時(shí),低位寬量化可以減少計(jì)算過程中的數(shù)據(jù)傳輸量,因?yàn)檩^低位寬的數(shù)據(jù)占用的存儲(chǔ)空間更小,在內(nèi)存和計(jì)算單元之間傳輸時(shí)所需的帶寬也更低。這對(duì)于一些帶寬受限的設(shè)備來說,能夠有效提高計(jì)算效率,減少數(shù)據(jù)傳輸?shù)难舆t。在存儲(chǔ)方面,低位寬量化能夠顯著降低模型的存儲(chǔ)需求。以32位浮點(diǎn)數(shù)表示的參數(shù)和激活值,量化為8位整數(shù)后,存儲(chǔ)量可以減少為原來的四分之一;量化為4位整數(shù)時(shí),存儲(chǔ)量更是減少為原來的八分之一。這使得模型能夠更方便地存儲(chǔ)在資源受限的設(shè)備中,同時(shí)也加快了模型的加載速度,提高了系統(tǒng)的響應(yīng)能力。然而,量化過程不可避免地會(huì)導(dǎo)致一定的精度損失。由于量化是一種近似表示,將連續(xù)的浮點(diǎn)數(shù)映射到有限個(gè)離散的量化值上,必然會(huì)引入量化誤差。這種誤差可能會(huì)對(duì)模型的性能產(chǎn)生負(fù)面影響,導(dǎo)致模型的準(zhǔn)確率下降。為了減少量化誤差的影響,研究人員提出了多種優(yōu)化策略。例如,在量化感知訓(xùn)練(QuantizationAwareTraining,QAT)中,在訓(xùn)練過程中模擬量化操作,使模型在訓(xùn)練階段就適應(yīng)量化帶來的誤差,從而提高模型在量化后的性能。通過在訓(xùn)練過程中對(duì)參數(shù)和激活值進(jìn)行偽量化操作,即在正向傳播時(shí)模擬量化過程,在反向傳播時(shí)采用直通估計(jì)(Straight-ThroughEstimator,STE)方法來近似計(jì)算梯度,使得模型能夠在訓(xùn)練過程中學(xué)習(xí)到更適合量化表示的參數(shù)。此外,還可以采用一些后處理方法,如模型微調(diào)、重訓(xùn)練等,進(jìn)一步優(yōu)化量化后的模型性能。在對(duì)模型進(jìn)行量化后,利用少量的樣本數(shù)據(jù)對(duì)模型進(jìn)行微調(diào),能夠在一定程度上恢復(fù)因量化而損失的精度,提高模型的準(zhǔn)確性。三、基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計(jì)3.1總體架構(gòu)設(shè)計(jì)3.1.1模塊化設(shè)計(jì)思路本設(shè)計(jì)采用模塊化的設(shè)計(jì)理念,將基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器劃分為多個(gè)功能明確的模塊,每個(gè)模塊負(fù)責(zé)特定的計(jì)算任務(wù),通過模塊間的協(xié)同工作實(shí)現(xiàn)高效的卷積神經(jīng)網(wǎng)絡(luò)加速。各模塊之間具有清晰的接口定義和數(shù)據(jù)傳輸規(guī)范,這種設(shè)計(jì)方式不僅提高了設(shè)計(jì)的可維護(hù)性和可擴(kuò)展性,還便于對(duì)各個(gè)模塊進(jìn)行單獨(dú)的優(yōu)化和調(diào)試。數(shù)據(jù)輸入模塊負(fù)責(zé)從外部存儲(chǔ)器或其他數(shù)據(jù)源讀取低位寬量化后的卷積神經(jīng)網(wǎng)絡(luò)參數(shù)(包括權(quán)重和偏置)以及輸入數(shù)據(jù)(如圖像特征圖),并對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,如數(shù)據(jù)格式轉(zhuǎn)換、歸一化等,以滿足后續(xù)模塊的計(jì)算需求。該模塊與外部存儲(chǔ)器之間通過高速接口進(jìn)行數(shù)據(jù)傳輸,確保數(shù)據(jù)讀取的高效性。例如,在圖像分類任務(wù)中,數(shù)據(jù)輸入模塊從DDR內(nèi)存中讀取量化后的圖像數(shù)據(jù),并將其轉(zhuǎn)換為適合加速器處理的格式,為后續(xù)的卷積計(jì)算提供數(shù)據(jù)支持。卷積計(jì)算模塊是加速器的核心模塊之一,承擔(dān)著卷積運(yùn)算的主要任務(wù)。它根據(jù)輸入的卷積核和特征圖,利用FPGA的并行計(jì)算資源,實(shí)現(xiàn)低位寬量化下的卷積操作。通過合理設(shè)計(jì)卷積計(jì)算單元的結(jié)構(gòu)和并行度,提高卷積運(yùn)算的速度和效率。該模塊采用了脈動(dòng)陣列(SystolicArray)結(jié)構(gòu),能夠?qū)崿F(xiàn)多個(gè)卷積核并行運(yùn)算,同時(shí)處理多個(gè)數(shù)據(jù)通道,顯著提高了卷積計(jì)算的吞吐量。在處理一個(gè)具有多個(gè)卷積核的卷積層時(shí),脈動(dòng)陣列結(jié)構(gòu)可以使多個(gè)卷積核同時(shí)對(duì)不同的數(shù)據(jù)區(qū)域進(jìn)行卷積操作,大大縮短了計(jì)算時(shí)間。激活函數(shù)計(jì)算模塊對(duì)卷積計(jì)算模塊輸出的結(jié)果應(yīng)用激活函數(shù),引入非線性因素,增強(qiáng)模型的表達(dá)能力。針對(duì)不同的激活函數(shù),如ReLU、Sigmoid等,設(shè)計(jì)相應(yīng)的硬件實(shí)現(xiàn)電路。由于低位寬量化下的計(jì)算精度有限,需要對(duì)激活函數(shù)的實(shí)現(xiàn)進(jìn)行優(yōu)化,以減少量化誤差對(duì)結(jié)果的影響。對(duì)于ReLU函數(shù),采用簡單的比較電路實(shí)現(xiàn),當(dāng)輸入值大于0時(shí),直接輸出輸入值;當(dāng)輸入值小于等于0時(shí),輸出0,這種實(shí)現(xiàn)方式簡單高效,且在低位寬量化下能夠保持較好的性能。池化計(jì)算模塊用于對(duì)激活函數(shù)計(jì)算模塊輸出的特征圖進(jìn)行池化操作,降低特征圖的分辨率,減少數(shù)據(jù)量和計(jì)算量,同時(shí)保留主要的特征信息。支持常見的最大池化和平均池化操作,根據(jù)不同的應(yīng)用需求進(jìn)行配置。在實(shí)現(xiàn)過程中,利用FPGA的并行處理能力,對(duì)池化窗口內(nèi)的元素進(jìn)行并行計(jì)算,提高池化操作的速度。在進(jìn)行2×2的最大池化時(shí),通過并行比較電路,同時(shí)比較池化窗口內(nèi)的四個(gè)元素,快速得到最大值,實(shí)現(xiàn)高效的池化操作。數(shù)據(jù)輸出模塊將經(jīng)過卷積、激活和池化等操作后的結(jié)果進(jìn)行整理和后處理,然后輸出給后續(xù)的應(yīng)用模塊或存儲(chǔ)設(shè)備。該模塊負(fù)責(zé)將計(jì)算結(jié)果轉(zhuǎn)換為合適的數(shù)據(jù)格式,并進(jìn)行必要的精度調(diào)整和數(shù)據(jù)對(duì)齊,以確保輸出結(jié)果的正確性和可用性。在圖像分類任務(wù)中,數(shù)據(jù)輸出模塊將最終的分類結(jié)果輸出給上位機(jī)進(jìn)行顯示或進(jìn)一步處理。這些模塊之間通過內(nèi)部總線進(jìn)行數(shù)據(jù)傳輸和通信,內(nèi)部總線采用AXI(AdvancedeXtensibleInterface)總線協(xié)議,具有高速、高效的數(shù)據(jù)傳輸能力,能夠滿足各模塊之間大量數(shù)據(jù)傳輸?shù)男枨蟆Mㄟ^合理規(guī)劃數(shù)據(jù)傳輸路徑和時(shí)序,確保數(shù)據(jù)在各模塊之間的順暢流動(dòng),避免數(shù)據(jù)傳輸瓶頸對(duì)加速器性能的影響。數(shù)據(jù)輸入模塊在讀取數(shù)據(jù)后,通過AXI總線將數(shù)據(jù)快速傳輸給卷積計(jì)算模塊;卷積計(jì)算模塊完成計(jì)算后,將結(jié)果通過AXI總線傳輸給激活函數(shù)計(jì)算模塊,以此類推,實(shí)現(xiàn)數(shù)據(jù)在各模塊之間的高效傳遞。各模塊之間還存在著控制信號(hào)的交互,控制模塊負(fù)責(zé)協(xié)調(diào)各模塊的工作流程,根據(jù)卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算需求,生成相應(yīng)的控制信號(hào),控制各模塊的啟動(dòng)、停止、數(shù)據(jù)傳輸?shù)炔僮?,確保整個(gè)加速器的正常運(yùn)行。3.1.2硬件架構(gòu)設(shè)計(jì)基于上述模塊化設(shè)計(jì)思路,本加速器的硬件架構(gòu)如圖1所示。該架構(gòu)主要由FPGA芯片、外部存儲(chǔ)器(如DDRSDRAM)、數(shù)據(jù)接口以及各個(gè)功能模塊組成。FPGA芯片作為核心處理單元,集成了所有的功能模塊,包括數(shù)據(jù)輸入模塊、卷積計(jì)算模塊、激活函數(shù)計(jì)算模塊、池化計(jì)算模塊和數(shù)據(jù)輸出模塊等。FPGA內(nèi)部的可編程邏輯資源被充分利用,實(shí)現(xiàn)各模塊的硬件邏輯功能。通過對(duì)FPGA的配置和編程,可以根據(jù)不同的卷積神經(jīng)網(wǎng)絡(luò)模型和應(yīng)用需求,靈活調(diào)整各模塊的參數(shù)和工作方式。外部存儲(chǔ)器用于存儲(chǔ)卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)和輸入輸出數(shù)據(jù)。在實(shí)際應(yīng)用中,由于卷積神經(jīng)網(wǎng)絡(luò)模型通常較大,參數(shù)和數(shù)據(jù)量較多,F(xiàn)PGA內(nèi)部的存儲(chǔ)資源無法滿足全部存儲(chǔ)需求,因此需要借助外部存儲(chǔ)器進(jìn)行數(shù)據(jù)存儲(chǔ)。DDRSDRAM具有大容量、高速讀寫的特點(diǎn),被廣泛應(yīng)用于存儲(chǔ)卷積神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)。在加速器工作時(shí),數(shù)據(jù)輸入模塊從DDRSDRAM中讀取量化后的權(quán)重、偏置和輸入特征圖數(shù)據(jù),經(jīng)過處理后傳遞給內(nèi)部的功能模塊進(jìn)行計(jì)算;計(jì)算結(jié)果在必要時(shí)也會(huì)存儲(chǔ)回DDRSDRAM,以便后續(xù)處理或輸出。數(shù)據(jù)接口負(fù)責(zé)實(shí)現(xiàn)FPGA與外部設(shè)備之間的數(shù)據(jù)交互,包括數(shù)據(jù)的輸入和輸出。常見的數(shù)據(jù)接口有以太網(wǎng)接口、USB接口等,這些接口能夠?qū)⑼獠吭O(shè)備采集到的數(shù)據(jù)傳輸?shù)紽PGA中進(jìn)行處理,同時(shí)將FPGA的計(jì)算結(jié)果傳輸給外部設(shè)備進(jìn)行顯示、存儲(chǔ)或進(jìn)一步分析。在智能安防監(jiān)控系統(tǒng)中,攝像頭通過以太網(wǎng)接口將采集到的視頻數(shù)據(jù)傳輸給FPGA加速器進(jìn)行實(shí)時(shí)分析,F(xiàn)PGA將分析結(jié)果通過以太網(wǎng)接口傳輸給監(jiān)控中心的服務(wù)器進(jìn)行存儲(chǔ)和顯示。各功能模塊在FPGA內(nèi)部的具體實(shí)現(xiàn)如下:數(shù)據(jù)輸入模塊:該模塊包含數(shù)據(jù)讀取單元、數(shù)據(jù)預(yù)處理單元和緩存單元。數(shù)據(jù)讀取單元通過AXI總線接口從外部存儲(chǔ)器讀取數(shù)據(jù),根據(jù)數(shù)據(jù)的類型和格式進(jìn)行解析和轉(zhuǎn)換;數(shù)據(jù)預(yù)處理單元對(duì)讀取的數(shù)據(jù)進(jìn)行歸一化、量化等預(yù)處理操作,使其符合后續(xù)計(jì)算模塊的要求;緩存單元用于暫存預(yù)處理后的數(shù)據(jù),以便后續(xù)模塊能夠及時(shí)獲取數(shù)據(jù)進(jìn)行計(jì)算。緩存單元采用FIFO(FirstInFirstOut)結(jié)構(gòu),能夠有效地協(xié)調(diào)數(shù)據(jù)的讀取和處理速度,避免數(shù)據(jù)丟失或沖突。卷積計(jì)算模塊:如前所述,采用脈動(dòng)陣列結(jié)構(gòu)實(shí)現(xiàn)高效的卷積計(jì)算。脈動(dòng)陣列由多個(gè)處理單元(ProcessingElement,PE)組成,每個(gè)PE負(fù)責(zé)完成一個(gè)基本的乘加運(yùn)算。這些PE按照一定的規(guī)則排列,形成一個(gè)陣列,數(shù)據(jù)在陣列中按照特定的路徑流動(dòng),實(shí)現(xiàn)并行計(jì)算。在脈動(dòng)陣列中,權(quán)重?cái)?shù)據(jù)和輸入特征圖數(shù)據(jù)從不同的方向流入陣列,經(jīng)過各個(gè)PE的處理后,最終在陣列的輸出端得到卷積計(jì)算結(jié)果。通過合理設(shè)計(jì)脈動(dòng)陣列的規(guī)模和數(shù)據(jù)流動(dòng)方式,可以充分利用FPGA的資源,提高卷積計(jì)算的效率。同時(shí),為了適應(yīng)低位寬量化的計(jì)算需求,對(duì)PE的硬件結(jié)構(gòu)進(jìn)行了優(yōu)化,采用低位寬的乘法器和加法器,減少計(jì)算資源的消耗。激活函數(shù)計(jì)算模塊:針對(duì)不同的激活函數(shù),設(shè)計(jì)了相應(yīng)的硬件電路。對(duì)于ReLU函數(shù),采用比較器和選擇器組成的簡單電路實(shí)現(xiàn)。將卷積計(jì)算模塊的輸出作為比較器的輸入,與0進(jìn)行比較,根據(jù)比較結(jié)果通過選擇器選擇輸出值。對(duì)于Sigmoid函數(shù),由于其計(jì)算較為復(fù)雜,采用查找表(LookupTable,LUT)結(jié)合線性插值的方法實(shí)現(xiàn)。預(yù)先在LUT中存儲(chǔ)Sigmoid函數(shù)在一些關(guān)鍵點(diǎn)的值,當(dāng)需要計(jì)算Sigmoid函數(shù)值時(shí),根據(jù)輸入值在LUT中查找相鄰的兩個(gè)關(guān)鍵點(diǎn),然后通過線性插值計(jì)算得到近似的Sigmoid函數(shù)值。這種方法在保證一定精度的前提下,大大減少了計(jì)算量和硬件資源的消耗。池化計(jì)算模塊:支持最大池化和平均池化兩種操作。以最大池化為例,實(shí)現(xiàn)電路由多個(gè)比較器和選擇器組成。在進(jìn)行池化操作時(shí),將輸入特征圖按照池化窗口的大小劃分為多個(gè)子區(qū)域,每個(gè)子區(qū)域內(nèi)的元素通過比較器進(jìn)行比較,選擇其中的最大值作為池化結(jié)果,通過選擇器輸出。平均池化的實(shí)現(xiàn)類似,只是將比較器替換為加法器和除法器,先對(duì)池化窗口內(nèi)的元素進(jìn)行求和,然后除以窗口內(nèi)元素的個(gè)數(shù)得到平均值作為池化結(jié)果。通過并行設(shè)計(jì)比較器和選擇器,能夠提高池化操作的速度,滿足實(shí)時(shí)計(jì)算的需求。數(shù)據(jù)輸出模塊:該模塊包含結(jié)果整理單元、數(shù)據(jù)格式轉(zhuǎn)換單元和輸出控制單元。結(jié)果整理單元對(duì)池化計(jì)算模塊輸出的結(jié)果進(jìn)行整理和合并,將多個(gè)通道的特征圖數(shù)據(jù)合并為一個(gè)輸出向量;數(shù)據(jù)格式轉(zhuǎn)換單元將整理后的結(jié)果轉(zhuǎn)換為外部設(shè)備能夠接收的數(shù)據(jù)格式,如二進(jìn)制、十進(jìn)制等;輸出控制單元負(fù)責(zé)控制數(shù)據(jù)的輸出時(shí)序和方式,通過AXI總線接口將結(jié)果輸出給外部設(shè)備或存儲(chǔ)到外部存儲(chǔ)器中。在加速器的工作流程中,首先數(shù)據(jù)輸入模塊從外部存儲(chǔ)器讀取低位寬量化后的卷積神經(jīng)網(wǎng)絡(luò)參數(shù)和輸入數(shù)據(jù),經(jīng)過預(yù)處理后將數(shù)據(jù)緩存起來;然后卷積計(jì)算模塊從緩存中讀取數(shù)據(jù),利用脈動(dòng)陣列結(jié)構(gòu)進(jìn)行卷積計(jì)算,將計(jì)算結(jié)果傳遞給激活函數(shù)計(jì)算模塊;激活函數(shù)計(jì)算模塊對(duì)卷積結(jié)果應(yīng)用激活函數(shù),得到非線性變換后的特征圖,再將其傳遞給池化計(jì)算模塊;池化計(jì)算模塊對(duì)特征圖進(jìn)行池化操作,降低數(shù)據(jù)維度,減少計(jì)算量;最后數(shù)據(jù)輸出模塊對(duì)池化結(jié)果進(jìn)行整理和格式轉(zhuǎn)換,將最終的計(jì)算結(jié)果輸出給外部設(shè)備或存儲(chǔ)到外部存儲(chǔ)器中。通過這樣的工作流程,實(shí)現(xiàn)了基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)的高效加速計(jì)算。3.2量化模塊設(shè)計(jì)3.2.1量化算法選擇在低位寬量化技術(shù)中,常見的量化算法包括均勻量化和非均勻量化,以及量化感知訓(xùn)練(QAT)算法等,每種算法都有其獨(dú)特的特點(diǎn)和適用場景。均勻量化是一種較為簡單直觀的量化方法。它將數(shù)據(jù)的取值范圍均勻地劃分為若干個(gè)區(qū)間,每個(gè)區(qū)間對(duì)應(yīng)一個(gè)量化值。其量化過程相對(duì)簡單,易于實(shí)現(xiàn)硬件加速。在FPGA實(shí)現(xiàn)中,通過簡單的移位和截?cái)嗖僮骷纯赏瓿闪炕?jì)算,硬件實(shí)現(xiàn)成本較低。然而,均勻量化的缺點(diǎn)是對(duì)數(shù)據(jù)分布的適應(yīng)性較差。當(dāng)數(shù)據(jù)分布不均勻時(shí),均勻量化可能會(huì)導(dǎo)致量化誤差較大,尤其是在數(shù)據(jù)分布稀疏的區(qū)域,量化后的精度損失較為明顯。在某些圖像數(shù)據(jù)中,像素值可能集中在某個(gè)較小的范圍內(nèi),而在其他區(qū)域分布稀疏,采用均勻量化可能無法準(zhǔn)確表示這些數(shù)據(jù),從而影響模型的性能。非均勻量化則根據(jù)數(shù)據(jù)的分布特性,對(duì)不同的數(shù)據(jù)區(qū)間采用不同的量化步長。對(duì)于數(shù)據(jù)分布較為密集的區(qū)間,采用較小的量化步長,以提高量化精度;對(duì)于數(shù)據(jù)分布較為稀疏的區(qū)間,采用較大的量化步長,以減少量化誤差。這種量化方法能夠更好地適應(yīng)數(shù)據(jù)的實(shí)際分布情況,在一些對(duì)精度要求較高的應(yīng)用中表現(xiàn)出更好的性能。在語音識(shí)別任務(wù)中,由于語音信號(hào)的能量分布具有一定的特性,采用非均勻量化可以更準(zhǔn)確地表示語音信號(hào)的特征,從而提高語音識(shí)別的準(zhǔn)確率。但非均勻量化的實(shí)現(xiàn)相對(duì)復(fù)雜,需要預(yù)先對(duì)數(shù)據(jù)分布進(jìn)行統(tǒng)計(jì)和分析,并且在硬件實(shí)現(xiàn)上需要更多的計(jì)算資源和邏輯電路來實(shí)現(xiàn)不同量化步長的計(jì)算和處理。量化感知訓(xùn)練(QAT)算法在訓(xùn)練過程中模擬量化操作,使模型在訓(xùn)練階段就適應(yīng)量化帶來的誤差,從而提高模型在量化后的性能。通過在訓(xùn)練過程中對(duì)參數(shù)和激活值進(jìn)行偽量化操作,即在正向傳播時(shí)模擬量化過程,在反向傳播時(shí)采用直通估計(jì)(STE)方法來近似計(jì)算梯度,使得模型能夠在訓(xùn)練過程中學(xué)習(xí)到更適合量化表示的參數(shù)。QAT算法能夠在一定程度上減少量化對(duì)模型精度的影響,特別是在低位寬量化時(shí),能夠保持模型的性能相對(duì)穩(wěn)定。然而,QAT算法的訓(xùn)練過程較為復(fù)雜,需要額外的計(jì)算資源和時(shí)間來進(jìn)行量化模擬和梯度計(jì)算,并且對(duì)訓(xùn)練算法和超參數(shù)的選擇較為敏感,需要進(jìn)行精細(xì)的調(diào)優(yōu)。綜合考慮本研究的需求和FPGA的硬件特性,選擇量化感知訓(xùn)練(QAT)算法作為本加速器的量化算法。主要原因如下:首先,本研究旨在實(shí)現(xiàn)高效的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器,對(duì)模型量化后的精度要求較高。QAT算法能夠在訓(xùn)練過程中使模型適應(yīng)量化誤差,有助于在低位寬量化下保持模型的準(zhǔn)確性,滿足本研究對(duì)精度的需求。其次,雖然QAT算法的訓(xùn)練過程相對(duì)復(fù)雜,但FPGA具有強(qiáng)大的并行計(jì)算能力和可重構(gòu)性,可以通過合理設(shè)計(jì)硬件架構(gòu),將量化模擬和梯度計(jì)算等操作并行化,在一定程度上彌補(bǔ)計(jì)算復(fù)雜度增加的問題。相比之下,均勻量化和非均勻量化在低位寬量化時(shí)難以有效控制精度損失,無法滿足本研究對(duì)高精度低位寬量化的要求。而且,本研究的重點(diǎn)在于設(shè)計(jì)基于FPGA的加速器,通過硬件優(yōu)化可以更好地支持QAT算法的實(shí)現(xiàn),充分發(fā)揮FPGA的硬件優(yōu)勢(shì),提高量化效果和計(jì)算效率。3.2.2量化參數(shù)確定在確定量化參數(shù)時(shí),主要考慮量化位寬、量化范圍和縮放因子等關(guān)鍵參數(shù)。量化位寬直接決定了量化后數(shù)據(jù)的表示精度和存儲(chǔ)空間。本研究通過實(shí)驗(yàn)分析不同量化位寬(如8位、4位、2位等)對(duì)卷積神經(jīng)網(wǎng)絡(luò)性能的影響,來確定最優(yōu)的量化位寬。在實(shí)驗(yàn)中,使用相同的卷積神經(jīng)網(wǎng)絡(luò)模型和訓(xùn)練數(shù)據(jù)集,分別對(duì)模型的參數(shù)和激活值進(jìn)行不同位寬的量化,并在測試集上評(píng)估模型的準(zhǔn)確率、召回率等性能指標(biāo)。通過對(duì)比不同量化位寬下的性能表現(xiàn),發(fā)現(xiàn)8位量化在計(jì)算效率和精度之間能夠取得較好的平衡。在一些圖像分類任務(wù)中,8位量化后的模型準(zhǔn)確率僅比全精度模型下降了2-3個(gè)百分點(diǎn),而計(jì)算量和存儲(chǔ)需求卻顯著降低,因此選擇8位作為主要的量化位寬。量化范圍是指量化前后數(shù)據(jù)的取值范圍。為了減少量化誤差,需要準(zhǔn)確確定數(shù)據(jù)的最大最小值,以此來確定量化范圍。對(duì)于卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)和激活值,分別統(tǒng)計(jì)其在訓(xùn)練過程中的最大最小值。在統(tǒng)計(jì)參數(shù)的最大最小值時(shí),遍歷訓(xùn)練集中的所有樣本,記錄每個(gè)參數(shù)在不同樣本上的取值,從而得到參數(shù)的最大最小值;對(duì)于激活值,同樣在訓(xùn)練過程中實(shí)時(shí)統(tǒng)計(jì)其在各層的最大最小值。根據(jù)統(tǒng)計(jì)得到的最大最小值,確定量化范圍,使得量化后的數(shù)值能夠盡可能準(zhǔn)確地表示原始數(shù)據(jù)。假設(shè)參數(shù)的最大值為x_{max},最小值為x_{min},則量化范圍為[x_{min},x_{max}]??s放因子用于將原始數(shù)據(jù)映射到量化范圍內(nèi)。根據(jù)量化位寬和量化范圍,可以計(jì)算出縮放因子。具體計(jì)算公式為:縮放因子s=\frac{x_{max}-x_{min}}{2^b-1},其中b為量化位寬。例如,當(dāng)量化位寬b=8時(shí),2^b-1=255,通過上述公式計(jì)算得到的縮放因子可以將原始數(shù)據(jù)映射到0-255的量化范圍內(nèi)。在實(shí)際計(jì)算過程中,對(duì)于任意一個(gè)原始數(shù)據(jù)x,其量化值q可以通過公式q=clip(round(\frac{x}{s}),0,2^b-1)計(jì)算得到,其中clip函數(shù)用于將結(jié)果限制在量化值的有效范圍內(nèi),round函數(shù)用于對(duì)結(jié)果進(jìn)行四舍五入。通過合理確定縮放因子,能夠保證量化后的數(shù)值在有效范圍內(nèi),并且盡可能準(zhǔn)確地反映原始數(shù)據(jù)的大小。此外,在確定量化參數(shù)時(shí),還考慮了不同層的特性。由于卷積神經(jīng)網(wǎng)絡(luò)的不同層對(duì)精度的要求和數(shù)據(jù)分布可能存在差異,因此對(duì)不同層采用不同的量化參數(shù)。對(duì)于靠近輸入層的卷積層,數(shù)據(jù)的動(dòng)態(tài)范圍較大,對(duì)量化誤差較為敏感,因此適當(dāng)增大量化范圍和采用相對(duì)較高的量化位寬;而對(duì)于靠近輸出層的全連接層,數(shù)據(jù)的動(dòng)態(tài)范圍相對(duì)較小,可以采用較小的量化范圍和較低的量化位寬。通過這種分層確定量化參數(shù)的方式,能夠在保證模型整體性能的前提下,進(jìn)一步優(yōu)化量化效果,提高計(jì)算效率和存儲(chǔ)利用率。3.3卷積計(jì)算模塊設(shè)計(jì)3.3.1卷積計(jì)算原理卷積計(jì)算是卷積神經(jīng)網(wǎng)絡(luò)中的核心運(yùn)算,其數(shù)學(xué)原理基于離散卷積的概念。在二維圖像數(shù)據(jù)的處理中,卷積運(yùn)算可以看作是一個(gè)卷積核在輸入特征圖上進(jìn)行滑動(dòng),通過對(duì)應(yīng)元素相乘并累加的方式,生成輸出特征圖的過程。假設(shè)輸入特征圖為I,其大小為H_{in}×W_{in}×C_{in},其中H_{in}表示高度,W_{in}表示寬度,C_{in}表示通道數(shù);卷積核為K,大小為K_{h}×K_{w}×C_{in},其中K_{h}和K_{w}分別為卷積核的高度和寬度;輸出特征圖為O,大小為H_{out}×W_{out}×C_{out},其中H_{out}和W_{out}分別為輸出特征圖的高度和寬度,C_{out}為輸出通道數(shù)。則卷積運(yùn)算的數(shù)學(xué)表達(dá)式為:O_{ij}^c=\sum_{m=0}^{K_{h}-1}\sum_{n=0}^{K_{w}-1}\sum_{d=0}^{C_{in}-1}I_{i+m,j+n}^d\timesK_{mn}^d+b^c其中,O_{ij}^c表示輸出特征圖O中第c個(gè)通道、第i行第j列的元素值;I_{i+m,j+n}^d表示輸入特征圖I中第d個(gè)通道、第i+m行第j+n列的元素值;K_{mn}^d表示卷積核K中第d個(gè)通道、第m行第n列的元素值;b^c為第c個(gè)通道對(duì)應(yīng)的偏置值。具體計(jì)算過程如下:首先,將卷積核放置在輸入特征圖的左上角位置,對(duì)應(yīng)元素相乘后進(jìn)行累加,得到輸出特征圖左上角位置的一個(gè)像素值。然后,按照設(shè)定的步長(Stride)在輸入特征圖上逐行逐列滑動(dòng)卷積核,重復(fù)上述相乘累加的操作,直至遍歷整個(gè)輸入特征圖,從而生成完整的輸出特征圖。在滑動(dòng)過程中,若步長為S,則卷積核每次移動(dòng)S個(gè)像素位置;若輸入特征圖的邊緣需要填充(Padding),則在輸入特征圖的邊緣補(bǔ)充相應(yīng)數(shù)量的像素(通常為0),以確保輸出特征圖的大小符合預(yù)期。例如,假設(shè)有一個(gè)3×3×3的輸入特征圖I,一個(gè)2×2×3的卷積核K,步長S=1,無填充(P=0)。計(jì)算輸出特征圖O的左上角元素O_{00}^0時(shí),將卷積核K的左上角與輸入特征圖I的左上角對(duì)齊,進(jìn)行如下計(jì)算:O_{00}^0=I_{00}^0\timesK_{00}^0+I_{01}^0\timesK_{01}^0+I_{10}^0\timesK_{10}^0+I_{11}^0\timesK_{11}^0+I_{00}^1\timesK_{00}^1+I_{01}^1\timesK_{01}^1+I_{10}^1\timesK_{10}^1+I_{11}^1\timesK_{11}^1+I_{00}^2\timesK_{00}^2+I_{01}^2\timesK_{01}^2+I_{10}^2\timesK_{10}^2+I_{11}^2\timesK_{11}^2+b^0計(jì)算完O_{00}^0后,卷積核向右移動(dòng)一個(gè)像素(步長為1),計(jì)算O_{01}^0,以此類推,直至生成整個(gè)輸出特征圖。通過這種卷積運(yùn)算,能夠提取輸入特征圖中的局部特征,為后續(xù)的神經(jīng)網(wǎng)絡(luò)處理提供有效的特征表示。3.3.2并行計(jì)算設(shè)計(jì)為了充分利用FPGA的并行特性實(shí)現(xiàn)卷積計(jì)算的并行化,本設(shè)計(jì)采用了脈動(dòng)陣列(SystolicArray)結(jié)構(gòu)。脈動(dòng)陣列是一種高度并行的計(jì)算結(jié)構(gòu),特別適合卷積計(jì)算這類具有大量重復(fù)乘加運(yùn)算的任務(wù)。在脈動(dòng)陣列中,數(shù)據(jù)按照特定的順序在各個(gè)處理單元(ProcessingElement,PE)之間流動(dòng),每個(gè)PE負(fù)責(zé)完成一個(gè)基本的乘加運(yùn)算。以二維脈動(dòng)陣列為例,假設(shè)輸入特征圖數(shù)據(jù)從脈動(dòng)陣列的一側(cè)流入,卷積核數(shù)據(jù)從另一側(cè)流入,兩者在PE中相遇并進(jìn)行乘加運(yùn)算,運(yùn)算結(jié)果則從陣列的輸出端流出。在一個(gè)4×4的脈動(dòng)陣列中,每一個(gè)小方格代表一個(gè)PE。輸入特征圖數(shù)據(jù)I從左側(cè)逐列流入,卷積核數(shù)據(jù)K從上方逐行流入。在每個(gè)時(shí)鐘周期,各個(gè)PE同時(shí)進(jìn)行乘加運(yùn)算,例如左上角的PE在第一個(gè)時(shí)鐘周期接收I_{00}和K_{00},計(jì)算I_{00}×K_{00};第二個(gè)時(shí)鐘周期,該P(yáng)E接收I_{10}和K_{01},并將上一周期的計(jì)算結(jié)果與I_{10}×K_{01}相加,同時(shí)下一個(gè)PE接收I_{01}和K_{00}進(jìn)行計(jì)算。通過這種方式,數(shù)據(jù)在脈動(dòng)陣列中像波浪一樣流動(dòng),實(shí)現(xiàn)了并行計(jì)算,大大提高了計(jì)算效率。為了進(jìn)一步提高并行度,本設(shè)計(jì)在多個(gè)維度上進(jìn)行了并行處理。在輸入特征圖的通道維度上,實(shí)現(xiàn)了多通道并行計(jì)算。由于卷積神經(jīng)網(wǎng)絡(luò)中的卷積層通常有多個(gè)輸入通道,通過將不同通道的數(shù)據(jù)同時(shí)輸入到脈動(dòng)陣列的不同部分,每個(gè)部分獨(dú)立進(jìn)行卷積計(jì)算,最后將結(jié)果合并,從而實(shí)現(xiàn)了輸入通道間的并行。假設(shè)卷積層有8個(gè)輸入通道,將脈動(dòng)陣列劃分為8個(gè)并行的子陣列,每個(gè)子陣列負(fù)責(zé)一個(gè)通道的卷積計(jì)算,這樣在同一時(shí)間內(nèi)可以處理8個(gè)通道的數(shù)據(jù),顯著提高了計(jì)算速度。在輸出特征圖的通道維度上,同樣實(shí)現(xiàn)了并行計(jì)算。對(duì)于具有多個(gè)輸出通道的卷積層,每個(gè)輸出通道的卷積計(jì)算可以獨(dú)立進(jìn)行。通過將脈動(dòng)陣列復(fù)制多個(gè),每個(gè)脈動(dòng)陣列對(duì)應(yīng)一個(gè)輸出通道,同時(shí)進(jìn)行不同輸出通道的卷積計(jì)算,實(shí)現(xiàn)了輸出通道間的并行。如果卷積層有16個(gè)輸出通道,設(shè)置16個(gè)并行的脈動(dòng)陣列,每個(gè)陣列計(jì)算一個(gè)輸出通道的結(jié)果,大大加快了整個(gè)卷積層的計(jì)算過程。在卷積核的維度上,也進(jìn)行了并行處理。對(duì)于包含多個(gè)卷積核的卷積層,將不同的卷積核分配到不同的脈動(dòng)陣列或脈動(dòng)陣列的不同部分,同時(shí)進(jìn)行多個(gè)卷積核的卷積計(jì)算,實(shí)現(xiàn)了卷積核間的并行。在一個(gè)具有32個(gè)卷積核的卷積層中,將脈動(dòng)陣列劃分為32個(gè)并行區(qū)域,每個(gè)區(qū)域處理一個(gè)卷積核的計(jì)算任務(wù),使得多個(gè)卷積核能夠同時(shí)對(duì)輸入特征圖進(jìn)行卷積操作,提高了計(jì)算效率。此外,在同一卷積核的計(jì)算過程中,還采用了流水線技術(shù)。將一個(gè)卷積核的卷積計(jì)算過程劃分為多個(gè)階段,每個(gè)階段由一個(gè)或多個(gè)PE完成,不同階段在不同的時(shí)鐘周期進(jìn)行,使得在同一時(shí)間內(nèi)可以有多個(gè)卷積核的不同計(jì)算階段同時(shí)進(jìn)行,進(jìn)一步提高了計(jì)算資源的利用率和計(jì)算速度。在一個(gè)3×3卷積核的計(jì)算中,將計(jì)算過程分為三個(gè)階段:第一階段計(jì)算卷積核的第一行與輸入特征圖對(duì)應(yīng)元素的乘積;第二階段將第一階段的結(jié)果與卷積核第二行與輸入特征圖對(duì)應(yīng)元素的乘積相加;第三階段將第二階段的結(jié)果與卷積核第三行與輸入特征圖對(duì)應(yīng)元素的乘積相加,得到最終結(jié)果。通過流水線技術(shù),在第一個(gè)卷積核進(jìn)行第三階段計(jì)算時(shí),第二個(gè)卷積核可以同時(shí)進(jìn)行第一階段計(jì)算,提高了計(jì)算效率。通過上述多維度的并行計(jì)算設(shè)計(jì),充分發(fā)揮了FPGA的并行特性,實(shí)現(xiàn)了高效的卷積計(jì)算并行化,大大提高了基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器的計(jì)算性能。3.4數(shù)據(jù)存儲(chǔ)與傳輸模塊設(shè)計(jì)3.4.1存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)為了提高數(shù)據(jù)存儲(chǔ)效率,本加速器采用了多層次的存儲(chǔ)結(jié)構(gòu)。在FPGA內(nèi)部,利用嵌入式塊RAM(BRAM)作為高速緩存,用于存儲(chǔ)卷積核、輸入特征圖和中間計(jì)算結(jié)果等頻繁訪問的數(shù)據(jù)。BRAM具有高速讀寫的特性,能夠顯著提高數(shù)據(jù)訪問速度,減少計(jì)算過程中的等待時(shí)間。對(duì)于一個(gè)具有多個(gè)卷積層的卷積神經(jīng)網(wǎng)絡(luò),在進(jìn)行某一層的卷積計(jì)算時(shí),將該層所需的卷積核和輸入特征圖預(yù)先存儲(chǔ)在BRAM中,當(dāng)卷積計(jì)算模塊需要數(shù)據(jù)時(shí),可以直接從BRAM中快速讀取,避免了頻繁訪問外部存儲(chǔ)器帶來的延遲。同時(shí),為了進(jìn)一步優(yōu)化存儲(chǔ)布局,采用了分塊存儲(chǔ)和緩存替換策略。將卷積核和特征圖按照一定的塊大小進(jìn)行劃分,分別存儲(chǔ)在BRAM的不同區(qū)域。在緩存替換方面,采用最近最少使用(LeastRecentlyUsed,LRU)算法。當(dāng)BRAM中的緩存空間已滿,需要存儲(chǔ)新的數(shù)據(jù)時(shí),根據(jù)LRU算法,將最近最少使用的數(shù)據(jù)塊替換出去。在處理一系列圖像的卷積計(jì)算時(shí),隨著計(jì)算的進(jìn)行,BRAM中的緩存會(huì)不斷更新,通過LRU算法,能夠確保當(dāng)前最常使用的數(shù)據(jù)塊始終保留在緩存中,提高緩存的命中率,減少對(duì)外部存儲(chǔ)器的訪問次數(shù)。對(duì)于大規(guī)模的數(shù)據(jù)存儲(chǔ),如整個(gè)卷積神經(jīng)網(wǎng)絡(luò)模型的參數(shù)和大量的輸入輸出數(shù)據(jù),采用外部存儲(chǔ)器DDRSDRAM。DDRSDRAM具有大容量的特點(diǎn),能夠滿足卷積神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)存儲(chǔ)容量的需求。在存儲(chǔ)時(shí),對(duì)數(shù)據(jù)進(jìn)行合理的組織和管理,將不同層的參數(shù)和數(shù)據(jù)按照一定的規(guī)則存儲(chǔ)在DDRSDRAM的不同地址空間,便于快速查找和讀取。將卷積層的權(quán)重存儲(chǔ)在DDRSDRAM的一個(gè)連續(xù)地址區(qū)域,將偏置存儲(chǔ)在另一個(gè)區(qū)域,這樣在數(shù)據(jù)讀取時(shí),可以通過地址計(jì)算快速定位到所需的數(shù)據(jù),提高數(shù)據(jù)讀取效率。為了提高DDRSDRAM的訪問效率,采用了多Bank并行訪問技術(shù)。DDRSDRAM通常包含多個(gè)Bank,通過合理地分配數(shù)據(jù)存儲(chǔ)位置,使得不同Bank可以同時(shí)進(jìn)行數(shù)據(jù)讀寫操作,從而提高數(shù)據(jù)訪問的并行度。在讀取卷積核數(shù)據(jù)時(shí),將不同通道的卷積核數(shù)據(jù)分別存儲(chǔ)在不同的Bank中,當(dāng)需要讀取這些數(shù)據(jù)時(shí),多個(gè)Bank可以同時(shí)進(jìn)行讀取操作,加快數(shù)據(jù)讀取速度。通過這種多層次的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì),結(jié)合合理的存儲(chǔ)布局和緩存替換策略,以及多Bank并行訪問技術(shù),有效地提高了數(shù)據(jù)存儲(chǔ)效率,為基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器的高效運(yùn)行提供了有力支持。3.4.2數(shù)據(jù)傳輸優(yōu)化在數(shù)據(jù)傳輸方面,為了減少傳輸延遲,采用了以下優(yōu)化方法。首先,在FPGA與外部存儲(chǔ)器之間的數(shù)據(jù)傳輸接口上,采用高速的AXI總線協(xié)議。AXI總線具有高效的數(shù)據(jù)傳輸能力,支持突發(fā)傳輸模式,能夠一次傳輸多個(gè)數(shù)據(jù),減少數(shù)據(jù)傳輸?shù)拈_銷。在從DDRSDRAM讀取卷積核數(shù)據(jù)時(shí),利用AXI總線的突發(fā)傳輸模式,一次讀取多個(gè)卷積核數(shù)據(jù),而不是逐個(gè)讀取,大大提高了數(shù)據(jù)傳輸速度。其次,采用數(shù)據(jù)預(yù)取技術(shù)。根據(jù)卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算流程和數(shù)據(jù)依賴關(guān)系,提前預(yù)測下一個(gè)計(jì)算階段所需的數(shù)據(jù),并將其從外部存儲(chǔ)器預(yù)取到FPGA內(nèi)部的緩存中。在進(jìn)行某一層的卷積計(jì)算時(shí),提前預(yù)測下一層卷積計(jì)算所需的卷積核和輸入特征圖數(shù)據(jù),在當(dāng)前層計(jì)算的同時(shí),將下一層的數(shù)據(jù)從DDRSDRAM預(yù)取到BRAM緩存中。這樣,當(dāng)進(jìn)行下一層計(jì)算時(shí),所需的數(shù)據(jù)已經(jīng)在緩存中,可以直接讀取使用,減少了等待數(shù)據(jù)傳輸?shù)臅r(shí)間,提高了計(jì)算效率。再者,為了優(yōu)化數(shù)據(jù)在FPGA內(nèi)部各模塊之間的傳輸,采用了基于FIFO的異步數(shù)據(jù)傳輸方式。在數(shù)據(jù)輸入模塊、卷積計(jì)算模塊、激活函數(shù)計(jì)算模塊、池化計(jì)算模塊和數(shù)據(jù)輸出模塊之間,通過FIFO進(jìn)行數(shù)據(jù)緩沖和傳輸。FIFO具有先進(jìn)先出的特性,能夠有效地解決不同模塊之間數(shù)據(jù)傳輸速率不一致的問題。數(shù)據(jù)輸入模塊以較快的速度從外部存儲(chǔ)器讀取數(shù)據(jù)并寫入FIFO,卷積計(jì)算模塊則以自己的處理速度從FIFO中讀取數(shù)據(jù)進(jìn)行計(jì)算,通過FIFO的緩沖作用,避免了數(shù)據(jù)丟失和傳輸沖突,保證了數(shù)據(jù)在各模塊之間的穩(wěn)定傳輸。此外,還對(duì)數(shù)據(jù)傳輸進(jìn)行了流水線設(shè)計(jì)。將數(shù)據(jù)傳輸過程劃分為多個(gè)階段,每個(gè)階段在不同的時(shí)鐘周期進(jìn)行,使得在同一時(shí)間內(nèi)可以有多個(gè)數(shù)據(jù)傳輸操作同時(shí)進(jìn)行,提高了數(shù)據(jù)傳輸?shù)男?。在?shù)據(jù)從外部存儲(chǔ)器傳輸?shù)紽PGA內(nèi)部的過程中,將數(shù)據(jù)讀取、數(shù)據(jù)格式轉(zhuǎn)換、數(shù)據(jù)緩存等操作劃分為不同的流水線階段,在第一個(gè)數(shù)據(jù)進(jìn)行緩存操作時(shí),第二個(gè)數(shù)據(jù)可以同時(shí)進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,第三個(gè)數(shù)據(jù)進(jìn)行讀取操作,通過流水線設(shè)計(jì),提高了數(shù)據(jù)傳輸?shù)牟⑿行?,減少了數(shù)據(jù)傳輸?shù)难舆t。通過以上數(shù)據(jù)傳輸優(yōu)化方法,有效地減少了數(shù)據(jù)傳輸延遲,提高了基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器的數(shù)據(jù)傳輸效率,從而提升了加速器的整體性能。四、加速器性能優(yōu)化策略4.1資源優(yōu)化4.1.1流水線設(shè)計(jì)流水線設(shè)計(jì)是一種將復(fù)雜計(jì)算任務(wù)分解為多個(gè)順序執(zhí)行的階段,每個(gè)階段在不同的時(shí)鐘周期內(nèi)并行處理不同任務(wù)的技術(shù)。其原理類似于工業(yè)生產(chǎn)中的裝配線,通過分工協(xié)作提高整體生產(chǎn)效率。在基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器中,流水線設(shè)計(jì)被廣泛應(yīng)用于卷積計(jì)算、激活函數(shù)計(jì)算和池化計(jì)算等關(guān)鍵模塊,以提高資源利用率和計(jì)算效率。以卷積計(jì)算模塊為例,將卷積計(jì)算過程劃分為多個(gè)流水線階段。在第一個(gè)階段,從外部存儲(chǔ)器或內(nèi)部緩存中讀取卷積核和輸入特征圖數(shù)據(jù);第二個(gè)階段,對(duì)讀取的數(shù)據(jù)進(jìn)行預(yù)處理,如數(shù)據(jù)格式轉(zhuǎn)換、量化等;第三個(gè)階段,進(jìn)行乘加運(yùn)算,實(shí)現(xiàn)卷積操作;最后一個(gè)階段,對(duì)卷積結(jié)果進(jìn)行后處理,如累加、偏置添加等。在每個(gè)時(shí)鐘周期,不同的任務(wù)處于不同的流水線階段,例如,當(dāng)?shù)谝粋€(gè)卷積計(jì)算任務(wù)處于乘加運(yùn)算階段時(shí),第二個(gè)卷積計(jì)算任務(wù)可以同時(shí)進(jìn)行數(shù)據(jù)讀取,第三個(gè)任務(wù)進(jìn)行數(shù)據(jù)預(yù)處理,以此類推。這樣,在同一時(shí)間內(nèi),多個(gè)卷積計(jì)算任務(wù)可以在不同階段并行執(zhí)行,大大提高了計(jì)算資源的利用率和計(jì)算速度。流水線設(shè)計(jì)對(duì)提高資源利用率具有重要作用。首先,它減少了計(jì)算資源的空閑時(shí)間。在傳統(tǒng)的非流水線設(shè)計(jì)中,計(jì)算單元在完成一個(gè)計(jì)算任務(wù)后,可能會(huì)因?yàn)榈却龜?shù)據(jù)或其他操作而處于空閑狀態(tài),導(dǎo)致資源浪費(fèi)。而流水線設(shè)計(jì)使得計(jì)算單元在每個(gè)時(shí)鐘周期都有任務(wù)可執(zhí)行,充分利用了硬件資源,提高了資源利用率。在卷積計(jì)算中,通過流水線設(shè)計(jì),乘法器和加法器等計(jì)算單元可以持續(xù)工作,避免了因數(shù)據(jù)讀取或其他操作導(dǎo)致的空閑,從而提高了計(jì)算資源的利用率。其次,流水線設(shè)計(jì)可以提高系統(tǒng)的吞吐量。由于多個(gè)任務(wù)可以在不同階段并行執(zhí)行,系統(tǒng)在單位時(shí)間內(nèi)能夠完成更多的計(jì)算任務(wù),從而提高了整體的計(jì)算效率和吞吐量。在處理大量圖像數(shù)據(jù)的卷積計(jì)算時(shí),流水線設(shè)計(jì)能夠使加速器在短時(shí)間內(nèi)完成更多圖像的卷積操作,滿足實(shí)時(shí)性要求較高的應(yīng)用場景。此外,流水線設(shè)計(jì)還可以降低每個(gè)階段的邏輯復(fù)雜度。將復(fù)雜的計(jì)算任務(wù)分解為多個(gè)簡單的階段,每個(gè)階段只負(fù)責(zé)完成特定的子任務(wù),使得每個(gè)階段的邏輯設(shè)計(jì)更加簡單,易于實(shí)現(xiàn)和優(yōu)化。這有助于提高設(shè)計(jì)的可靠性和穩(wěn)定性,同時(shí)也降低了設(shè)計(jì)和調(diào)試的難度。在激活函數(shù)計(jì)算模塊中,將復(fù)雜的激活函數(shù)計(jì)算過程分解為多個(gè)流水線階段,每個(gè)階段實(shí)現(xiàn)一個(gè)簡單的操作,如比較、查找表讀取等,降低了邏輯復(fù)雜度,提高了模塊的性能和可靠性。4.1.2單元重用技術(shù)單元重用技術(shù)是指在硬件設(shè)計(jì)中,通過合理的資源調(diào)度和控制邏輯,使同一個(gè)硬件單元能夠在不同的時(shí)間點(diǎn)用于執(zhí)行不同的計(jì)算任務(wù),從而減少硬件資源的消耗。在基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器中,單元重用技術(shù)主要應(yīng)用于卷積計(jì)算模塊和其他關(guān)鍵計(jì)算模塊,以實(shí)現(xiàn)資源的高效利用。在卷積計(jì)算模塊中,通常會(huì)設(shè)計(jì)多個(gè)處理單元(PE)來實(shí)現(xiàn)并行計(jì)算。然而,在實(shí)際計(jì)算過程中,不同的卷積層可能具有不同的卷積核大小、輸入輸出通道數(shù)和計(jì)算量。如果為每個(gè)卷積層都配置專門的處理單元,將會(huì)導(dǎo)致硬件資源的浪費(fèi)。通過單元重用技術(shù),可以根據(jù)不同卷積層的需求,動(dòng)態(tài)地調(diào)度和分配處理單元。對(duì)于一個(gè)具有多個(gè)卷積層的卷積神經(jīng)網(wǎng)絡(luò),在處理第一個(gè)卷積層時(shí),將所有處理單元分配用于該卷積層的計(jì)算;當(dāng)?shù)谝粋€(gè)卷積層計(jì)算完成后,根據(jù)第二個(gè)卷積層的計(jì)算需求,重新配置處理單元,使其能夠高效地執(zhí)行第二個(gè)卷積層的計(jì)算任務(wù)。這樣,通過單元重用技術(shù),同一個(gè)處理單元可以在不同的卷積層計(jì)算中重復(fù)使用,減少了處理單元的數(shù)量,從而降低了硬件資源的消耗。單元重用技術(shù)在減少硬件資源消耗方面具有顯著優(yōu)勢(shì)。首先,它降低了硬件成本。由于減少了硬件單元的數(shù)量,相應(yīng)地降低了FPGA芯片的資源占用和成本。在大規(guī)模的卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計(jì)中,這可以顯著降低硬件實(shí)現(xiàn)的成本,提高系統(tǒng)的性價(jià)比。如果采用傳統(tǒng)的設(shè)計(jì)方法,為每個(gè)卷積層都配置獨(dú)立的處理單元,可能需要使用更大規(guī)模的FPGA芯片,而通過單元重用技術(shù),可以在較小規(guī)模的FPGA芯片上實(shí)現(xiàn)相同的功能,降低了硬件成本。其次,單元重用技術(shù)提高了資源利用率。通過動(dòng)態(tài)地調(diào)度和分配硬件單元,使其能夠充分發(fā)揮作用,避免了硬件資源的閑置和浪費(fèi)。在卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算過程中,不同的計(jì)算任務(wù)對(duì)硬件資源的需求是動(dòng)態(tài)變化的,單元重用技術(shù)能夠根據(jù)這些變化靈活地調(diào)整資源分配,提高了資源的利用效率。在某些卷積層計(jì)算中,可能只需要部分處理單元即可完成任務(wù),通過單元重用技術(shù),可以將剩余的處理單元分配給其他需要的計(jì)算任務(wù),提高了資源的利用率。此外,單元重用技術(shù)還可以提高設(shè)計(jì)的靈活性和可擴(kuò)展性。由于硬件單元可以被重復(fù)使用,當(dāng)需要擴(kuò)展或修改卷積神經(jīng)網(wǎng)絡(luò)模型時(shí),只需要調(diào)整資源調(diào)度和控制邏輯,而不需要大規(guī)模地修改硬件設(shè)計(jì)。這使得加速器能夠更好地適應(yīng)不同的應(yīng)用場景和模型需求,具有更強(qiáng)的靈活性和可擴(kuò)展性。當(dāng)出現(xiàn)新的卷積神經(jīng)網(wǎng)絡(luò)模型或?qū)ΜF(xiàn)有模型進(jìn)行改進(jìn)時(shí),通過單元重用技術(shù),可以方便地調(diào)整資源分配,使加速器能夠快速適應(yīng)新的模型,而無需重新設(shè)計(jì)硬件電路。四、加速器性能優(yōu)化策略4.2內(nèi)存優(yōu)化4.2.1緩存優(yōu)化設(shè)計(jì)設(shè)計(jì)適合CNN模型的緩存機(jī)制對(duì)于減少內(nèi)存訪問延遲至關(guān)重要。在基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器中,采用了多級(jí)緩存結(jié)構(gòu),結(jié)合數(shù)據(jù)局部性原理,提高緩存命中率,從而降低內(nèi)存訪問延遲。在加速器中,設(shè)計(jì)了兩級(jí)緩存:一級(jí)緩存(L1Cache)和二級(jí)緩存(L2Cache)。L1Cache采用SRAM實(shí)現(xiàn),具有高速讀寫的特性,位于靠近計(jì)算單元的位置,用于存儲(chǔ)最頻繁訪問的數(shù)據(jù),如當(dāng)前正在處理的卷積核和輸入特征圖的局部數(shù)據(jù)。L2Cache則采用容量較大的BRAM實(shí)現(xiàn),作為L1Cache的補(bǔ)充,存儲(chǔ)相對(duì)不那么頻繁但仍有可能被訪問的數(shù)據(jù)。這種多級(jí)緩存結(jié)構(gòu)充分利用了數(shù)據(jù)的時(shí)間局部性和空間局部性。時(shí)間局部性是指如果一個(gè)數(shù)據(jù)被訪問,那么在不久的將來它很可能再次被訪問;空間局部性是指如果一個(gè)數(shù)據(jù)被訪問,那么與其相鄰的數(shù)據(jù)也很可能被訪問。在卷積計(jì)算過程中,對(duì)于一個(gè)特定的卷積核和輸入特征圖區(qū)域,在一段時(shí)間內(nèi)會(huì)被多次訪問,L1Cache可以快速響應(yīng)這些訪問請(qǐng)求,減少內(nèi)存訪問延遲;同時(shí),由于卷積計(jì)算通常是在局部區(qū)域進(jìn)行,L1Cache可以存儲(chǔ)該局部區(qū)域周圍的數(shù)據(jù),利用空間局部性原理,減少后續(xù)對(duì)內(nèi)存的訪問。為了進(jìn)一步提高緩存命中率,采用了基于數(shù)據(jù)訪問模式的緩存替換策略。通過分析CNN模型的計(jì)算流程和數(shù)據(jù)訪問特點(diǎn),發(fā)現(xiàn)不同層的數(shù)據(jù)訪問模式具有一定的規(guī)律性。對(duì)于卷積層,數(shù)據(jù)訪問通常是以卷積核為中心,對(duì)輸入特征圖的局部區(qū)域進(jìn)行遍歷;對(duì)于池化層,數(shù)據(jù)訪問則是按照池化窗口的大小對(duì)特征圖進(jìn)行下采樣。根據(jù)這些規(guī)律,設(shè)計(jì)了相應(yīng)的緩存替換策略。當(dāng)L1Cache或L2Cache中的緩存空間已滿,需要替換數(shù)據(jù)時(shí),優(yōu)先替換那些在未來一段時(shí)間內(nèi)不太可能被訪問的數(shù)據(jù)。在卷積層計(jì)算時(shí),如果某個(gè)卷積核已經(jīng)完成了對(duì)當(dāng)前輸入特征圖區(qū)域的計(jì)算,并且在接下來的計(jì)算中不太可能再次訪問該區(qū)域的數(shù)據(jù),那么該區(qū)域的數(shù)據(jù)就可以被替換出緩存;而對(duì)于那些即將被訪問的卷積核和輸入特征圖區(qū)域的數(shù)據(jù),則保留在緩存中。此外,還對(duì)緩存進(jìn)行了分區(qū)管理。根據(jù)數(shù)據(jù)的類型和用途,將緩存劃分為不同的區(qū)域,每個(gè)區(qū)域?qū)iT用于存儲(chǔ)特定類型的數(shù)據(jù),如權(quán)重緩存區(qū)、特征圖緩存區(qū)、中間結(jié)果緩存區(qū)等。這樣可以避免不同類型的數(shù)據(jù)在緩存中相互干擾,提高緩存的管理效率和訪問速度。在權(quán)重緩存區(qū)中,專門存儲(chǔ)卷積核的權(quán)重?cái)?shù)據(jù);在特征圖緩存區(qū)中,存儲(chǔ)輸入特征圖和中間計(jì)算得到的特征圖數(shù)據(jù)。通過分區(qū)管理,當(dāng)計(jì)算單元需要訪問某種類型的數(shù)據(jù)時(shí),可以直接定位到相應(yīng)的緩存區(qū)域,減少了緩存搜索的時(shí)間,提高了數(shù)據(jù)訪問效率。通過以上緩存優(yōu)化設(shè)計(jì),有效地減少了內(nèi)存訪問延遲,提高了基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器的數(shù)據(jù)訪問速度和計(jì)算效率。在實(shí)際應(yīng)用中,經(jīng)過緩存優(yōu)化后的加速器在處理大規(guī)模圖像數(shù)據(jù)集時(shí),內(nèi)存訪問延遲明顯降低,計(jì)算性能得到了顯著提升。4.2.2分布式存儲(chǔ)器設(shè)計(jì)利用FPGA的分布式存儲(chǔ)器資源,設(shè)計(jì)適合CNN模型的分布式存儲(chǔ)方案,能夠有效提高存儲(chǔ)訪問效率。FPGA中的分布式存儲(chǔ)器是由查找表(LUT)配置而成的內(nèi)部存儲(chǔ)器,具有異步訪問的特點(diǎn),適用于小規(guī)模存儲(chǔ)器或需要異步訪問的場景。在基于FPGA的CNN加速器中,將分布式存儲(chǔ)器應(yīng)用于存儲(chǔ)一些關(guān)鍵的小規(guī)模數(shù)據(jù),如卷積核的偏置數(shù)據(jù)、中間計(jì)算結(jié)果的臨時(shí)存儲(chǔ)等。由于這些數(shù)據(jù)量相對(duì)較小,但對(duì)訪問速度和靈活性要求較高,分布式存儲(chǔ)器的異步訪問特性能夠滿足其需求。在卷積計(jì)算過程中,偏置數(shù)據(jù)需要與卷積結(jié)果進(jìn)行快速相加,使用分布式存儲(chǔ)器存儲(chǔ)偏置數(shù)據(jù),可以在卷積結(jié)果產(chǎn)生的同時(shí),快速從分布式存儲(chǔ)器中讀取偏置數(shù)據(jù)進(jìn)行計(jì)算,避免了因等待數(shù)據(jù)讀取而造成的計(jì)算延遲。為了進(jìn)一步提高分布式存儲(chǔ)器的訪問效率,采用了數(shù)據(jù)重映射策略。根據(jù)CNN模型的數(shù)據(jù)訪問模式,對(duì)存儲(chǔ)在分布式存儲(chǔ)器中的數(shù)據(jù)進(jìn)行重映射,使得相關(guān)的數(shù)據(jù)在存儲(chǔ)地址上更加接近,減少數(shù)據(jù)訪問時(shí)的地址跳轉(zhuǎn)和沖突。在卷積層計(jì)算中,對(duì)于同一組卷積核的偏置數(shù)據(jù),將其存儲(chǔ)在分布式存儲(chǔ)器中相鄰的地址位置,當(dāng)需要訪問這些偏置數(shù)據(jù)時(shí),可以通過連續(xù)的地址訪問,提高訪問速度。同時(shí),通過合理的地址映射,還可以避免不同數(shù)據(jù)訪問之間的沖突,確保分布式存儲(chǔ)器的高效運(yùn)行。此外,還結(jié)合分布式存儲(chǔ)器和BRAM的特點(diǎn),設(shè)計(jì)了一種混合存儲(chǔ)方案。對(duì)于大規(guī)模的卷積核權(quán)重?cái)?shù)據(jù)和輸入輸出特征圖數(shù)據(jù),仍然使用BRAM進(jìn)行存儲(chǔ),以充分利用BRAM的大容量和高速讀寫特性;而對(duì)于一些小規(guī)模的、對(duì)訪問靈活性要求較高的數(shù)據(jù),則使用分布式存儲(chǔ)器存儲(chǔ)。通過這種混合存儲(chǔ)方案,能夠充分發(fā)揮分布式存儲(chǔ)器和BRAM的優(yōu)勢(shì),提高整個(gè)存儲(chǔ)系統(tǒng)的性能。在一個(gè)具有多個(gè)卷積層的CNN模型中,將每個(gè)卷積層的權(quán)重?cái)?shù)據(jù)存儲(chǔ)在BRAM中,而將每個(gè)卷積核的偏置數(shù)據(jù)存儲(chǔ)在分布式存儲(chǔ)器中,這樣既保證了大規(guī)模數(shù)據(jù)的高效存儲(chǔ)和訪問,又滿足了小規(guī)模數(shù)據(jù)對(duì)訪問靈活性的需求。通過利用FPGA的分布式存儲(chǔ)器資源,結(jié)合數(shù)據(jù)重映射策略和混合存儲(chǔ)方案,有效地提高了存儲(chǔ)訪問效率,為基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器的高效運(yùn)行提供了有力支持。在實(shí)際測試中,采用分布式存儲(chǔ)器設(shè)計(jì)的加速器在數(shù)據(jù)存儲(chǔ)和訪問方面表現(xiàn)出更高的效率,整體性能得到了明顯提升。4.3算法優(yōu)化4.3.1矩陣乘法加速算法在基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器中,為了進(jìn)一步提高計(jì)算效率,將卷積計(jì)算轉(zhuǎn)化為矩陣乘法計(jì)算,并采用相應(yīng)的加速算法。卷積運(yùn)算本質(zhì)上可以看作是一種特殊的矩陣乘法運(yùn)算,通過巧妙的轉(zhuǎn)換,可以利用成熟的矩陣乘法優(yōu)化技術(shù)來加速卷積計(jì)算。具體的轉(zhuǎn)換方法是將輸入特征圖和卷積核按照一定的規(guī)則進(jìn)行重新排列和組合,使其符合矩陣乘法的運(yùn)算形式。假設(shè)輸入特征圖的大小為H_{in}×W_{in}×C_{in},卷積核的大小為K_{h}×K_{w}×C_{in},輸出特征圖的大小為H_{out}×W_{out}×C_{out}。首先,將輸入特征圖劃分為多個(gè)以卷積核大小為窗口的子區(qū)域,然后將每個(gè)子區(qū)域的元素按行展開,形成一個(gè)二維矩陣的行向量。對(duì)于卷積核,也將其元素按行展開,形成另一個(gè)二維矩陣的列向量。這樣,卷積計(jì)算就可以轉(zhuǎn)化為兩個(gè)矩陣的乘法運(yùn)算,通過矩陣乘法得到的結(jié)果再重新排列,即可得到輸出特征圖。為了加速矩陣乘法計(jì)算,采用了Strassen算法。Strassen算法是一種經(jīng)典的矩陣乘法優(yōu)化算法,它通過將大矩陣分解為多個(gè)小矩陣,并利用一系列巧妙的矩陣運(yùn)算組合,減少了乘法運(yùn)算的次數(shù),從而提高了計(jì)算效率。在傳統(tǒng)的矩陣乘法中,兩個(gè)n×n矩陣相乘需要進(jìn)行n^3次乘法運(yùn)算和n^3-n^2次加法運(yùn)算。而Strassen算法通過將矩陣劃分為2×2的子矩陣,并進(jìn)行7次乘法和8次加法運(yùn)算,1將乘法運(yùn)算次數(shù)減少到約n^{2.81}次,在矩陣規(guī)模較大時(shí),能夠顯著提高計(jì)算速度。在加速器中,當(dāng)處理大規(guī)模的卷積計(jì)算轉(zhuǎn)化而來的矩陣乘法時(shí),利用Strassen算法可以有效減少計(jì)算時(shí)間,提高整體計(jì)算性能。此外,還結(jié)合了分塊矩陣乘法技術(shù)。將大矩陣劃分為多個(gè)小的子矩陣塊,分別對(duì)這些子矩陣塊進(jìn)行乘法運(yùn)算,然后再將結(jié)果合并。這種方法可以充分利用FPGA的存儲(chǔ)資源和計(jì)算資源,減少內(nèi)存訪問壓力,提高計(jì)算效率。在進(jìn)行矩陣乘法時(shí),將輸入矩陣和輸出矩陣分別劃分為多個(gè)m×m的子矩陣塊,每次只讀取和計(jì)算一對(duì)子矩陣塊,計(jì)算完成后將結(jié)果存儲(chǔ)到相應(yīng)的位置。通過合理選擇子矩陣塊的大小,可以平衡計(jì)算資源的利用和內(nèi)存訪問的頻率,進(jìn)一步提高矩陣乘法的計(jì)算效率。通過將卷積計(jì)算轉(zhuǎn)化為矩陣乘法計(jì)算,并采用Strassen算法和分塊矩陣乘法技術(shù),有效地提高了基于FPGA的低位寬量化卷積神經(jīng)網(wǎng)絡(luò)加速器的計(jì)算效率,為實(shí)現(xiàn)高效的卷積神經(jīng)網(wǎng)絡(luò)加速提供了有力支持。4.3.2量化算法優(yōu)化為了進(jìn)一步降低量化誤差對(duì)精度的影響,對(duì)量化算法進(jìn)行了優(yōu)化。在傳統(tǒng)的量化感知訓(xùn)練(QAT)算法基礎(chǔ)上,提出了一種改進(jìn)的量化策略,即自適應(yīng)量化步長調(diào)整策略。在傳統(tǒng)的QAT算法中,量化步長通常是固定的,根據(jù)訓(xùn)練數(shù)據(jù)的統(tǒng)計(jì)信息預(yù)先確定。然而,在實(shí)際的卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中,不同層的參數(shù)和激活值具有不同的數(shù)據(jù)分布特性,固定的量化步長可能無法很好地適應(yīng)這些差異,導(dǎo)致量化誤差較大,影響模型的精度。為了解決這個(gè)問題,自適應(yīng)量化步長調(diào)整策略根據(jù)不同層的數(shù)據(jù)分布動(dòng)態(tài)地調(diào)整量化步長。在每一輪訓(xùn)練中,對(duì)當(dāng)前層的參數(shù)和激活值進(jìn)行統(tǒng)計(jì)分析,計(jì)算其數(shù)據(jù)分布的標(biāo)準(zhǔn)差和均值。根據(jù)標(biāo)準(zhǔn)差和均值,動(dòng)態(tài)地調(diào)整量化步長。對(duì)于數(shù)據(jù)分布較為集中的層,減小量化步長,以提高量化精度;對(duì)于數(shù)據(jù)分布較為分散的層,增大量化步長,以減少量化誤差的累積。通過這種自適應(yīng)調(diào)整量化步長的方式,能夠更好地適應(yīng)不同層的數(shù)據(jù)特點(diǎn),從而降低量化誤差,提高模型在低位寬量化下的精度。此外,還引入了量化噪聲補(bǔ)償技術(shù)。在量化過程中,由于量化誤差的存在,會(huì)引入一定的量化噪聲,這種噪聲可能會(huì)對(duì)模型的性能產(chǎn)生負(fù)面影響。為了補(bǔ)償量化噪聲,在訓(xùn)練過程中,根據(jù)量化誤差的統(tǒng)計(jì)特性,生成相應(yīng)的補(bǔ)償噪聲,并將其添加到量化后的參數(shù)和激活值中。通過這種方式,能夠在一定程度上抵消量化噪聲的影響,提高模型的穩(wěn)定性和準(zhǔn)確性。在對(duì)卷積核進(jìn)行量化時(shí),根據(jù)量化誤差的分布情況,生成一個(gè)與量化噪聲大小相等、方向相反的補(bǔ)償噪聲,將其添加到量化后的卷積核中,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論