(轉)深度學習中,CPU、GPU、NPU、FPGA如何發揮優勢?

ethnicity 發佈 2020-06-03T23:35:32+00:00

原文連結 https://blog.csdn.net/molixuebeibi/article/details/91880779 如有侵權請聯繫刪除隨著AI的廣泛應用,深度學習已成為當前AI研究和運用的主流方式。

原文連結 https://blog.csdn.net/molixuebeibi/article/details/91880779 如有侵權請聯繫刪除


隨著AI的廣泛應用,深度學習已成為當前AI研究和運用的主流方式。面對海量數據的並行運算,AI對於算力的要求不斷提升,對硬體的運算速度及功耗提出了更高的要求。

目前,除通用CPU外,作為硬體加速的GPU、NPU、FPGA等一些晶片處理器在深度學習的不同應用中發揮著各自的優勢,但孰優孰劣?

以人臉識別為例,其處理基本流程及對應功能模塊所需的算力分布如下:


為什麼會有這樣的應用區分?

意義在哪裡?

想要知道其中的答案,需要我們先從CPU、GPU、NPU、FPGA它們各自的原理、架構及性能特點來了解。

首先,我們先來了解一下通用CPU的架構。

CPU

CPU(Central Processing Unit)中央處理器,是一塊超大規模的集成電路,主要邏輯架構包括控制單元Control,運算單元ALU和高速緩衝存儲器(Cache)及實現它們之間聯繫的數據(Data)、控制及狀態的總線(Bus)。

簡單說,

就是計算單元、控制單元和存儲單元。

架構圖如下所示:


CPU遵循的是馮諾依曼架構,其核心是存儲程序、順序執行。CPU的架構中需要大量的空間去放置存儲單元(Cache)和控制單元(Control),相比之下計算單元(ALU)只占據了很小的一部分,所以它在大規模並行計算能力上極受限制,而更擅長於邏輯控制。

CPU無法做到大量矩陣數據並行計算的能力,但GPU可以。

GPU

GPU(Graphics Processing Unit),即圖形處理器,是一種由大量運算單元組成的大規模並行計算架構,專為同時處理多重任務而設計。

為什麼GPU可以做到並行計算的能力?GPU中也包含基本的計算單元、控制單元和存儲單元,但GPU的架構與CPU有所不同,如下圖所示:


與CPU相比,CPU晶片空間的不到20%是ALU,而GPU晶片空間的80%以上是ALU。即GPU擁有更多的ALU用於數據並行處理。

以Darknet構建的神經網絡模型AlexNet、VGG-16及Restnet152在GPU Titan X, CPU Intel i7-4790K (4 GHz) 進行ImageNet分類任務預測的結果:


備註:以上數據源自https://pjreddie.com/darknet/imagenet/#reference

由此可見,GPU處理神經網絡數據遠遠高效於CPU。

總結GPU具有如下特點:

1 、多線程,提供了多核並行計算的基礎結構,且核心數非常多,可以支撐大量數據的並行計算。

2、擁有更高的訪存速度。

3、更高的浮點運算能力。

因此,GPU比CPU更適合深度學習中的大量訓練數據、大量矩陣、卷積運算。

GPU雖然在並行計算能力上盡顯優勢,但並不能單獨工作,需要CPU的協同處理,對於神經網絡模型的構建和數據流的傳遞還是在CPU上進行。同時存在功耗高,體積大的問題。

性能越高的GPU體積越大,功耗越高,價格也昂貴,對於一些小型設備、移動設備來說將無法使用。

因此,一種體積小、功耗低、計算性能高、計算效率高的專用晶片NPU誕生了。

NPU

NPU (Neural Networks Process Units)神經網絡處理單元。NPU工作原理是在電路層模擬人類神經元和突觸,並且用深度學習指令集直接處理大規模的神經元和突觸,一條指令完成一組神經元的處理。相比於CPU和GPU,NPU通過突觸權重實現存儲和計算一體化,從而提高運行效率。

