Xilinx 深度神經(jīng)網(wǎng)路(xDNN)引擎使用 Xilinx Alveo資料中心加速器卡提供高效能、低延遲的 DNN 加速。通過(guò)保持較低能源成本以及最大限度地減少運(yùn)行過(guò)程中所需的特定加速器的數(shù)量,可以顯著降低總體擁有成本。本文概述 xDNN 硬體架構(gòu)和軟體堆疊,以及支援高能效推論聲明的基準(zhǔn)資料,幫助讀者實(shí)現(xiàn)Alveo資料中心加速器卡上的結(jié)果再創(chuàng)造。
資料中心應(yīng)用的深度學(xué)習(xí)關(guān)聯(lián)性
在過(guò)去幾年中,深度學(xué)習(xí)方法在各種應(yīng)用領(lǐng)域均取得了巨大成功。應(yīng)用機(jī)器學(xué)習(xí)(ML)的一個(gè)領(lǐng)域是視覺(jué)和視訊處理。互聯(lián)網(wǎng)上的視訊內(nèi)容在過(guò)去幾年中也迅速增長(zhǎng),對(duì)圖像整理、分類和辨識(shí)方法的需求也相應(yīng)增長(zhǎng)。
卷積神經(jīng)網(wǎng)路(CNN)是ML神經(jīng)網(wǎng)路的一種,其一直是處理圖像資料的有效方法,尤其是在資料中心部署的背景下。CNN圖像網(wǎng)路可用於對(duì)雲(yún)端中的圖像進(jìn)行分類和分析。在許多情況下,影像處理的延遲對(duì)最終應(yīng)用至關(guān)重要,例如標(biāo)記流視訊中的非法內(nèi)容。
賽靈思深度神經(jīng)網(wǎng)路(xDNN)引擎是一款可編程推論處理器,其能夠在賽靈思Alveo 加速器卡上運(yùn)行低延遲、高能效的推論。xDNN推論處理器通用CNN 引擎,支援各種標(biāo)準(zhǔn)的CNN 網(wǎng)路。
xDNN引擎通過(guò)xfDNN軟體堆疊整合到諸如Caffe、MxNet和TensorFlow等ML框架中。在Alveo加速器卡上運(yùn)行的xDNN處理引擎,能夠以每秒GoogLeNet v1傳輸率4,000或更多圖像的速度進(jìn)行處理,意味著在Batch = 1時(shí)超過(guò)70%的運(yùn)算效率。
正如該運(yùn)算效率所述,運(yùn)行在賽靈思 Alveo 加速器卡上的 xDNN,在落實(shí)低延遲推論方面優(yōu)於 GPU 等加速平臺(tái)。眾所周知,GPU 平臺(tái)能夠通過(guò)同時(shí)批次處理多個(gè)圖像來(lái)提高其效能;然而,雖然批次處理可以提高效能並減少所需的 GPU 記憶體頻寬,但批次處理的副作用是延遲顯著增加。
相比之下,xDNN處理引擎不依賴於批次處理來(lái)達(dá)到最大化的傳輸率效能。而是每個(gè)引擎獨(dú)立運(yùn)行,並且不共用權(quán)重記憶體。每個(gè)引擎在Batch = 1下運(yùn)行,並且可以在單個(gè)Alveo加速器卡上實(shí)現(xiàn)多個(gè)引擎。因此,增加元件中 xDNN 引擎的數(shù)量?jī)H增加了聚合元件 Batch = 1 的傳輸率。
xDNN架構(gòu)概覽
xDNN硬體架構(gòu)如圖1所示。每個(gè)xDNN引擎由一個(gè)脈動(dòng)陣列、指令記憶體、執(zhí)行控制器和元素級(jí)處理單元組成。引擎通過(guò)指令佇列從在主處理器上執(zhí)行的命令軟體接收張量指令。僅當(dāng)目標(biāo)網(wǎng)路改變時(shí),CNN網(wǎng)路的指令(張量和記憶體操作)才改變。重複執(zhí)行相同的網(wǎng)路,會(huì)重複使用先前載入的駐留在指令緩衝器中的指令。
xDNN 處理引擎架構(gòu)亮點(diǎn)
? 雙模式:傳輸率最佳化或延遲最佳化
? 命令級(jí)並存執(zhí)行
? 硬體輔助圖像分塊
? 客製層支援(異質(zhì)執(zhí)行)
? 脈動(dòng)陣列架構(gòu)
傳輸率和延遲最佳化模式
xDNN處理引擎的架構(gòu)特性之一是包括兩種操作模式,一種用於傳輸率最佳化,另一種用於延遲最佳化。在傳輸率最佳化模式中,通過(guò)創(chuàng)建最佳化的處理引擎(PE)來(lái)利用資料流程並行性,以處理低效映射到一般脈動(dòng)陣列的特定層。
例如,GoogLeNet v1的第一層是RGB層,占整體運(yùn)算開(kāi)銷的近10%,不能有效地映射到有效運(yùn)算網(wǎng)路其餘部分的脈動(dòng)陣列。在此傳輸率最佳化模式中,xDNNv3 包括為三個(gè)輸入通道定制的其他脈動(dòng)陣列。這種變化的網(wǎng)路效應(yīng)是更高的整體運(yùn)算效率,因?yàn)榭梢栽谙惹皥D像卷積和 FC 層完成其各自的處理的同時(shí),運(yùn)算下一圖像的第一層。
對(duì)於需要最低單圖像延遲的應(yīng)用,使用者可以選擇部署延遲最佳化版本的引擎。對(duì)於這些應(yīng)用,可以調(diào)整 xDNN PE 管線以減少延遲。
命令級(jí)並存執(zhí)行
xDNN 處理引擎為每種類型的命令(下載、Conv、池化、元素級(jí)和上傳)提供專用的執(zhí)行路徑。如果網(wǎng)路圖允許,則允許卷積命令與其他命令並行運(yùn)行。某些網(wǎng)路圖具有不同指令類型的並行分支,有時(shí)允許並行處理。例如,在 GoogLeNet v1 inception 模組中,3 x 3 最大池化層是一個(gè)層的主要實(shí)例,該層可以使用 xDNN 處理引擎與其他 1x1/3x3/5 x 5 卷積並行運(yùn)行,圖2 顯示了 GoogLeNet v1 網(wǎng)路的 inception 模組。

