本文介紹了 DNN 的工作原理,以及為什么 FPGA 在推理任務(wù)中越來越受歡迎。它繼續(xù)展示如何使用真實(shí)世界的演示在開發(fā)平臺(tái)上執(zhí)行 DNN 工作負(fù)載。
機(jī)器學(xué)習(xí)是使用算法解析數(shù)據(jù),從中學(xué)習(xí),然后做出決策或預(yù)測的過程。機(jī)器不是準(zhǔn)備程序代碼來完成任務(wù),而是使用大量數(shù)據(jù)和算法進(jìn)行“訓(xùn)練”,以自行執(zhí)行任務(wù)。
使用神經(jīng)網(wǎng)絡(luò)(NN)算法正在徹底改變機(jī)器學(xué)習(xí),這些算法是我們大腦中發(fā)現(xiàn)的生物神經(jīng)元的數(shù)字模型。這些模型包含像大腦神經(jīng)元一樣連接的層。許多應(yīng)用受益于機(jī)器學(xué)習(xí),包括圖像分類/識(shí)別、大數(shù)據(jù)模式檢測、ADAS、欺詐檢測、食品質(zhì)量保證和財(cái)務(wù)預(yù)測。
作為機(jī)器學(xué)習(xí)的算法,神經(jīng)網(wǎng)絡(luò)包括由多層組成的各種拓?fù)浜痛笮?第一層(“輸入層”),中間層(“隱藏層”)和最后一層(“輸出層”)。隱藏層對(duì)輸入執(zhí)行各種專用任務(wù),并將其傳遞到下一層,直到在輸出層生成預(yù)測。
一些神經(jīng)網(wǎng)絡(luò)相對(duì)簡單,只有兩層或三層神經(jīng)元,而所謂的深度神經(jīng)網(wǎng)絡(luò)(DNN)可能包含多達(dá)1000層。為特定任務(wù)確定正確的 NN 拓?fù)浜痛笮⌒枰獙?shí)驗(yàn)并與類似網(wǎng)絡(luò)進(jìn)行比較。
設(shè)計(jì)高性能機(jī)器學(xué)習(xí)應(yīng)用需要網(wǎng)絡(luò)優(yōu)化(通常使用修剪和量化技術(shù))和計(jì)算加速(使用 ASIC 或 FPGA 執(zhí)行)。
在本文中,我們將討論 DNN 的工作原理、為什么 FPGA 在 DNN 推理中越來越受歡迎,并考慮使用 FPGA 開始設(shè)計(jì)和實(shí)現(xiàn)基于深度學(xué)習(xí)的應(yīng)用程序所需的工具 [1]。
開發(fā) DNN 應(yīng)用程序的設(shè)計(jì)流程
設(shè)計(jì) DNN 應(yīng)用程序的過程分為三個(gè)步驟。這些步驟是選擇正確的網(wǎng)絡(luò),訓(xùn)練網(wǎng)絡(luò),然后將新數(shù)據(jù)應(yīng)用于訓(xùn)練的模型進(jìn)行預(yù)測(推理)。
如前所述,DNN 模型中有多個(gè)層,每個(gè)層都有一個(gè)特定的任務(wù)。在深度學(xué)習(xí)中,每一層都旨在提取不同級(jí)別的特征。例如,在邊緣檢測神經(jīng)網(wǎng)絡(luò)中,第一中間層檢測邊緣和曲線等特征。然后將第一中間層的輸出饋送到第二層,第二層負(fù)責(zé)檢測更高級(jí)別的特征,例如半圓形或正方形。第三層中間層組裝其他層的輸出以創(chuàng)建熟悉的對(duì)象,最后一層檢測對(duì)象。
在另一個(gè)例子中,如果我們開始識(shí)別停車標(biāo)志,訓(xùn)練好的系統(tǒng)將包括用于檢測八角形、顏色和字母“S”、“T”、“O”和“P”的層,這些順序是孤立的。輸出圖層將負(fù)責(zé)確定它是否為停車標(biāo)志。
DNN 學(xué)習(xí)模型
有四種主要的學(xué)習(xí)模型:
監(jiān)督:在此模型中,所有訓(xùn)練數(shù)據(jù)都被標(biāo)記。NN 將輸入數(shù)據(jù)分類為從訓(xùn)練數(shù)據(jù)集中學(xué)習(xí)的不同標(biāo)簽。
監(jiān)督:在無監(jiān)督學(xué)習(xí)中,深度學(xué)習(xí)模型被交給一個(gè)數(shù)據(jù)集,而沒有明確的說明如何處理它。訓(xùn)練數(shù)據(jù)集是沒有特定所需結(jié)果或正確答案的示例集合。然后,NN 嘗試通過提取有用的特征并分析其結(jié)構(gòu)來自動(dòng)查找數(shù)據(jù)中的結(jié)構(gòu)。
半監(jiān)督:這包括一個(gè)訓(xùn)練數(shù)據(jù)集,其中包含標(biāo)記和未標(biāo)記的數(shù)據(jù)。當(dāng)難以從數(shù)據(jù)中提取相關(guān)特征時(shí),此方法特別有用,并且標(biāo)記示例對(duì)專家來說是一項(xiàng)耗時(shí)的任務(wù)。
加固:這是獎(jiǎng)勵(lì)網(wǎng)絡(luò)以獲得結(jié)果并提高性能的行為。這是一個(gè)迭代過程:反饋的輪次越多,網(wǎng)絡(luò)就越好。這種技術(shù)對(duì)于訓(xùn)練機(jī)器人特別有用,機(jī)器人在駕駛自動(dòng)駕駛汽車或管理倉庫庫存等任務(wù)中做出一系列決策。
訓(xùn)練與推理
在訓(xùn)練中,未經(jīng)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型從現(xiàn)有數(shù)據(jù)中學(xué)習(xí)新功能。一旦訓(xùn)練好的模型準(zhǔn)備就緒,就會(huì)向其提供新數(shù)據(jù)并測量系統(tǒng)的性能。正確檢測圖像的比例稱為推理。
在圖 1 給出的示例(識(shí)別貓)中,輸入訓(xùn)練數(shù)據(jù)集后,DNN 開始調(diào)整權(quán)重以查找貓;其中權(quán)重是每個(gè)神經(jīng)元之間連接強(qiáng)度的量度。
如果結(jié)果錯(cuò)誤,錯(cuò)誤將被傳播回網(wǎng)絡(luò)層以修改權(quán)重。這個(gè)過程一次又一次地發(fā)生,直到獲得正確的權(quán)重,從而每次都得到正確的答案。
如何實(shí)現(xiàn)高性能 DNN 應(yīng)用程序
使用 DNN 進(jìn)行分類需要一個(gè)大數(shù)據(jù)集,這提高了準(zhǔn)確性。但是,缺點(diǎn)是它為模型生成許多參數(shù),這增加了計(jì)算成本并且需要高內(nèi)存帶寬。
有兩種主要方法可以優(yōu)化 DNN 應(yīng)用程序。第一種是通過修剪冗余連接、量化權(quán)重和融合神經(jīng)網(wǎng)絡(luò)來縮小網(wǎng)絡(luò)規(guī)模的網(wǎng)絡(luò)優(yōu)化。
修剪:這是 DNN 壓縮的一種形式。它減少了與其他神經(jīng)元的突觸連接數(shù)量,從而減少了數(shù)據(jù)總量。通常,刪除接近零的權(quán)重。這有助于消除冗余連接,而分類等任務(wù)的精度略有下降[2]。
量化:這樣做是為了將神經(jīng)網(wǎng)絡(luò)調(diào)整到合理的大小,同時(shí)實(shí)現(xiàn)高性能的準(zhǔn)確性。這對(duì)于邊緣應(yīng)用程序尤其重要,因?yàn)閮?nèi)存大小和計(jì)算數(shù)量必然受到限制。在此類應(yīng)用中,為了獲得更好的性能,模型參數(shù)保存在本地存儲(chǔ)器中,以避免使用 PCIe 或其他互連接口進(jìn)行耗時(shí)的傳輸。在該方法中,執(zhí)行通過低位寬度數(shù) (INT8) 神經(jīng)網(wǎng)絡(luò)近似使用浮點(diǎn)數(shù) (FTP32) 的神經(jīng)網(wǎng)絡(luò)的過程。這大大降低了使用神經(jīng)網(wǎng)絡(luò)的內(nèi)存需求和計(jì)算成本。通過量化模型,我們略微失去了精度和準(zhǔn)確性。但是,對(duì)于大多數(shù)應(yīng)用程序,不需要 32 位浮點(diǎn)數(shù)。
優(yōu)化 DNN 的第二種方法是使用 ASIC 或 FPGA 進(jìn)行計(jì)算加速。其中,后一種選擇對(duì)機(jī)器學(xué)習(xí)應(yīng)用程序有很多好處。其中包括:
功率效率:FPGA 提供靈活且可定制的架構(gòu),支持僅使用我們需要的計(jì)算資源。擁有用于 DNN 的低功耗系統(tǒng)在許多應(yīng)用中至關(guān)重要,例如 ADAS。
可重配置性:與ASIC相比,F(xiàn)PGA被認(rèn)為是原始的可編程硬件。此功能使它們易于使用并顯著縮短了上市時(shí)間。為了趕上日常發(fā)展的機(jī)器學(xué)習(xí)算法,能夠?qū)ο到y(tǒng)進(jìn)行重新編程是非常有益的,而不是等待SoC和ASIC的漫長制造時(shí)間。
低延遲:與最快的片外存儲(chǔ)器相比,F(xiàn)PGA 內(nèi)部的塊 RAM 提供至少快 50 倍的數(shù)據(jù)傳輸速度。對(duì)于機(jī)器學(xué)習(xí)應(yīng)用程序來說,這是一個(gè)游戲規(guī)則的改變者,對(duì)于這些應(yīng)用程序來說,低延遲是必不可少的。
性能可移植性:您 可以 獲得 下一代 FPGA 設(shè)備 的 所有 優(yōu)勢, 而 無需 任何 代碼 修改 或 回歸 測試。
靈活性:FPGA 是原始硬件,可以針對(duì)任何架構(gòu)進(jìn)行配置。沒有固定的架構(gòu)或數(shù)據(jù)路徑來束縛您。這種靈活性使FPGA能夠進(jìn)行大規(guī)模并行處理,因?yàn)閿?shù)據(jù)路徑可以隨時(shí)重新配置。這種靈活性還帶來了任意對(duì)任意的 I/O 連接功能。這使得 FPGA 能夠連接到任何設(shè)備、網(wǎng)絡(luò)或存儲(chǔ)設(shè)備,而無需主機(jī) CPU。
功能安全:FPGA用戶可以在硬件中實(shí)現(xiàn)任何安全功能。根據(jù)應(yīng)用的不同,可以高效地進(jìn)行編碼。FPGA 廣泛用于航空電子、自動(dòng)化和安全性,這證明了這些設(shè)備的功能安全性,機(jī)器學(xué)習(xí)算法可以從中受益。
成本效益:FPGA是可重新配置的,應(yīng)用的上市時(shí)間相當(dāng)短。ASIC非常昂貴,如果沒有出現(xiàn)錯(cuò)誤,制造時(shí)間需要6到12個(gè)月。這對(duì)于機(jī)器學(xué)習(xí)應(yīng)用程序來說是一個(gè)優(yōu)勢,因?yàn)槌杀痉浅V匾?,NN 算法每天都在發(fā)展。
現(xiàn)代 FPGA 通常在其結(jié)構(gòu)中提供一組豐富的 DSP 和 BRAM 資源,可用于 NN 處理。但是,與 DNN 的深度和層大小相比,這些資源已不足以進(jìn)行完整和直接的映射;當(dāng)然不是像前幾代神經(jīng)網(wǎng)絡(luò)加速器那樣經(jīng)常這樣做。即使使用 Zynq MPSoC 等設(shè)備(即使是最大的設(shè)備也僅限于 2k DSP 切片,BRAM 總大小小于 10 MB),也無法將所有神經(jīng)元和權(quán)重直接映射到 FPGA 上。
那么,我們?nèi)绾卫肍PGA的能效、可重編程性、低延遲和其他特性進(jìn)行深度學(xué)習(xí)呢?
需要新的 NN 算法和架構(gòu)修改,以便在內(nèi)存資源有限的平臺(tái)(如 FPGA)上實(shí)現(xiàn) DNN 的推理。
現(xiàn)代 DNN 將應(yīng)用程序劃分為較小的塊,由 FPGA 處理。由于FPGA中的片上存儲(chǔ)器不足以存儲(chǔ)網(wǎng)絡(luò)所需的所有權(quán)重,因此我們只需要存儲(chǔ)當(dāng)前階段的權(quán)重和參數(shù),這些權(quán)重和參數(shù)是從外部存儲(chǔ)器(可能是DDR存儲(chǔ)器)加載的。
但是,在FPGA和存儲(chǔ)器之間來回傳輸數(shù)據(jù)將使延遲增加多達(dá)50倍。首先想到的是減少內(nèi)存數(shù)據(jù)。除了上面討論的網(wǎng)絡(luò)優(yōu)化(修剪和量化)之外,還有:
權(quán)重編碼:在FPGA中,可以無條件地選擇編碼格式??赡軙?huì)有一些準(zhǔn)確性損失,但是與數(shù)據(jù)傳輸造成的延遲及其處理的復(fù)雜性相比,這可以忽略不計(jì)。權(quán)重編碼創(chuàng)建了二進(jìn)制神經(jīng)網(wǎng)絡(luò)(BNN),其中權(quán)重減少到只有一位。這種方法減少了用于傳輸和存儲(chǔ)的數(shù)據(jù)量,以及計(jì)算的復(fù)雜性。但是,此方法僅導(dǎo)致具有固定輸入寬度的硬件乘法器的小幅減少。
批處理:在這種方法中,我們使用流水線方法將芯片上已有的權(quán)重重用于多個(gè)輸入。它還減少了從片外存儲(chǔ)器傳輸?shù)?FPGA 的數(shù)據(jù)量 [5]。
在 FPGA 上設(shè)計(jì)和實(shí)現(xiàn) DNN 應(yīng)用
讓我們深入了解如何在 FPGA 上實(shí)現(xiàn) DNN。在此過程中,我們將利用最合適的商用解決方案來快速跟蹤應(yīng)用程序的開發(fā)。
例如,Aldec有一個(gè)名為TySOM-3A-ZU19EG的嵌入式開發(fā)板。除了各種外設(shè)外,它還搭載了賽靈思 Zynq UltraScale+ MPSoC 系列中最大的 FPGA,該器件擁有超過 100 萬個(gè)邏輯單元,包括一個(gè)運(yùn)行頻率高達(dá) 1.5GHz 的四核 Arm Cortex-A53 處理器。
重要的是,就我們的目的而言,這款龐大的 MPSoC 還支持 Xilinx 的深度學(xué)習(xí)處理單元 (DPU),該單元是該公司為機(jī)器學(xué)習(xí)開發(fā)人員創(chuàng)建的。
DPU 是專用于卷積神經(jīng)網(wǎng)絡(luò) (CNN) 處理的可編程引擎。它旨在加速計(jì)算機(jī)視覺應(yīng)用(如圖像/視頻分類和對(duì)象跟蹤/偵測)中使用的 DNN 算法的計(jì)算工作負(fù)載。
DPU有一個(gè)特定的指令集,使其能夠有效地與許多CNN一起工作。與常規(guī)處理器一樣,DPU 獲取、解碼和執(zhí)行存儲(chǔ)在 DDR 內(nèi)存中的指令。該單元支持多個(gè)CNN,如VGG,ResNet,GoogLeNet,YOLO,SSD,MobileNet,F(xiàn)PN等[3]。
DPU IP 可以作為一個(gè)模塊集成到所選 Zynq-7000 SoC 和 Zynq? UltraScale?+ MPSoC 器件的可編程邏輯 (PL) 中,并直接連接到處理系統(tǒng) (PS)。
為了創(chuàng)建 DPU 指令,Xilinx 提供了深度神經(jīng)網(wǎng)絡(luò)開發(fā)套件 (DNNDK) 工具包。賽靈思表示:
DNNDK被設(shè)計(jì)為一個(gè)集成框架,旨在簡化和加速深度學(xué)習(xí)處理器單元(DPU)上的深度學(xué)習(xí)應(yīng)用程序開發(fā)和部署。DNNDK 是一個(gè)優(yōu)化的推理引擎,它使 DPU 的計(jì)算能力變得容易訪問。它為開發(fā)深度學(xué)習(xí)應(yīng)用程序提供了最好的簡單性和生產(chǎn)力,涵蓋了神經(jīng)網(wǎng)絡(luò)模型壓縮、編程、編譯和運(yùn)行時(shí)啟用的各個(gè)階段[4]。
DNNDK 框架包括以下單元:
體面:執(zhí)行修剪和量化以滿足低延遲和高吞吐量
DNNC:將神經(jīng)網(wǎng)絡(luò)算法映射到 DPU 指令
DNNAS:將 DPU 指令組裝成 ELF 二進(jìn)制代碼
N2立方體:充當(dāng) DNNDK 應(yīng)用程序的加載程序,并處理資源分配和 DPU 調(diào)度。其核心組件包括 DPU 驅(qū)動(dòng)程序、DPU 加載器、示蹤器和用于應(yīng)用程序開發(fā)的編程 API。
分析器:由DPU示蹤劑和DSight組成。D 跟蹤器在 DPU 上運(yùn)行 NN 時(shí)收集原始分析數(shù)據(jù)。DSight 使用此數(shù)據(jù)生成可視化圖表以進(jìn)行性能分析。
探險(xiǎn)家:提供 DPU 的運(yùn)行模式配置、狀態(tài)檢查和代碼簽名檢查。
DDump:將信息轉(zhuǎn)儲(chǔ)到 DPU ELF、混合可執(zhí)行文件或 DPU 共享庫中。它加快了用戶的調(diào)試和分析速度。
這些適合圖 2 所示的流程。
圖2.上述深度神經(jīng)網(wǎng)絡(luò)開發(fā)工具包 (DNNK) 框架使開發(fā)人員能夠更輕松地完成基于 FPGA 的機(jī)器學(xué)習(xí)項(xiàng)目的設(shè)計(jì)過程。
使用 DNNDK 使開發(fā)人員設(shè)計(jì)基于 FPGA 的機(jī)器學(xué)習(xí)項(xiàng)目的過程變得更加容易;此外,像Aldec的TySOM-3A-ZU19EG板這樣的平臺(tái)也提供了一個(gè)寶貴的啟動(dòng)。例如,Aldec 準(zhǔn)備了一些針對(duì)電路板的示例,包括手勢檢測、行人檢測、分段和交通檢測,這意味著開發(fā)人員不會(huì)從一張白紙開始。
讓我們考慮一下今年早些時(shí)候在Arm TechCon上展示的一個(gè)演示。這是一個(gè)使用TySOM-3A-ZU19EG和FMC-ADAS子卡構(gòu)建的交通檢測演示,該子卡為5倍高速數(shù)據(jù)(HSD)攝像頭、雷達(dá)、激光雷達(dá)和超聲波傳感器提供接口和外設(shè),這些傳感器是大多數(shù)ADAS應(yīng)用的感官輸入。
圖 3 顯示了演示的體系結(jié)構(gòu)。FPGA 中實(shí)現(xiàn)的兩個(gè) DPU 通過 AXI HP 端口連接到處理單元,以執(zhí)行深度學(xué)習(xí)推理任務(wù),例如圖像分類、對(duì)象檢測和語義分割。DPU 需要指令來實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)由 DNNC 和 DNNAS 工具準(zhǔn)備。他們還需要訪問輸入視頻和輸出數(shù)據(jù)的內(nèi)存位置。
圖3.流量檢測演示具有 5 個(gè)視頻輸入管道,用于數(shù)據(jù)打包、AXI4 到 AXI 流數(shù)據(jù)傳輸、色彩空間轉(zhuǎn)換 (YUV2RGB) 以及將視頻發(fā)送到內(nèi)存。
應(yīng)用程序在應(yīng)用程序處理單元 (APU) 上運(yùn)行,通過管理中斷和在單元之間執(zhí)行數(shù)據(jù)傳輸來控制系統(tǒng)。DPU 和用戶應(yīng)用程序之間的連接是通過 DPU API 和 Linux 驅(qū)動(dòng)程序?qū)崿F(xiàn)的。有一些功能可以將新圖像/視頻讀取到 DPU、運(yùn)行處理并將輸出發(fā)送回用戶應(yīng)用程序。
模型的開發(fā)和訓(xùn)練是在FPGA之外使用Caffe完成的,而優(yōu)化和編譯是使用作為DNNDK工具包的一部分提供的DECENT和DNNC單元完成的(圖2)。在此設(shè)計(jì)中,SSD 對(duì)象檢測 CNN 用于背景、行人和車輛檢測。
在性能方面,使用四個(gè)輸入通道實(shí)現(xiàn)了45 fps,展示了使用TySOM-3A-ZU19EG和DNNDK工具包的高性能深度學(xué)習(xí)應(yīng)用。
審核編輯:郭婷
-
FPGA
+關(guān)注
關(guān)注
1645文章
22049瀏覽量
618359 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8503瀏覽量
134601
發(fā)布評(píng)論請(qǐng)先 登錄
BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系
BP神經(jīng)網(wǎng)絡(luò)在圖像識(shí)別中的應(yīng)用
深度學(xué)習(xí)入門:簡單神經(jīng)網(wǎng)絡(luò)的構(gòu)建與實(shí)現(xiàn)
人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

在邊緣設(shè)備上設(shè)計(jì)和部署深度神經(jīng)網(wǎng)絡(luò)的實(shí)用框架
AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測模型
AI模型部署邊緣設(shè)備的奇妙之旅:如何實(shí)現(xiàn)手寫數(shù)字識(shí)別
卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)工具與框架
卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較
深度學(xué)習(xí)中的卷積神經(jīng)網(wǎng)絡(luò)模型
LSTM神經(jīng)網(wǎng)絡(luò)在語音識(shí)別中的應(yīng)用實(shí)例
關(guān)于卷積神經(jīng)網(wǎng)絡(luò),這些概念你厘清了么~
【飛凌嵌入式OK3576-C開發(fā)板體驗(yàn)】RKNPU圖像識(shí)別測試
FPGA在深度神經(jīng)網(wǎng)絡(luò)中的應(yīng)用
分享幾個(gè)用FPGA實(shí)現(xiàn)的小型神經(jīng)網(wǎng)絡(luò)

評(píng)論