本發(fā)明涉及fpga的硬件加速器領域,具體涉及一種面向卷積神經(jīng)網(wǎng)絡的fpga集群資源調(diào)度方法及系統(tǒng)。
背景技術(shù):
1、隨著深度學習模型的廣泛應用,尤其是卷積神經(jīng)網(wǎng)絡(cnn)在自動駕駛、醫(yī)療影像和面部識別等領域的重要作用,對高效硬件加速器的需求不斷增加。現(xiàn)場可編程門陣列(fpga)由于其高度可配置和并行實現(xiàn)神經(jīng)網(wǎng)絡中算法的特性,與深度學習領域發(fā)展迅速、不斷推出和改進新的實用模型的趨勢完美適配,提供了gpu和asic兩種硬件特性之間的巧妙平衡,為深度學習模型的部署提供了高能效和低功耗的解決方案。
2、但是對于深度學習領域的專家而言,要想實現(xiàn)cnn模型在fpga上的實現(xiàn)并不是一件容易的事,在fpga上實現(xiàn)需要開發(fā)人員具有硬件設計的專業(yè)知識,而深度學習專家未必具備這方面的知識。因此,對于特定領域的硬件設計自動化和最先進的神經(jīng)網(wǎng)絡實現(xiàn)的需求是很迫切的。對于cpu和gpu,已經(jīng)存在眾所周知的神經(jīng)網(wǎng)絡框架(例如pytorch和tensorflow)的成熟編譯流程。相比之下,自動將給定的網(wǎng)絡映射到包含一個或多個fpga的方法要還在發(fā)展階段。
3、現(xiàn)有的神經(jīng)網(wǎng)絡到fpga映射的加速器架構(gòu)主要分為overlay和dataflow兩種類型。overlay架構(gòu)中網(wǎng)絡主要部署在programmable?logic(pl)端,通過復用統(tǒng)一的處理單元(pe)來實現(xiàn)不同層的運算,數(shù)據(jù)存儲在片外,這雖然簡化了設計,但頻繁的數(shù)據(jù)傳輸可能成為性能瓶頸。而dataflow架構(gòu)為每層設計獨立的pe單元,數(shù)據(jù)全部存儲在片上,通過流水線處理大大提高了吞吐量和降低了延遲,特別適合于數(shù)據(jù)密集型的cnn操作,但需要消耗大量的dsp資源。
4、在單fpga平臺上,現(xiàn)有的工具如vitis?ai、finn和hls4ml已被廣泛使用。但是隨著cnn規(guī)模的擴大,使用dataflow架構(gòu)的cnn加速器在單個fpga上的計算性能通常受限于資源,對于更大規(guī)模的神經(jīng)網(wǎng)絡,甚至難以在單個fpga上實現(xiàn)。因此,如何在多個fpga上自動實現(xiàn)cnn模型成為了一個重要的研究點。
5、對于現(xiàn)存的dataflow架構(gòu)的cnn加速器設計,主要通過預定義模版來實現(xiàn)網(wǎng)絡到fpga實現(xiàn)的層匹配。這些模版通常對網(wǎng)絡層的算法進行深入分析,并進行硬件友好型設計,以確保資源的高效利用和性能優(yōu)化。在每層實現(xiàn)中,開發(fā)人員需考慮該層的重用系數(shù)rf,即在硬件上并行處理該層所需的資源量。重用系數(shù)rf的選擇不僅影響dsp資源的消耗,還直接關(guān)系到推理延遲。
6、通過對不同重用系數(shù)rf下的推理性能進行系統(tǒng)性研究,開發(fā)人員能夠識別出關(guān)鍵參數(shù)之間的關(guān)系。這些關(guān)系往往可以總結(jié)為特定的函數(shù)形式,例如,推理延遲與資源消耗之間的折中關(guān)系,以及在不同操作模式下的能效分析。這種規(guī)律性的總結(jié)能夠幫助開發(fā)人員在設計cnn加速器時,快速評估和優(yōu)化不同層的資源配置與性能。
7、此外,隨著神經(jīng)網(wǎng)絡規(guī)模的不斷擴大,如何高效地進行每層的資源調(diào)度變得愈發(fā)重要。在多fpga系統(tǒng)中,各個fpga之間的通信開銷也需要納入考慮,開發(fā)人員需制定合適的數(shù)據(jù)流策略,以確保在分布式架構(gòu)中實現(xiàn)低延遲和高帶寬的數(shù)據(jù)傳輸。這不僅對加速器的設計提出了挑戰(zhàn),也為優(yōu)化算法和調(diào)度策略的研究提供了新的方向。
8、現(xiàn)存的基于dataflow架構(gòu)的加速器自動映射方法主要面臨兩大關(guān)鍵技術(shù)問題。首先,網(wǎng)絡每層的重用系數(shù)rf需要由用戶手動設置。這在處理層數(shù)眾多的復雜神經(jīng)網(wǎng)絡時,對開發(fā)人員極為不友好,尤其是由于不同重用系數(shù)rf下的資源消耗和性能數(shù)據(jù)通常沒有公開,開發(fā)人員往往難以做出合理的選擇。這不僅增加了開發(fā)的復雜性,也可能導致資源的低效使用和性能的下降,從而影響最終的推理速度和能效。其次,現(xiàn)有方案幾乎全部集中于單個fpga的實現(xiàn),這就限制了資源的有效利用。在面對大規(guī)模神經(jīng)網(wǎng)絡時,單個fpga的計算能力和存儲容量常常無法滿足需求,造成性能瓶頸和資源浪費。因此,如何在fpga集群的多個fpga之間高效分配和調(diào)度資源成為亟待解決的問題。
技術(shù)實現(xiàn)思路
1、本發(fā)明要解決的技術(shù)問題:針對現(xiàn)有技術(shù)的上述問題,提供一種面向卷積神經(jīng)網(wǎng)絡的fpga集群資源調(diào)度方法及系統(tǒng),本發(fā)明旨在優(yōu)化卷積神經(jīng)網(wǎng)絡在fpga集群上的實現(xiàn)效率,充分利用fpga資源使得多個fpga高效地合作完成卷積神經(jīng)網(wǎng)絡的計算任務。
2、為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
3、一種面向卷積神經(jīng)網(wǎng)絡的fpga集群資源調(diào)度方法,包括下述步驟:
4、s1,將卷積神經(jīng)網(wǎng)絡模型轉(zhuǎn)換為高層次綜合的代碼;
5、s2,對轉(zhuǎn)換后的卷積神經(jīng)網(wǎng)絡模型進行系數(shù)分析確定每層的所有卷積層重用系數(shù)rf;
6、s3,根據(jù)給定的卷積層重用系數(shù)rf分別與推理延遲、dsp使用量之間的函數(shù)關(guān)系為每層分配推理延遲以及dsp使用量最優(yōu)的卷積層重用系數(shù)rf;
7、s4,根據(jù)m層的卷積神經(jīng)網(wǎng)絡模型中每一層的dsp使用量構(gòu)建長度為m的數(shù)組layer,數(shù)組layer中任意第i個元素layer[i]的值為卷積神經(jīng)網(wǎng)絡模型第i層的dsp使用量,以不改變數(shù)組layer中元素順序的情況下把數(shù)組layer分成k段且滿足每段dsp使用量累加和的最大值最小確定每一段所包含的數(shù)組layer中的元素,從而將m層的卷積神經(jīng)網(wǎng)絡模型中每一層分區(qū)劃分到fpga集群中的k個fpga,為分區(qū)劃分的子模塊之間添加輸入和輸出接口;
8、s5,根據(jù)分區(qū)劃分的子模塊利用多核高層次綜合工具將卷積神經(jīng)網(wǎng)絡模型部署到fpga集群上以加速卷積神經(jīng)網(wǎng)絡模型的執(zhí)行。
9、可選地,步驟s2中對轉(zhuǎn)換后的卷積神經(jīng)網(wǎng)絡模型進行系數(shù)分析確定每層的所有卷積層重用系數(shù)rf時,確定某一層的卷積層重用系數(shù)rf需要滿足的約束條件為:
10、,
11、,
12、其中,為該卷積層輸入特征圖的長、寬及通道數(shù)的乘積,為輸出特征圖的通道數(shù),為該卷積層的卷積層重用系數(shù),為模運算。
13、可選地,步驟s3包括:
14、s3.1,將所有卷積層重用系數(shù)rf的列表最長的層作為基準層;
15、s3.2,遍歷基準層的卷積層重用系數(shù)rf,如果尚未遍歷完畢,則跳轉(zhuǎn)步驟s3.3;否則,判定每層的所有卷積層重用系數(shù)rf無法滿足要求,結(jié)束并退出;
16、s3.3,針對遍歷得到的卷積層重用系數(shù)rf,根據(jù)給定的卷積層重用系數(shù)rf、推理延遲之間的函數(shù)關(guān)系計算該卷積層重用系數(shù)rf對應的基準推理延遲latency1,從基準層開始向后搜索其他各層、為各層在所有卷積層重用系數(shù)rf中分配卷積層重用系數(shù)rf以尋找與基準推理延遲latency1最接近的延遲,根據(jù)給定的卷積層重用系數(shù)rf、dsp使用量之間的函數(shù)關(guān)系計算搜索到的每一層的dsp使用量并累加作為累計dsp需求,若累計dsp需求與fpga集群的總可用dsp的占比超過預設閾值則結(jié)束,跳轉(zhuǎn)步驟s3.2。
17、可選地,步驟s3.3中的卷積層為二維卷積層conv2d,且給定的卷積層重用系數(shù)rf、推理延遲之間的函數(shù)關(guān)系的函數(shù)表達式為:
18、,
19、其中,為推理延遲,和分別為輸入特征圖的寬度和高度,為時鐘周期,為該卷積層的卷積層重用系數(shù)。
20、可選地,步驟s3.3中給定的卷積層重用系數(shù)rf、dsp使用量之間的函數(shù)關(guān)系的函數(shù)表達式為:
21、,
22、其中,為dsp使用量;為位寬因子,位寬因子隨位寬而變化,低于8位時不使用dsp,,高于8位時,32位數(shù)據(jù)寬度時。
23、可選地,步驟s4中以不改變數(shù)組layer中元素順序的情況下把數(shù)組layer分成k段且滿足每段dsp使用量累加和的最大值最小確定每一段所包含的數(shù)組layer中的元素時,包括采用貪心和二分查找的方法,在范圍內(nèi)通過二分查找不斷逼近dsp使用量累加和最大值最小的情況,其中、分別表示對數(shù)組layer進行的最小值和求和操作;在每次查找中假設該枚舉值是合理的,然后在每段dsp使用量累加和不超過該值的情況下對數(shù)組進行分段,如果分段數(shù)小于等于k,則說明該值偏大或者正合適,反之則說明枚舉值偏小,最終返回一個長度為m的bool類型的數(shù)組,長度為m的bool類型的數(shù)組中值為true的位置表示卷積神經(jīng)網(wǎng)絡模型要分區(qū)劃分子模塊的位置。
24、可選地,步驟s4中為分區(qū)劃分的子模塊之間添加輸入和輸出接口時,包括采用axi4-stream協(xié)議,將子模塊之間的輸入、輸出的并行數(shù)據(jù)流拆分為稱為微包flit的64位自定義位寬流式數(shù)據(jù),并引入了一個包含“dest”和“l(fā)ast”信號的側(cè)通道,其中“dest”信號指示接收數(shù)據(jù)的目標fpga地址,而“l(fā)ast”信號則標記完整數(shù)據(jù)包的最后一個微包flit以確保數(shù)據(jù)傳輸?shù)耐暾院蜏蚀_性,且子模塊的輸出接口連接有輸出數(shù)據(jù)編碼器用于將并行數(shù)據(jù)流轉(zhuǎn)換為微包flit、子模塊的輸入接口連接有輸入數(shù)據(jù)解碼器用于將微包flit解碼為并行數(shù)據(jù)流。
25、此外,本發(fā)明還提供一種面向卷積神經(jīng)網(wǎng)絡的fpga集群資源調(diào)度系統(tǒng),包括相互連接的微處理器和存儲器,所述微處理器被編程或配置以執(zhí)行所述面向卷積神經(jīng)網(wǎng)絡的fpga集群資源調(diào)度方法。
26、此外,本發(fā)明還提供一種計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)中存儲有計算機程序或指令,該計算機程序或指令被編程或配置以通過處理器執(zhí)行所述面向卷積神經(jīng)網(wǎng)絡的fpga集群資源調(diào)度方法。
27、此外,本發(fā)明還提供一種計算機程序產(chǎn)品,包括計算機程序或指令,該計算機程序或指令被編程或配置以通過處理器執(zhí)行所述面向卷積神經(jīng)網(wǎng)絡的fpga集群資源調(diào)度方法。
28、和現(xiàn)有技術(shù)相比,本發(fā)明主要具有下述優(yōu)點:首先,本發(fā)明引入了一種自動為每個cnn層分配資源的方法。該方法通過深入分析每層的計算復雜度(dsp使用量)及推理延遲,智能地優(yōu)化重用系數(shù)。這一策略不僅有效利用了fpga資源,還在各層之間保持了延遲平衡,從而減少了開發(fā)人員的手動干預,顯著提高了設計的靈活性和適應性。該方法為每個cnn層自動分配資源,確保高效利用fpga資源的同時,保持各層之間的延遲平衡。這一過程充分挖掘了流水線處理的潛力,顯著提高了整體系統(tǒng)性能。其次,本發(fā)明設計了一種自動劃分方法,以支持將cnn層分配到多個fpga中,該方法不僅實現(xiàn)了對cnn模型的高效分割,還為每個子圖配置了專用的通信接口,確保fpga之間能夠進行無縫通信。這種設計顯著提升了系統(tǒng)的協(xié)同工作能力,使得多個fpga可以高效地合作完成復雜的計算任務。可以將cnn層有效分配到多個fpga中,還為每個子圖配置了專用接口,促進fpga間的無縫通信,這種靈活的架構(gòu)使系統(tǒng)在處理大型神經(jīng)網(wǎng)絡時更加高效,提升了整體計算能力與協(xié)作效率。再次,從整體角度來看,本發(fā)明為神經(jīng)網(wǎng)絡在fpga集群上的實現(xiàn)形成了一個完整的優(yōu)化流程,通過引入智能資源分配和自動分區(qū)方法,提供了一種系統(tǒng)化優(yōu)化cnn在fpga集群上的實現(xiàn)效率的思路,不僅簡化了設計和實現(xiàn)過程,還為未來在多fpga系統(tǒng)中的應用奠定了基礎。