1. 程式人生 > 實用技巧 >深度學習中,CPU、GPU、NPU、FPGA如何發揮優勢?

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

隨著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高。

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