圖2 : GoogLeNet v1 中的 Inception 層 |
|
如圖3 所示,軟體可以與第二個(gè)分支的 3 x 3 卷積並行地調(diào)度 3 x 3 最大池化。

圖3 : GoogLeNet v1 中 Inception 層的 xDNN 調(diào)度 |
|
硬體輔助圖像分塊
xDNN 處理引擎具有內(nèi)置的硬體輔助圖像分塊功能,用來(lái)支援具有大圖像/啟動(dòng)大小的網(wǎng)路。xDNN 處理引擎允許跨寬度和高度的輸入特性映射分塊。如圖4所示。
硬體輔助圖像分塊採(cǎi)用單個(gè)非資料移動(dòng)指令(Conv、Pool、EW)並生成正確的微操作序列(下載、操作、上傳)。通過(guò)將啟動(dòng)記憶體邏輯分區(qū)為兩個(gè)區(qū)域(如雙緩衝區(qū)),微操作在硬體中完全實(shí)現(xiàn)管線化。
通過(guò)異質(zhì)執(zhí)行客製網(wǎng)路支援
儘管 xDNN 處理引擎支援廣泛的 CNN 操作,但新的客製網(wǎng)路仍在不斷開(kāi)發(fā)中 - 有時(shí),F(xiàn)PGA 中的引擎可能不支援選擇層/指令。由 xfDNN 編譯器來(lái)辨識(shí) xDNN 處理引擎中不受支援的網(wǎng)路層,並且可以在 CPU 上執(zhí)行。
這些不受支援的層可以位於網(wǎng)路的任何部分 - 開(kāi)始、中間、結(jié)束或分支中。圖5顯示了編譯器如何將處理劃分到 xDNN 處理引擎甚至 CPU 中的各種 PE 上
脈動(dòng)陣列架構(gòu)
xDNN處理引擎利用諸如“SuperTile”論文(1)中描述的技術(shù)來(lái)達(dá)到高工作頻率。這個(gè)SuperTile DSP 巨集提供了一個(gè)關(guān)係放置的宏,其可以進(jìn)行分塊以構(gòu)建更大的運(yùn)算陣列,例如矩陣乘法和卷積,這是 CNN 運(yùn)算最為密集的操作。
圖 6 顯示了映射到FPGA中的DSP48和CLB-M(LUTRAM)分塊的邏輯處理元件的實(shí)例。該巨集單元是 xDNN 脈動(dòng)陣列中的基本處理單元。

