想用FPGA加速神經網路,這兩個開源專案你必須要了解

想用FPGA加速神經網路,這兩個開源專案你必須要了解

之前介紹的專案《優秀的 Verilog/FPGA開源專案介紹(十四)- 使用FPGA實現LeNet-5 深度神經網路模型》最後我們分析了,純FPGA實現神經網路的缺點,以及現在FPGA廠家的加速方案,這裡引用一下:

到底純FPGA適不適合這種大型神經網路的設計?這個問題其實我們不適合回答,但是FPGA廠商是的實際操作是很有權威性的,現在不論是Intel還是Xilinx都沒有在自己傳統的FPGA上推廣AI,都是在基於FPGA的SoC上推廣(Vitis和OpenVINO,前者Xilinx後者Intel),總結來看就是:純 RTL 硬體設計不是AI的好選擇。特別是對於大規模網路,權重和中間結果需要儲存在外部儲存器中。並且資料迭代器會更加複雜。設計週期長,AI相關領域迭代速度快,綜上以上幾點,可以很容易給你們指引一條道路。

目前主流的解決方案就是使用通用或專用處理器來做控制工作,讓硬體來執行計算(加速的概念),今天就介紹兩個針對以上解決方案的開源專案,這兩個專案是用FPGA進行硬體加速的必備專案。

AI演算法流程

在進行專案介紹前,我們先介紹一下軟體架構和工具集。這個後面會影響理解。

一個完整的深度學習框架中主要分為下面幾個流程:

想用FPGA加速神經網路,這兩個開源專案你必須要了解

有一些是我們不太關心的部分(對於FPGA實現應用),即資料收集等,所以上訴流程再簡單分為幾個主要部分,即訓練(training)和推理(inference)、部署(deployment)。

訓練(Training)

使用訓練模型(Caffe、TensorFlow、MxNET、ONNX等)根據訓練資料得到相關的引數。舉個例子,我現在想要裝置識別貓和狗,我首先需要收集貓和狗的圖片(這些圖片稱為訓練資料集(training dataset)),但是這些資料集在進行訓練前要有標籤(即每張照片是狗,那張照片是貓),選擇好訓練模型後,將上訴資料給訓練模型進行訓練,訓練模型不是萬能的,雖然能透過訓練不斷的最佳化引數,但是在訓練完還不一定能達到你想要的識別率(比如100張圖片有50張能識別),接下來就是透過最佳化引數,讓另外50張錯的也變成對的。這整個過程就稱之為訓練(Traning)。

推理(Inference)

這個過程比較簡單,就是把上面訓練好的模型,去識別不是訓練集裡的圖片(這種圖片就叫做現場資料(live data)),如果對這些現場資料的識別也非常NICE,那麼證明你的網路訓練的是非常好的,如果不是特別好,就需要把訓練資料集增加,重複這一過程,直到現場資料也達到比較好的效果。把訓練好的模型拿出來進行現場實驗推理的過程,稱為推理(Inference)。

部署(deployment)

部署的理解很簡單,就是經過上面兩個步驟的模型應用,把它放在某個硬體平臺上執行,這個過程稱之為部署(deployment)。

其實各大廠家推出自己的架構/工具都是基於上訴流程,不同點就是會針對自家的硬體做細節最佳化。

現在常見的模型推理部署框架有很多,比如:英特爾的OpenVINO,英偉達的TensorRT,谷歌的Mediapipe,Xilinx Vitis。

Intel FPGA OpenVINO

下載地址

https://software。intel。com/content/www/cn/zh/develop/tools/openvino-toolkit/choose-download。html?cid=other&source=wechat_share_oth&campid=prc_q3_iotg_ov-da&content=wksp-reg_all

官方資源

一、主頁

https://software。intel。com/content/www/cn/zh/develop/tools/openvino-toolkit。html

二、原始碼

https://github。com/openvinotoolkit

https://gitee。com/openvinotoolkit-prc

三、文件

https://docs。openvinotoolkit。org/

四、學習

https://software。intel。com/content/www/cn/zh/develop/tools/openvino-toolkit/learn。html

影片教程

https://space。bilibili。com/38566875

免費的初級教程

https://edu。csdn。net/course/detail/27685

介紹

OpenVINO是Intel推出的用於最佳化和部署 AI 推理的開源工具包。

想用FPGA加速神經網路,這兩個開源專案你必須要了解

提升計算機視覺、自動語音識別、自然語言處理和其他常見任務中的深度學習效能

使用透過 TensorFlow、PyTorch 等流行框架訓練的模型

減少資源需求並在從邊緣到雲的一系列英特爾平臺上高效部署

想用FPGA加速神經網路,這兩個開源專案你必須要了解

上圖就是OpenVINO的組成,針對第一節的 AI演算法流程 理解起來不是很難。其中,模型最佳化器是線下模型轉換,推理引擎是部署在裝置上執行的AI負載。

因為OpenVINO還有針對自己CPU的架構,沒有對FPGA部分過多介紹,所以一些細節會在下一個專案介紹。

想用FPGA加速神經網路,這兩個開源專案你必須要了解

