英特爾 OpenVino 深度學習網絡架構在神經運算棒 (NCS2) 原理及應用

一,前言

在目前AI的運算處理器中,英特爾可以說是最齊全的了,所開發的OpenVino除了支援所有各式的CPU處理器提供給AI給各式平台來使用,英特爾更買下了 ALTERA, MOVIDIUS,並布局了雲端資料中心。要讓這些強大的硬體發揮效能,唯有提供相對應的軟體及函示庫可以讓開發商可以在其中得到最大效益。

圖一
 

                                                                                                                     圖 1

另外INTEL針對HPC平台處理器所開發分析所使用的工具如Vtune各式開發工具,或是AI開發工具包 OpenVino 也都是能讓其硬體效能發揮極致所提供的軟體。 最後為了整個AI生態圈的建立,INTEL收購了俄羅斯的深度模型公司 Open Model Zoo.

做為INTEL新一代神經網絡加速卡,INTEL VPU, FPU支援OpenVino在windows, Ubuntu上面深度學習推論的加速,另外提供開源碼在非INTEL的平台上的支援。如下圖 2


圖 2

                                                                                                                                  圖 2


二,OpenVino VPU 深度學習使用架構 

相同於其他INTEL的處理器,INTEL OpenVino Inference Engine需要使用Pretrained model來讓Model Optimizer (MO)轉換成 Intermediate Representation File  (IR) 讓VPU plugin 來進行運算並回傳推論值。

                                                                                                                                      圖 3


事實上,客戶端應用程序可以無差別調用所有Intel的處理器來用(如圖3)。 最後沒支援的算法層,INTEL提供OpenCL的開放source code來加入新的算法到Pretrained Model, 並讓OpenVino認得並多線程的來讓處理器可以平行處來該算法層。

INTEL VPU支援算法層如下圖4, 並隨時登入OpenVino官網來更新支援的算法層。由圖表可看出,FPGA支援的算法層相較於其他處理器為少。基本上速度越快的處理器如 FPGA,客製化程度用高,因此需要針對算法加速客製化。 支援客製化的 layer因開發時程較慢,所以當前需要開發HETERO. PLUGIN,來解決因某些算法因尚未支援而讓新出算法無法支援的遺憾。 


                                     圖 4

除了要注意支援的算法另一個要注意的就是支援的資料格式

                                                                                                                    圖五

以上列表為各類型INTEL 處理器支援的資料格格式,依表格所示,MYRIAD VPU目前支援FP16運算格式,FPGA 支援為FP16, FP11 資料格式。通常剛剛接觸OpenVino的使用者遇到的問題,不會注意到資料格式,以致在使用NCS2誤使用了FP32資料格式而發生推論範例無法運作的錯誤。


三,神經運算棒 (NCS2) 加速卡原理及應用

                                                                                                                  圖七

上圖為INTEL VPU Movidius Myriad X 的技術資料。根據官方資料,Myriad X 容許支援兩路camera的輸入,加上低功耗(<兩瓦/ vpu), >1TOP運算量,CP值相當的高,適合支援嵌入式系統產品落地應用。但基於嵌入式設計的應用,所使用的深度模型需要小於50MB大小,並小於3 GMACS的複雜度(GMACS: 等於每秒10億(=10^9)次的定點乘累加運算)

另外如果搭配Movidius MDK 來開發Myriad X則可以利用內建硬體的加速的算法函式庫來做深度學習前的預處理(pre-processing),配合16顆VLIW SHAVE Cores及 CNN engine, 可以把算力提升至4 TFLOP的速度。唯目前使用MDK開發 MYRIAD X需要投入相當資源,目前INTEL會收取NRE費用後以專案處理。

英特爾Movidius 神經運算棒售價约为 79 美元,支持人工智能邊緣運算(非雲端運算)



                                                                                                                                      圖八

目前NCS2支援使用OpenVino來做推論,通常用於算法驗證或是算力的驗證之用。落地時再選用INTEL VAD(vision accleration design) L1 (VPUx1)來使用。



NCS 2 使用16顆 VLIW shave(Streaming Hybrid Architecture Vector Engine) cores 來處理神經網絡運算。VLIW 全名為 Very Long Instruction Word, 可使用SIMD (Single Instruction multiple words)方式運行在向量處理器上 (Vector Engine)做平行運算。而NCS2的16顆 shave cores就是向量處理器的一種。下圖九為Movidius 單顆的架構圖。

                                                                                                            圖九

下圖所示為每顆SHAVE CORE中八個平行運算單元及特性