圖6 : DSP 宏實(shí)例中的 MAC 和權(quán)重包裝 |
|
xfDNN 軟體堆疊概覽
xfDNN 軟體堆疊是軟體工具和 API 的組合,其可通過(guò)各種常見(jiàn)的ML框架落實(shí)xDNN 處理引擎的無(wú)縫整合和控制。圖7中的流程圖詳細(xì)說(shuō)明了如何準(zhǔn)備網(wǎng)路和模型,以便通過(guò)Caffe、TensorFlow或 MxNet在 xDNN上進(jìn)行部署。在CPU上運(yùn)行不受支援的層的同時(shí),xfDNN編譯器還支援xDNN層。在編譯和量化網(wǎng)路/模型之後 - 該流程通常需要不到一分鐘 -使用者可以通過(guò)選擇簡(jiǎn)單易用的Python或 C++ API與xDNN處理引擎進(jìn)行介面連接。
賽靈思 xfDNN 軟體堆疊包括:
網(wǎng)路編譯器和最佳化器
編譯器產(chǎn)生在 xDNN 引擎上執(zhí)行的指令序列,其提供張量級(jí)控制和資料流程管理,以實(shí)現(xiàn)給定的網(wǎng)路。
型號(hào)量化器
量化器從經(jīng)訓(xùn)練的CNN網(wǎng)路模型產(chǎn)生目標(biāo)量化(INT8 或 INT16),而無(wú)需數(shù)小時(shí)的再訓(xùn)練或標(biāo)記的資料集。
執(zhí)行時(shí)間和調(diào)度器
xfDNN簡(jiǎn)化了xDNN處理引擎的通訊和程式設(shè)計(jì),並利用了符合SDx的執(zhí)行時(shí)間和平臺(tái)。
圖8顯示了xfDNN函式庫(kù)的流程圖,其將深度學(xué)習(xí)框架與在賽靈思FPGA上運(yùn)行的xDNN IP相連接。
xfDNN編譯器的更多資訊
現(xiàn)代CNN是數(shù)百個(gè)單獨(dú)操作的圖表,即卷積、Maxpool、Relu、偏置、批次處理規(guī)範(fàn)、元素級(jí)加法等。編譯器的主要工作是分析CNN網(wǎng)路並生成在xDNN上執(zhí)行的最佳化指令集。xfDNN編譯器不僅提供簡(jiǎn)單的Python API來(lái)連接到高級(jí)ML框架,而且還通過(guò)融合層、最佳化網(wǎng)路中的記憶體相關(guān)性,以及預(yù)調(diào)度整個(gè)網(wǎng)路來(lái)提供網(wǎng)路最佳化工具。這消除了CPU主機(jī)控制瓶頸。請(qǐng)參見(jiàn) 圖 9 作為實(shí)例。
效能基準(zhǔn)測(cè)試結(jié)果
隨著即時(shí)AI服務(wù)的日益增多,延遲成為整體 AI 服務(wù)效能的重要方面。GPU在延遲和傳輸率之間存在顯著的權(quán)衡,與此不同的是,xDNNv3 DNN 引擎可以提供低延遲和高傳輸率。此外,xDNNv3內(nèi)核提供簡(jiǎn)單的Batch = 1介面,無(wú)需任何排隊(duì)軟體來(lái)自動(dòng)批量輸入資料便可達(dá)到最大傳輸率,從而降低了介面軟體的複雜性。
圖10和圖11顯示了Alveo 加速器卡,以及GPU和FPGA平臺(tái)上的CNN、延遲和傳輸率基準(zhǔn)。圖10顯示了沿左Y 軸以每秒圖像數(shù)量來(lái)測(cè)量的GoogLeNet V1 Batch = 1 傳輸率。傳輸率上方顯示的數(shù)位是以毫秒為單位的測(cè)量/ 報(bào)告延遲。