Xilinx FPGA Vitis AI

開源連結:

https://github。com/Xilinx/Vitis-Tutorials

https://github。com/Xilinx/Vitis_Libraries

官方網址:

https://china。xilinx。com/products/design-tools/vitis/vitis-platform。html

想用FPGA加速神經網路,這兩個開源專案你必須要了解

2019年10月,Xilinx正式釋出了統一開發軟體平臺Vitis。Vitis平臺無需使用者深入掌握硬體專業知識,即軟體和演算法自動適配到Xilinx的硬體架構。Xilinx Vitis AI是針對自家硬體平臺推出的針對AI模型的硬體實現。Vitis AI 提供的工具鏈能在數分鐘內完成最佳化、量化和編譯操作,在賽靈思器件上高效地執行預先訓練好的AI模型。

介紹

想用FPGA加速神經網路,這兩個開源專案你必須要了解

上圖就是Vitis AI的整體架構,主要分為AI Model Zoo、AI 最佳化器、AI 量化器、AI 編譯器、AI 配置器、AI 庫、XRT、以及核心DPU。

整個流程和上圖類似,下面針對每個部分簡單介紹(Intel的類似)。

AI Model Zoo

想用FPGA加速神經網路,這兩個開源專案你必須要了解

這個就是最流行框架 Pytorch、Tensorflow、Tensorflow 2 和 Caffe 的現成深度學習模型的集合,也就是我們可以簡單及快速的進行AI模型的訓練和最佳化。

AI 最佳化器、AI 量化器、AI 編譯器

想用FPGA加速神經網路,這兩個開源專案你必須要了解

AI 最佳化器功能簡介

這三個作用就是將訓練好的模型進行最佳化,其中AI 最佳化器是在犧牲很少的精度情況下降模型的複雜度;AI 量化器的作用其實和FPGA的結構有關(FPGA無法處理浮點資料),AI 量化器就是將32 位浮點權值和啟用量轉換為 INT8 這樣的定點資料。

想用FPGA加速神經網路,這兩個開源專案你必須要了解

AI 量化器功能簡介

AI 編譯器的作用就是將 AI 模型進行高階最佳化,主要包括指令集、資料流、層融合和指令排程等,並可儘量重複使用片上記憶體。

想用FPGA加速神經網路,這兩個開源專案你必須要了解

AI 編譯器功能簡介

AI 配置器、AI 庫

想用FPGA加速神經網路,這兩個開源專案你必須要了解

AI 配置器功能簡介

AI 配置器主要是輔助開發人員對AI模型的方案實施的效率和利用率進行分析的效能分析器。

想用FPGA加速神經網路,這兩個開源專案你必須要了解

AI 庫功能簡介

AI庫主要功能就是將DPU和上層進行連結(基於帶有統一 API 的 Vitis AI Runtime 構建)。

XRT、DPU

想用FPGA加速神經網路,這兩個開源專案你必須要了解

這兩個是Xilinx的“王牌”了,其中DPU大家應該不陌生,是DNNDK的升級版本(DNNDK官方應該已經不維護了)。

XRT

想用FPGA加速神經網路,這兩個開源專案你必須要了解

Xilinx 執行時庫 (XRT) 是 Vitis 統一軟體平臺和 Vitis AI 開發環境的一個重要組成部分,其可幫助開發人員繼續使用熟悉的程式語言(如 C/C++、Python 以及高層次特定域框架 TensorFlow 和咖啡等)在 Xilinx 靈活應變的平臺上部署。

主要功能如下圖所示:

想用FPGA加速神經網路,這兩個開源專案你必須要了解

DPU

想用FPGA加速神經網路,這兩個開源專案你必須要了解

詳細介紹:PG338 PG366

Xilinx深度學習處理器單元 (DPU) 是一個專門用於卷積神經網路的可程式設計引擎。該單元包含暫存器配置模組、資料控制器模組和卷積計算模組。在 DPU 中部署的卷積神經網路包括 VGG、ResNet、GoogLeNet、YOLO、SSD、MobileNet 以及 FPN 等。

想用FPGA加速神經網路,這兩個開源專案你必須要了解

想用FPGA加速神經網路,這兩個開源專案你必須要了解

想用FPGA加速神經網路,這兩個開源專案你必須要了解

總結

今天介紹了兩個最重要的FPGA加速神經網路的開源專案,而且經過幾年的發展越發穩定,總結一下就是,如果想用FPGA加速神經網路就快點去看看吧,這裡在簡單推薦一下這兩個專案的入門開發板。

想用FPGA加速神經網路,這兩個開源專案你必須要了解

Intel C5P 開發板

Intel OpenVINO入門開發板

想用FPGA加速神經網路,這兩個開源專案你必須要了解

想用FPGA加速神經網路,這兩個開源專案你必須要了解

Xilinx Kria KV260開發板

最後,還是感謝各個大佬開源的專案,讓我們受益匪淺。後面有什麼感興趣方面的專案,大家可以在後臺留言或者加微信留言,今天就到這,我是爆肝的碎碎思,期待下期文章與你相見。