在架構上,SHAVE的組織方式與IBM的CELL架構類似。有獨立的SHAVE核心,這一代最多可以連接8個核心。核心受益於最近的兩個鄰居的零懲罰,這是建築的內在屬性,本質上有利於大多數代碼。該芯片具有由所有內核共享的L2緩存以及集成的DDR2內存控制器,該控制器連接到封裝的KGD堆疊芯片,範圍從8到64 MiB的SDRAM。

大量外圍設備連接到芯片的參數,該參數通過AXI總線與內核通信。這些外圍設備包括支持高速率的兩個高分辨率相機(高達1200萬像素)和高分辨率LCD控制器。各種外設可以通過封裝中有限數量的I/O引腳進行軟件復用。整體管理控制器核心是可綜合的SPARC V8 LEON3。

平行運算單元的架構特性如下

SHAVE核心背後的基本概念是提取重要的數據級並行性。每個SHAVE內核都是一個可變長度超長指令字(VLLIW)處理器,可以在本機32位整數和128位向量值上運行。每個核心包含許多不同類型的寄存器文件以及大量執行單元,這些執行單元利用具有
大量端口的多個寄存器文件,以便一次操作相對較大的一組值。 每個SHAVE核心都駐留在一個獨立的電力島上。雖然我們無法對此進行驗證,但可能您可以通過軟件根據電源要求啟用和禁用核心。




          三個主要算術執行單元是矢量運算單元(VAU),標量運算單元(SAU)和整數運算單元(IAU)。此外,每個SHAVE核心還包含一個自己的紋理映射單元(TMU),允許強大的位圖轉換。整數運算單元(IAU)執行對32位整數運算的所有算術指令並訪問IRF。標量算術單元(SAU)功能更加廣泛,可以執行所有整數(8-32位)和浮點(HP / FP)操作。矢量運算單元(VAU)支持所有整數(8-32位)和浮點(HP / FP)類型的128位向量運算。由於這些操作可以在同一周期內完成,因此可
以執行這兩種操作的組合,以便進行各種類似DSP的操作,例如矩陣切換。

           除了這些單元之外,還有一個比較移動單元(CMU),用於生成謂詞。該單元可以執行諸如向量寄存器文件中的每16位/ 32位/ 8位條目的三個比較操作,與向量操作並行,其可以生成用於預測執行的謂詞。 CMU有效地與所有寄存器文件連接,並且能夠在它們之間移動數據。

            分支和重複單元(BRU)是另一個執行單元,能夠以零開銷進行連續迭代。這適用於單個或多個VLIW字,並且可以用作可參數化的有限脈衝響應(FIR)濾波器,允許顯著的指令獲取帶寬減少。CMU和BRU都可以與謂詞執行單元(PEU)一起工作,並且它們在同一周期內與VAU一起工作,這意味著像素決策等應用可以在同一周
期內以極快的速度完成。



        每個SHAVE內核都有兩個加載存儲單元,每個加載存儲單元能夠從SRAM磁貼每個週期執行一次64位操作。

        每個SHAVE內核都有一個本地128 KiB的SRAM片段,LSU在Movidius上操作調用Connection MatriX(CMX)塊。緩存在指令和數據之間分配。確切的數量是軟件可配置的,粒度為8 KiB間隔。每個本地緩存區塊直接鏈接到其最近的兩個鄰居(可能是位於西部和東部的核心),允許來自那些存儲體的零懲罰訪問。對於位於更遠位置的緩存切片,確實會有輕微的延遲懲罰。 Movidius指出,他們測試的大多數軟件幾乎都與其相鄰核心進行了通信,從而可以利用這一點。   整個芯片還具有共享128 KiB的L2緩存和集成的DDR2內存控制器,該控制器連接到封裝的堆疊式8-64 MiB SDRAM。



參考資料

1. OpenVINO源碼:

https://github.com/opencv/dldt

2. NCS2:

https://ncsforum.movidius.com/discussion/1302/intel-neural-compute-stick-2-information

3. OpenVINO與Movidius SDK的區別:

https://www.xianjichina.com/news/details_80102.html

4. SHAVE v2.0 - Microarchitectures - Movidius

https://en.wikichip.org/wiki/movidius/microarchitectures/shave_v2.0#Process_Technology

5. 大大購購買神經運算棒
https://www.wpgdadago.com/ProductList?do=query&queryMap.RESULT=Y&queryMap.InStock=N&queryMap.CurrentCurr=N&queryMap.M_PARTNO=NCSM2485.DK,964486

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論