圖10 : GoogLeNet v1 Batch = 1 傳輸率 |
|
注釋:
1. Xeon E5-2696 v4 f1.2xlarge AWS 實(shí)例,Ubuntu 16.04LTS,amd64 xenial 映射建於 2018 年 08 月 14 日,Intel Caffe (https://github.com/intel/caffe),Git 版本:a3d5b02,run_benchmark.py w/Batch = 1 修改。
2. Xeon Platinum 8124 Skylake,c5.18xlarge AWS 實(shí)例,Ubuntu 16.04LTS,amd64 xenial 映射建於 2018 年 08 月 14 日,Intel Caffe,Git 版本:a3d5b02,run_benchmark.py w/Batch = 1 修改。
3. Arria-10 號(hào)碼取自英特爾白皮書(shū)“利用 OpenCL? 平臺(tái)和英特爾 Stratix 10 FPGA 加速深度學(xué)習(xí)。”https://builders.intel.com/docs/aibuilders/accelerating-deep-learning-with-the-opencl-platform-and-intel-stratix-10-fpgas.pdf。
Arria 延遲資料尚未公佈。
4. Nvidia P4 和 V100 號(hào)碼取自 NVIDIA技術(shù)概覽,“從資料中心到網(wǎng)路邊緣,深度學(xué)習(xí)平臺(tái)、AI 服務(wù)的效能和效率的巨大飛躍”。https://images.nvidia.com/content/pdf/inference-technical-overview.pdf。資料檢索於 2018 年 9 月 3 日。
5. 採(cǎi)用當(dāng)前可用的已公佈基準(zhǔn)的 NVIDIA T4 投影。根據(jù)早期的功率效率基準(zhǔn),GoogLeNet Batch = 1 效能範(fàn)圍在 1700-2000 個(gè)圖像/秒之間。
6. Alveo U200 數(shù)字測(cè)量 Intel Xeon CPU E5-2650v4 2.2GHz、2400MHz DDR4、Ubuntu 16.04.2 LTS 實(shí)例在 OpenStack Pike,Centos 7.4 上運(yùn)行,預(yù)發(fā)佈版本 MLSuite,streaming_classify.py,合成資料,MLSuite DSA Thin Shell,F(xiàn)C 和在 Xeon 主機(jī)上運(yùn)行的 SoftMax 層和不包含在運(yùn)算總計(jì)中的操作(占總運(yùn)算的 0.06%)。
7. Alveo U250 數(shù)字測(cè)量 Intel Xeon Silver 4110 CPU @ 2.10GHz,CentOS Linux 發(fā)佈4.1708,預(yù)發(fā)佈版本 MLSuite,streaming_classify.py,合成資料,DSA:Thin Shell,F(xiàn)C 和在 Xeon 主機(jī)上運(yùn)行的 SoftMax 層和不包含在運(yùn)算總計(jì)中的操作(占總運(yùn)算的 0.06%)。
圖11顯示了沿 Y 軸以每秒每瓦特圖像數(shù)量來(lái)測(cè)量的 GoogLeNet V1 傳輸率。雖然GoogLeNet v1效能可用於基準(zhǔn)測(cè)試,但xDNN支援廣泛的CNN 網(wǎng)路。

圖11 : GoogLeNet v1Batch= 1 能源效率 |
|
注釋:
1. Arria-10 號(hào)碼取自英特爾白皮書(shū)“利用 OpenCL? 平臺(tái)和英特爾R StratixR 10 FPGA 加速深度學(xué)習(xí)。”https://builders.intel.com/docs/aibuilders/accelerating-deep-learning-with-the-opencl-platform-and-intel-stratix-10-fpgas.pdf。
2. Nvidia P4 和 V100 號(hào)碼取自 Nvidia 技術(shù)概覽,“從資料中心到網(wǎng)路邊緣,深度學(xué)習(xí)平臺(tái)、AI 服務(wù)的效能和效率的巨大飛躍”。https://images.nvidia.com/content/pdf/inference-technical-overview.pdf。資料檢索於 2018 年 9 月 3 日。
3. 基準(zhǔn)執(zhí)行期間電路板管理固件報(bào)告的電路板功率資料。
結(jié)論與行動(dòng)呼籲
如共用效能結(jié)果所示,xDNN處理引擎是一種低延遲、高能效的DNN加速器,在即時(shí)推論作業(yè)負(fù)載方面優(yōu)於當(dāng)今眾多常見(jiàn)的CPU/GPU平臺(tái)。xDNN處理引擎可通過(guò)ML Suite在眾多雲(yún)端環(huán)境(例如 Amazon AWS/EC2 或 Nimbix NX5)中使用。其通過(guò)賽靈思的新Alveo加速器卡無(wú)縫擴(kuò)展到本地部署。
賽靈思的可重配置 FPGA 晶片允許使用者通過(guò) xDNN 更新繼續(xù)接收新的改進(jìn)和功能,這使得使用者能夠跟上不斷變化的需求和不斷演進(jìn)發(fā)展的網(wǎng)路。