之前介紹的項目《優(yōu)秀的 Verilog/FPGA開源項目介紹(十四)- 使用FPGA實現(xiàn)LeNet-5 深度神經(jīng)網(wǎng)絡(luò)模型》最后我們分析了,純FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò)的缺點,以及現(xiàn)在FPGA廠家的加速方案,這里引用一下:
到底純FPGA適不適合這種大型神經(jīng)網(wǎng)絡(luò)的設(shè)計?這個問題其實我們不適合回答,但是FPGA廠商是的實際操作是很有權(quán)威性的,現(xiàn)在不論是Intel還是Xilinx都沒有在自己傳統(tǒng)的FPGA上推廣AI,都是在基于FPGA的SoC上推廣(Vitis和OpenVINO,前者Xilinx后者Intel),總結(jié)來看就是:純 RTL 硬件設(shè)計不是AI的好選擇。特別是對于大規(guī)模網(wǎng)絡(luò),權(quán)重和中間結(jié)果需要存儲在外部存儲器中。并且數(shù)據(jù)迭代器會更加復雜。設(shè)計周期長,AI相關(guān)領(lǐng)域迭代速度快,綜上以上幾點,可以很容易給你們指引一條道路。
目前主流的解決方案就是使用通用或?qū)S?a target="_blank">處理器來做控制工作,讓硬件來執(zhí)行計算(加速的概念),今天就介紹兩個針對以上解決方案的開源項目,這兩個項目是用FPGA進行硬件加速的必備項目。
AI算法流程
在進行項目介紹前,我們先介紹一下軟件架構(gòu)和工具集。這個后面會影響理解。
一個完整的深度學習框架中主要分為下面幾個流程:
有一些是我們不太關(guān)心的部分(對于FPGA實現(xiàn)應(yīng)用),即數(shù)據(jù)收集等,所以上訴流程再簡單分為幾個主要部分,即訓練(training)和推理(inference)、部署(deployment)。
訓練(Training)
使用訓練模型(Caffe、TensorFlow、MxNET、ONNX等)根據(jù)訓練數(shù)據(jù)得到相關(guān)的參數(shù)。舉個例子,我現(xiàn)在想要設(shè)備識別貓和狗,我首先需要收集貓和狗的圖片(這些圖片稱為訓練數(shù)據(jù)集(training dataset)),但是這些數(shù)據(jù)集在進行訓練前要有標簽(即每張照片是狗,那張照片是貓),選擇好訓練模型后,將上訴數(shù)據(jù)給訓練模型進行訓練,訓練模型不是萬能的,雖然能通過訓練不斷的優(yōu)化參數(shù),但是在訓練完還不一定能達到你想要的識別率(比如100張圖片有50張能識別),接下來就是通過優(yōu)化參數(shù),讓另外50張錯的也變成對的。這整個過程就稱之為訓練(Traning)。
推理(Inference)
這個過程比較簡單,就是把上面訓練好的模型,去識別不是訓練集里的圖片(這種圖片就叫做現(xiàn)場數(shù)據(jù)(live data)),如果對這些現(xiàn)場數(shù)據(jù)的識別也非常NICE,那么證明你的網(wǎng)絡(luò)訓練的是非常好的,如果不是特別好,就需要把訓練數(shù)據(jù)集增加,重復這一過程,直到現(xiàn)場數(shù)據(jù)也達到比較好的效果。把訓練好的模型拿出來進行現(xiàn)場實驗推理的過程,稱為推理(Inference)。
部署(deployment)
部署的理解很簡單,就是經(jīng)過上面兩個步驟的模型應(yīng)用,把它放在某個硬件平臺上運行,這個過程稱之為部署(deployment)。
其實各大廠家推出自己的架構(gòu)/工具都是基于上訴流程,不同點就是會針對自家的硬件做細節(jié)優(yōu)化。
現(xiàn)在常見的模型推理部署框架有很多,比如:英特爾的OpenVINO,英偉達的TensorRT,谷歌的Mediapipe,Xilinx Vitis。
Intel FPGA OpenVINO
介紹
OpenVINO是Intel推出的用于優(yōu)化和部署 AI 推理的開源工具包。
提升計算機視覺、自動語音識別、自然語言處理和其他常見任務(wù)中的深度學習性能
使用通過 TensorFlow、PyTorch 等流行框架訓練的模型
減少資源需求并在從邊緣到云的一系列英特爾平臺上高效部署
來源:知乎@火狐貍
上圖就是OpenVINO的組成,針對第一節(jié)的 AI算法流程 理解起來不是很難。其中,模型優(yōu)化器是線下模型轉(zhuǎn)換,推理引擎是部署在設(shè)備上運行的AI負載。
因為OpenVINO還有針對自己CPU的架構(gòu),沒有對FPGA部分過多介紹,所以一些細節(jié)會在下一個項目介紹。
視頻介紹
關(guān)于OpenFPGA在FPGA方面的加速應(yīng)用,可以查看下面的兩個官方中文視頻介紹,這里就不再贅述。
Xilinx FPGA Vitis AI
2019年10月,Xilinx正式發(fā)布了統(tǒng)一開發(fā)軟件平臺Vitis。Vitis平臺無需用戶深入掌握硬件專業(yè)知識,即軟件和算法自動適配到Xilinx的硬件架構(gòu)。Xilinx Vitis AI是針對自家硬件平臺推出的針對AI模型的硬件實現(xiàn)。Vitis AI 提供的工具鏈能在數(shù)分鐘內(nèi)完成優(yōu)化、量化和編譯操作,在賽靈思器件上高效地運行預先訓練好的AI模型。
介紹
上圖就是Vitis AI的整體架構(gòu),主要分為AI Model Zoo、AI 優(yōu)化器、AI 量化器、AI 編譯器、AI 配置器、AI 庫、XRT、以及核心DPU。
整個流程和上圖類似,下面針對每個部分簡單介紹(Intel的類似)。
AI Model Zoo
這個就是最流行框架 Pytorch、Tensorflow、Tensorflow 2 和 Caffe 的現(xiàn)成深度學習模型的集合,也就是我們可以簡單及快速的進行AI模型的訓練和優(yōu)化。
AI 優(yōu)化器、AI 量化器、AI 編譯器
AI 優(yōu)化器功能簡介
這三個作用就是將訓練好的模型進行優(yōu)化,其中AI 優(yōu)化器是在犧牲很少的精度情況下降模型的復雜度;AI 量化器的作用其實和FPGA的結(jié)構(gòu)有關(guān)(FPGA無法處理浮點數(shù)據(jù)),AI 量化器就是將32 位浮點權(quán)值和激活量轉(zhuǎn)換為 INT8 這樣的定點數(shù)據(jù)。
AI 量化器功能簡介
AI 編譯器的作用就是將 AI 模型進行高級優(yōu)化,主要包括指令集、數(shù)據(jù)流、層融合和指令排程等,并可盡量重復使用片上內(nèi)存。
AI 編譯器功能簡介
AI 配置器、AI 庫
AI 配置器功能簡介
AI 配置器主要是輔助開發(fā)人員對AI模型的方案實施的效率和利用率進行分析的性能分析器。
AI 庫功能簡介
AI庫主要功能就是將DPU和上層進行鏈接(基于帶有統(tǒng)一 API 的 Vitis AI Runtime 構(gòu)建)。
XRT、DPU
這兩個是Xilinx的“王牌”了,其中DPU大家應(yīng)該不陌生,是DNNDK的升級版本(DNNDK官方應(yīng)該已經(jīng)不維護了)。
XRT
Xilinx 運行時庫 (XRT) 是 Vitis 統(tǒng)一軟件平臺和 Vitis AI 開發(fā)環(huán)境的一個重要組成部分,其可幫助開發(fā)人員繼續(xù)使用熟悉的編程語言(如 C/C++、Python 以及高層次特定域框架 TensorFlow 和咖啡等)在 Xilinx 靈活應(yīng)變的平臺上部署。
主要功能如下圖所示:
DPU
詳細介紹:PG338 PG366
Xilinx深度學習處理器單元 (DPU) 是一個專門用于卷積神經(jīng)網(wǎng)絡(luò)的可編程引擎。該單元包含寄存器配置模塊、數(shù)據(jù)控制器模塊和卷積計算模塊。在 DPU 中部署的卷積神經(jīng)網(wǎng)絡(luò)包括 VGG、ResNet、GoogLeNet、YOLO、SSD、MobileNet 以及 FPN 等。
總結(jié)
今天介紹了兩個最重要的FPGA加速神經(jīng)網(wǎng)絡(luò)的開源項目,而且經(jīng)過幾年的發(fā)展越發(fā)穩(wěn)定,總結(jié)一下就是,如果想用FPGA加速神經(jīng)網(wǎng)絡(luò)就快點去看看吧,這里在簡單推薦一下這兩個項目的入門開發(fā)板。
Intel C5P 開發(fā)板
Intel OpenVINO入門開發(fā)板
Xilinx Kria KV260開發(fā)板
最后,還是感謝各個大佬開源的項目,讓我們受益匪淺。后面有什么感興趣方面的項目,大家可以在后臺留言或者加微信留言,今天就到這,我是爆肝的碎碎思,期待下期文章與你相見。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1630文章
21803瀏覽量
606455 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4785瀏覽量
101246 -
Xilinx
+關(guān)注
關(guān)注
71文章
2172瀏覽量
122264 -
開源
+關(guān)注
關(guān)注
3文章
3415瀏覽量
42749
原文標題:想用FPGA加速神經(jīng)網(wǎng)絡(luò),這兩個開源項目你必須要了解
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
脈沖耦合神經(jīng)網(wǎng)絡(luò)在FPGA上的實現(xiàn)誰會?
【PYNQ-Z2申請】基于PYNQ的卷積神經(jīng)網(wǎng)絡(luò)加速
基于賽靈思FPGA的卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)設(shè)計
如何設(shè)計BP神經(jīng)網(wǎng)絡(luò)圖像壓縮算法?
如何移植一個CNN神經(jīng)網(wǎng)絡(luò)到FPGA中?
基于FPGA的神經(jīng)網(wǎng)絡(luò)的性能評估及局限性
如何用ARM和FPGA搭建神經(jīng)網(wǎng)絡(luò)處理器通信方案?
如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?
EdgeBoard中神經(jīng)網(wǎng)絡(luò)算子在FPGA中的實現(xiàn)方法是什么?
如何使用stm32cube.ai部署神經(jīng)網(wǎng)絡(luò)?
請問一下fpga加速神經(jīng)網(wǎng)絡(luò)為什么要用arm核呢
用FPGA去實現(xiàn)大型神經(jīng)網(wǎng)絡(luò)的設(shè)計
基于FPGA的SIMD卷積神經(jīng)網(wǎng)絡(luò)加速器
FPGA加速神經(jīng)網(wǎng)絡(luò)的矩陣乘法
![<b class='flag-5'>FPGA</b><b class='flag-5'>加速</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的矩陣乘法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論