本案例介紹了如何使用Silexica的SLX FPGA優(yōu)化人臉檢測數(shù)據(jù)中心的OpenCL AI內(nèi)核。
引言
FPGA正越來越多地被用作數(shù)據(jù)中心的協(xié)處理器。這一轉(zhuǎn)變背后的驅(qū)動(dòng)力是利用FPGA的并行特性的AI應(yīng)用。Xilinx Alveo系列加速器卡使用PCI Express接口連接到x86處理器,在這個(gè)領(lǐng)域非常流行。對(duì)于這些加速器卡的編程,你可以使用自上而下的方法,從頂級(jí)的C/C++和OpenCL應(yīng)用程序開始,然后向低級(jí)別的內(nèi)核工作,或者使用自下而上的方法,將內(nèi)核塊編譯成Xilinx對(duì)象(.xo),然后可以在以后的階段連接成二進(jìn)制。
與自頂向下的流相比,自底向上的流程有幾個(gè)優(yōu)點(diǎn)。(1) 它允許將內(nèi)核的設(shè)計(jì)、驗(yàn)證和優(yōu)化與主應(yīng)用程序分開。(2) 它通過將設(shè)計(jì)分割成更小的組件,為內(nèi)核的開發(fā)和優(yōu)化提供更快的迭代周期。(3) 它有利于重復(fù)使用;一個(gè)(.xo)文件的集合可以像庫一樣被重復(fù)使用。
在本應(yīng)用案例中,我們使用人臉檢測應(yīng)用作為參考設(shè)計(jì),展示設(shè)計(jì)者在使用Vitis自下而上流程時(shí),如何使用SLX FPGA來優(yōu)化內(nèi)核。請(qǐng)注意,同樣的方法也適用于從頭開始設(shè)計(jì)內(nèi)核或從Vitis HLS導(dǎo)入現(xiàn)有內(nèi)核。
開發(fā)流程
創(chuàng)建該應(yīng)用需要使用Silexica和Xilinx的以下開發(fā)工具。
● SLX FPGA版本2020.4-sp1● VitisLibraries 2020.2版● Vitis高級(jí)合成2020.2版
● Vitis統(tǒng)一軟件平臺(tái)2020.2版
整個(gè)端到端流程如圖1所示。該流程從創(chuàng)建一個(gè)新的SLX項(xiàng)目開始。但是,如果您有一個(gè)現(xiàn)有的Vitis HLS項(xiàng)目,SLX FPGA可以直接導(dǎo)入它。
圖1:Vitis自底向上項(xiàng)目的SLX FPGA工作流程
一、創(chuàng)建并配置SLX FPGA項(xiàng)目
啟動(dòng)SLX FPGA,點(diǎn)擊“New SLX project”圖標(biāo),啟動(dòng)項(xiàng)目創(chuàng)建向?qū)?。?chuàng)建一個(gè)新的SLX FPGA項(xiàng)目,如圖2所示。下一步是配置這個(gè)項(xiàng)目。
圖2:創(chuàng)建一個(gè)新的SLX FPGA項(xiàng)目
當(dāng)你創(chuàng)建一個(gè)新的項(xiàng)目時(shí),配置編輯器會(huì)自動(dòng)出現(xiàn),但你也可以通過點(diǎn)擊橙色的齒輪按鈕隨時(shí)調(diào)出它。如圖3所示,將你的應(yīng)用程序源文件拖放到項(xiàng)目的spec文件夾中。在本案例中,我們從Rosette基準(zhǔn)1中抽取人臉檢測應(yīng)用。接下來,你需要指定FPGA部件號(hào)和構(gòu)建選項(xiàng)。對(duì)于這個(gè)應(yīng)用,我們的目標(biāo)是Alveo U280 FPGA。在FPGA部件欄,選擇xcu280-fsvh2892-2L-e。要設(shè)置構(gòu)建選項(xiàng),輸入clean、build和run命令,如圖3所示。對(duì)于‘make’項(xiàng)目,如圖,請(qǐng)確認(rèn)makefile沒有使用硬編碼編譯器,而是使用(CC)和(CXX)環(huán)境變量來分別引用C和C++編譯器。SLX將在不同的分析階段用其專有的編譯器覆蓋這些變量。Run命令執(zhí)行testbench(也包括在基準(zhǔn)套件中),以確保功能的正確性,也用于分析應(yīng)用程序的動(dòng)態(tài)行為。
圖3:配置一個(gè)新的SLX FPGA項(xiàng)目
這些基本配置完成后,我們可以繼續(xù)為我們的應(yīng)用程序選擇頂級(jí)硬件函數(shù),并設(shè)置正確的接口。點(diǎn)擊“函數(shù)映射”按鈕,打開功能映射編輯器。如果你確定頂層硬件函數(shù),檢查它的可綜合性問題,并使用函數(shù)映射編輯器中的右鍵菜單將其映射到FPGA上?;蛘?,運(yùn)行自動(dòng)選擇FPGA功能,讓SLX自動(dòng)選擇頂層的硬件函數(shù)。對(duì)于這個(gè)人臉識(shí)別應(yīng)用,我們選擇face_detect_sw作為我們的頂級(jí)硬件函數(shù)。一旦正確選擇了頂層硬件函數(shù),函數(shù)映射編輯器將看起來像圖4,所有映射到FPGA的函數(shù)將有一個(gè)紅色邊框。
圖4:SLX FPGA函數(shù)映射編輯器
現(xiàn)在我們準(zhǔn)備為這個(gè)函數(shù)選擇接口。在函數(shù)映射編輯器中選擇頂級(jí)硬件函數(shù)后,點(diǎn)擊properties標(biāo)簽,用左側(cè)的菜單打開接口選擇,如圖5所示。為所有數(shù)組和指針接口選擇axi_m接口,為標(biāo)量選擇s_axilite接口。這將生成在Alveo加速器卡上使用Xilinx對(duì)象所需的接口pragmas。此外,SLX的優(yōu)化引擎現(xiàn)在意識(shí)到了接口限制,并相應(yīng)地選擇了優(yōu)化原則。
圖5:SLX FPGA接口選擇
在正確選擇了所有接口后,我們現(xiàn)在設(shè)置使用SLX FPGA優(yōu)化和生成pragmas。
二、在SLX FPGA中生成HLS pragmas
生成HLS pragmas有兩個(gè)步驟:
1. 在FPGA中查找并并行化循環(huán)
2. 生成插入HLS注釋的代碼
在第一步中,SLX的優(yōu)化引擎搜索可能的解決方案的設(shè)計(jì)空間,以確定最優(yōu)的實(shí)用程序和參數(shù)集。設(shè)計(jì)空間包括:(1)循環(huán)的不同并行化選項(xiàng),即針對(duì)不同展開因子采用流水線或unroll;(2)數(shù)組的多維分割和重構(gòu)選項(xiàng)(完全分割或循環(huán)分割);
(3)函數(shù)層次結(jié)構(gòu):內(nèi)聯(lián)或阻塞。
對(duì)于這個(gè)特定的例子,這將導(dǎo)致大約1.32 x e19的設(shè)計(jì)點(diǎn),SLX的優(yōu)化引擎將在70秒內(nèi)收斂到一個(gè)解決方案。
圖6:SLX FPGA提示視圖
圖6顯示了SLX FPGA提示視圖。提示視圖中的第四列和第五列顯示了應(yīng)用程序中不同函數(shù)和循環(huán)的CPU總成本和FPGA總成本。FPGA總成本是對(duì)特定功能或回路的延遲估計(jì)。這對(duì)于幫助開發(fā)人員集中精力進(jìn)行優(yōu)化特別有用。例如,第33行(圖6)上的weekClassifier函數(shù)在純軟件實(shí)現(xiàn)中花費(fèi)24.4%的CPU時(shí)間。然而,它對(duì)FPGA實(shí)現(xiàn)中的關(guān)鍵路徑延遲的貢獻(xiàn)僅為3.63%。
相比之下,在純軟件實(shí)現(xiàn)中,cascadeClassifier函數(shù)的第4行上的循環(huán)(圖6)花費(fèi)了79.9%的CPU時(shí)間,但貢獻(xiàn)了97.2%的FPGA關(guān)鍵路徑延遲。提示視圖還突出顯示了攜帶依賴關(guān)系的關(guān)鍵循環(huán)。請(qǐng)注意,SLX FPGA不認(rèn)為所有的lcd都是相等的,并將可以忽略的lcd(例如,歸納和縮減變量)從關(guān)鍵的lcd中分離出來。這些信息可以幫助開發(fā)人員節(jié)省時(shí)間,使他們能夠?qū)⒕性贔PGA實(shí)現(xiàn)中真正重要的應(yīng)用程序部分。
圖7:顯示自動(dòng)編譯插入的SLX FPGA代碼生成向?qū)螕簟癎enerate HLS Code”按鈕 將打開代碼轉(zhuǎn)換向?qū)В鐖D7所示。在這里,用戶可以檢查生成的代碼與原始版本的代碼并選擇/取消代碼生成的pragmas,以便對(duì)實(shí)現(xiàn)進(jìn)行微調(diào)。
三、在Vitis應(yīng)用項(xiàng)目中導(dǎo)入Xilinx對(duì)象
在一個(gè)SLX FPGA項(xiàng)目的hls文件夾包含一個(gè)Vitis hls項(xiàng)目SLX優(yōu)化的源代碼。我們使用VitisHLS打開這個(gè)項(xiàng)目,并將RTL導(dǎo)出為Xilinx對(duì)象,如圖8所示。在導(dǎo)出到Vitis之前,我們需要添加Extern“C”包裝器以確保C鏈接。
圖8:從Vitis HLS導(dǎo)出Xilinx對(duì)象
在Vitis工作空間中,創(chuàng)建一個(gè)新的應(yīng)用程序,使用一個(gè)alveso U280卡作為目標(biāo)設(shè)備,如圖9所示。
圖9:在Vitis統(tǒng)一平臺(tái)中創(chuàng)建應(yīng)用程序項(xiàng)目創(chuàng)建項(xiàng)目之后,我們將.xo文件導(dǎo)入內(nèi)核的src文件夾,如圖10所示。導(dǎo)入.xo文件后,單擊“添加硬件功能”按鈕,并選擇列表face_detect_sw。
圖10:在Vitis應(yīng)用程序項(xiàng)目中導(dǎo)入內(nèi)核開發(fā)人員現(xiàn)在可以利用加速的face_detect_sw內(nèi)核創(chuàng)建更廣泛的應(yīng)用程序,該應(yīng)用程序運(yùn)行在x86主機(jī)上。
圖11:Vitis Analyzer系統(tǒng)圖
性能改進(jìn)
在綜合設(shè)計(jì)的基礎(chǔ)上,對(duì)SLX優(yōu)化后的內(nèi)核與未優(yōu)化前的內(nèi)核的性能和資源利用率進(jìn)行了比較。對(duì)于這個(gè)特殊的設(shè)計(jì),我們?cè)试SSLX FPGA使用選定設(shè)備上的所有可用資源;但是,如果有必要,還可以添加其他約束。表1顯示了結(jié)果的摘要。我們發(fā)現(xiàn)LUT增加3倍,延遲減少7.8倍,F(xiàn)F增加2.4倍,DSP塊增加2.7倍。對(duì)于alveso卡來說,這種資源利用率的增加并不是一個(gè)大問題,因?yàn)樗匈Y源的利用率仍然低于5%。如果需要更高的性能,SLXFPGA中可以提供大量額外的分析功能,以幫助指導(dǎo)設(shè)計(jì)者更快更有效地重構(gòu)他們的代碼。
結(jié)論
本案例展示了如何利用Vitis自下而上的內(nèi)核流程,將SLX FPGA用于優(yōu)化針對(duì)PCIe連接Alveo卡的內(nèi)核。在這個(gè)例子中,SLX FPGA能夠減少一個(gè)常用的人工智能內(nèi)核的延遲,用于人臉檢測。該方法可應(yīng)用于大多數(shù)基于賽靈思的數(shù)據(jù)中心應(yīng)用,包括亞馬遜F1實(shí)例。無論是從頭開始開發(fā)應(yīng)用,還是重復(fù)使用現(xiàn)有的設(shè)計(jì)并根據(jù)需求進(jìn)行定制,都可以應(yīng)用這種方法。
原文標(biāo)題:虹科方案 | 使用HLS優(yōu)化人臉識(shí)OpenCL AI內(nèi)核
文章出處:【微信公眾號(hào):FPGA技術(shù)支持】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1620文章
21510瀏覽量
598931 -
AI
+關(guān)注
關(guān)注
87文章
28877瀏覽量
266232 -
Vitis
+關(guān)注
關(guān)注
0文章
145瀏覽量
7315
原文標(biāo)題:虹科方案 | 使用HLS優(yōu)化人臉識(shí)OpenCL AI內(nèi)核
文章出處:【微信號(hào):HK-FPGA_Dep,微信公眾號(hào):FPGA技術(shù)支持】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論