NPU是模仿生物神經網絡而構建的,CPU、GPU處理器需要用數千條指令完成的神經元處理,NPU只要一條或幾條就能完成,因此在深度學習的處理效率方面優勢明顯。

實驗結果顯示,同等功耗下NPU 的性能是 GPU 的 118 倍。

與GPU一樣,NPU同樣需要CPU的協同處理才能完成特定的任務。下面,我們可以看一下GPU和NPU是如何與CPU協同工作的。

GPU的加速

GPU當前只是單純的並行矩陣的乘法和加法運算,對於神經網絡模型的構建和數據流的傳遞還是在CPU上進行。

CPU加載權重數據,按照代碼構建神經網絡模型,將每層的矩陣運算通過CUDA或OpenCL等類庫接口傳送到GPU上實現並行計算,輸出結果;CPU接著調度下層神經元組矩陣數據計算,直至神經網絡輸出層計算完成,得到最終結果。


CPU 與GPU的交互流程:

1 獲取GPU信息,配置GPU id

2 加載神經元參數到GPU

3 GPU加速神經網絡計算

4 接收GPU計算結果

NPU的加速

NPU與GPU加速不同,主要體現為每層神經元計算結果不用輸出到主內存,而是按照神經網絡的連接傳遞到下層神經元繼續計算,因此其在運算性能和功耗上都有很大的提升。

CPU將編譯好的神經網絡模型文件和權重文件交由專用晶片加載,完成硬體編程。


CPU在整個運行過程中,主要是實現數據的加載和業務流程的控制,其交互流程為:

1 打開NPU專用晶片設備

2 傳入模型文件,得到模型task

3 獲取task的輸入輸出信息

4 拷貝輸入數據到模型內存中

5 運行模型,得到輸出數據

除NPU外,在功耗及計算能力上有一拼的還有FPGA。

FPGA

FPGA(Field-Programmable Gate Array)稱為現場可編程門陣列,用戶可以根據自身的需求進行重複編程。與 CPU、GPU 相比,具有性能高、功耗低、可硬體編程的特點。

FPGA基本原理是在晶片內集成大量的數字電路基本門電路以及存儲器,而用戶可以通過燒入FPGA 配置文件來定義這些門電路以及存儲器之間的連線。這種燒入不是一次性的,可重複編寫定義,重複配置。

FPGA的內部結構如下圖所示:


FPGA的編程邏輯塊(Programable Logic Blocks)中包含很多功能單元,由LUT(Look-up Table)、觸發器組成。FPGA是直接通過這些門電路來實現用戶的算法,沒有通過指令系統的翻譯,執行效率更高。

我們可以對比一下

CPU/GPU/NPU/FPGA各自的特點


各晶片架構特點總結

/ CPU /

70%電晶體用來構建Cache,還有一部分控制單元,計算單元少,適合邏輯控制運算。

/ GPU /

電晶體大部分構建計算單元,運算複雜度低,適合大規模並行計算。主要應用於大數據、後台伺服器、圖像處理。

/ NPU /

在電路層模擬神經元,通過突觸權重實現存儲和計算一體化,一條指令完成一組神經元的處理,提高運行效率。主要應用於通信領域、大數據、圖像處理。

/ FPGA /

可編程邏輯,計算效率高,更接近底層IO,通過冗餘電晶體和連線實現邏輯可編輯。本質上是無指令、無需共享內存,計算效率比CPU、GPU高。主要應用於智慧型手機、可攜式移動設備、汽車。

CPU作為最通用的部分,協同其他處理器完成著不同的任務。GPU適合深度學習中後台伺服器大量數據訓練、矩陣卷積運算。NPU、FPGA在性能、面積、功耗等方面有較大優勢,能更好的加速神經網絡計算。而FPGA的特點在於開發使用硬體描述語言,開發門檻相對GPU、NPU高。

可以說,每種處理器都有它的優勢和不足,在不同的應用場景中,需要根據需求權衡利弊,選擇合適的晶片。

關鍵字: