隨著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分類任務預測的結果:
由此可見,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高。
可以說,每種處理器都有它的優勢和不足,在不同的應用場景中,需要根據需求權衡利弊,選擇合適的芯片。
評論
查看更多