隨著AI的廣泛應(yīng)用,深度學(xué)習(xí)已成為當(dāng)前AI研究和運(yùn)用的主流方式。面對(duì)海量數(shù)據(jù)的并行運(yùn)算,AI對(duì)于算力的要求不斷提升,對(duì)硬件的運(yùn)算速度及功耗提出了更高的要求。
目前,除通用CPU外,作為硬件加速的GPU、NPU、FPGA等一些芯片處理器在深度學(xué)習(xí)的不同應(yīng)用中發(fā)揮著各自的優(yōu)勢(shì),但孰優(yōu)孰劣?
以人臉識(shí)別為例,其處理基本流程及對(duì)應(yīng)功能模塊所需的算力分布如下:
為什么會(huì)有這樣的應(yīng)用區(qū)分?
意義在哪里?
想要知道其中的答案,需要我們先從CPU、GPU、NPU、FPGA它們各自的原理、架構(gòu)及性能特點(diǎn)來(lái)了解。
首先,我們先來(lái)了解一下通用CPU的架構(gòu)。
CPU
CPU(Central Processing Unit)中央處理器,是一塊超大規(guī)模的集成電路,主要邏輯架構(gòu)包括控制單元Control,運(yùn)算單元ALU和高速緩沖存儲(chǔ)器(Cache)及實(shí)現(xiàn)它們之間聯(lián)系的數(shù)據(jù)(Data)、控制及狀態(tài)的總線(Bus)。
簡(jiǎn)單說(shuō),
就是計(jì)算單元、控制單元和存儲(chǔ)單元。
架構(gòu)圖如下所示:
CPU遵循的是馮諾依曼架構(gòu),其核心是存儲(chǔ)程序、順序執(zhí)行。CPU的架構(gòu)中需要大量的空間去放置存儲(chǔ)單元(Cache)和控制單元(Control),相比之下計(jì)算單元(ALU)只占據(jù)了很小的一部分,所以它在大規(guī)模并行計(jì)算能力上極受限制,而更擅長(zhǎng)于邏輯控制。
CPU無(wú)法做到大量矩陣數(shù)據(jù)并行計(jì)算的能力,但GPU可以。
GPU
GPU(Graphics Processing Unit),即圖形處理器,是一種由大量運(yùn)算單元組成的大規(guī)模并行計(jì)算架構(gòu),專(zhuān)為同時(shí)處理多重任務(wù)而設(shè)計(jì)。
為什么GPU可以做到并行計(jì)算的能力?GPU中也包含基本的計(jì)算單元、控制單元和存儲(chǔ)單元,但GPU的架構(gòu)與CPU有所不同,如下圖所示:
與CPU相比,CPU芯片空間的不到20%是ALU,而GPU芯片空間的80%以上是ALU。即GPU擁有更多的ALU用于數(shù)據(jù)并行處理。
以Darknet構(gòu)建的神經(jīng)網(wǎng)絡(luò)模型AlexNet、VGG-16及Restnet152在GPU Titan X, CPU Intel i7-4790K (4 GHz) 進(jìn)行ImageNet分類(lèi)任務(wù)預(yù)測(cè)的結(jié)果:
由此可見(jiàn),GPU處理神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)遠(yuǎn)遠(yuǎn)高效于CPU。
總結(jié)GPU具有如下特點(diǎn):
1 、多線程,提供了多核并行計(jì)算的基礎(chǔ)結(jié)構(gòu),且核心數(shù)非常多,可以支撐大量數(shù)據(jù)的并行計(jì)算。
2、擁有更高的訪存速度。
3、更高的浮點(diǎn)運(yùn)算能力。
因此,GPU比CPU更適合深度學(xué)習(xí)中的大量訓(xùn)練數(shù)據(jù)、大量矩陣、卷積運(yùn)算。
GPU雖然在并行計(jì)算能力上盡顯優(yōu)勢(shì),但并不能單獨(dú)工作,需要CPU的協(xié)同處理,對(duì)于神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建和數(shù)據(jù)流的傳遞還是在CPU上進(jìn)行。同時(shí)存在功耗高,體積大的問(wèn)題。
性能越高的GPU體積越大,功耗越高,價(jià)格也昂貴,對(duì)于一些小型設(shè)備、移動(dòng)設(shè)備來(lái)說(shuō)將無(wú)法使用。
因此,一種體積小、功耗低、計(jì)算性能高、計(jì)算效率高的專(zhuān)用芯片NPU誕生了。
NPU
NPU (Neural Networks Process Units)神經(jīng)網(wǎng)絡(luò)處理單元。NPU工作原理是在電路層模擬人類(lèi)神經(jīng)元和突觸,并且用深度學(xué)習(xí)指令集直接處理大規(guī)模的神經(jīng)元和突觸,一條指令完成一組神經(jīng)元的處理。相比于CPU和GPU,NPU通過(guò)突觸權(quán)重實(shí)現(xiàn)存儲(chǔ)和計(jì)算一體化,從而提高運(yùn)行效率。
NPU是模仿生物神經(jīng)網(wǎng)絡(luò)而構(gòu)建的,CPU、GPU處理器需要用數(shù)千條指令完成的神經(jīng)元處理,NPU只要一條或幾條就能完成,因此在深度學(xué)習(xí)的處理效率方面優(yōu)勢(shì)明顯。
實(shí)驗(yàn)結(jié)果顯示,同等功耗下NPU 的性能是 GPU 的 118 倍。
與GPU一樣,NPU同樣需要CPU的協(xié)同處理才能完成特定的任務(wù)。下面,我們可以看一下GPU和NPU是如何與CPU協(xié)同工作的。
GPU的加速
GPU當(dāng)前只是單純的并行矩陣的乘法和加法運(yùn)算,對(duì)于神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建和數(shù)據(jù)流的傳遞還是在CPU上進(jìn)行。
CPU加載權(quán)重?cái)?shù)據(jù),按照代碼構(gòu)建神經(jīng)網(wǎng)絡(luò)模型,將每層的矩陣運(yùn)算通過(guò)CUDA或OpenCL等類(lèi)庫(kù)接口傳送到GPU上實(shí)現(xiàn)并行計(jì)算,輸出結(jié)果;CPU接著調(diào)度下層神經(jīng)元組矩陣數(shù)據(jù)計(jì)算,直至神經(jīng)網(wǎng)絡(luò)輸出層計(jì)算完成,得到最終結(jié)果。
CPU 與GPU的交互流程:
1獲取GPU信息,配置GPU id
2 加載神經(jīng)元參數(shù)到GPU
3 GPU加速神經(jīng)網(wǎng)絡(luò)計(jì)算
4接收GPU計(jì)算結(jié)果
NPU的加速
NPU與GPU加速不同,主要體現(xiàn)為每層神經(jīng)元計(jì)算結(jié)果不用輸出到主內(nèi)存,而是按照神經(jīng)網(wǎng)絡(luò)的連接傳遞到下層神經(jīng)元繼續(xù)計(jì)算,因此其在運(yùn)算性能和功耗上都有很大的提升。
CPU將編譯好的神經(jīng)網(wǎng)絡(luò)模型文件和權(quán)重文件交由專(zhuān)用芯片加載,完成硬件編程。
CPU在整個(gè)運(yùn)行過(guò)程中,主要是實(shí)現(xiàn)數(shù)據(jù)的加載和業(yè)務(wù)流程的控制,其交互流程為:
1打開(kāi)NPU專(zhuān)用芯片設(shè)備
2 傳入模型文件,得到模型task
3 獲取task的輸入輸出信息
4 拷貝輸入數(shù)據(jù)到模型內(nèi)存中
5 運(yùn)行模型,得到輸出數(shù)據(jù)
除NPU外,在功耗及計(jì)算能力上有一拼的還有FPGA。
FPGA
FPGA(Field-Programmable Gate Array)稱(chēng)為現(xiàn)場(chǎng)可編程門(mén)陣列,用戶(hù)可以根據(jù)自身的需求進(jìn)行重復(fù)編程。與 CPU、GPU 相比,具有性能高、功耗低、可硬件編程的特點(diǎn)。
FPGA基本原理是在芯片內(nèi)集成大量的數(shù)字電路基本門(mén)電路以及存儲(chǔ)器,而用戶(hù)可以通過(guò)燒入FPGA 配置文件來(lái)定義這些門(mén)電路以及存儲(chǔ)器之間的連線。這種燒入不是一次性的,可重復(fù)編寫(xiě)定義,重復(fù)配置。
FPGA的內(nèi)部結(jié)構(gòu)如下圖所示:
FPGA的編程邏輯塊(Programable Logic Blocks)中包含很多功能單元,由LUT(Look-up Table)、觸發(fā)器組成。FPGA是直接通過(guò)這些門(mén)電路來(lái)實(shí)現(xiàn)用戶(hù)的算法,沒(méi)有通過(guò)指令系統(tǒng)的翻譯,執(zhí)行效率更高。
我們可以對(duì)比一下
CPU/GPU/NPU/FPGA各自的特點(diǎn)
各芯片架構(gòu)特點(diǎn)總結(jié)
【CPU】
70%晶體管用來(lái)構(gòu)建Cache,還有一部分控制單元,計(jì)算單元少,適合邏輯控制運(yùn)算。
【GPU】
晶體管大部分構(gòu)建計(jì)算單元,運(yùn)算復(fù)雜度低,適合大規(guī)模并行計(jì)算。主要應(yīng)用于大數(shù)據(jù)、后臺(tái)服務(wù)器、圖像處理。
【NPU 】
在電路層模擬神經(jīng)元,通過(guò)突觸權(quán)重實(shí)現(xiàn)存儲(chǔ)和計(jì)算一體化,一條指令完成一組神經(jīng)元的處理,提高運(yùn)行效率。主要應(yīng)用于通信領(lǐng)域、大數(shù)據(jù)、圖像處理。
【 FPGA】
可編程邏輯,計(jì)算效率高,更接近底層IO,通過(guò)冗余晶體管和連線實(shí)現(xiàn)邏輯可編輯。本質(zhì)上是無(wú)指令、無(wú)需共享內(nèi)存,計(jì)算效率比CPU、GPU高。主要應(yīng)用于智能手機(jī)、便攜式移動(dòng)設(shè)備、汽車(chē)。
CPU作為最通用的部分,協(xié)同其他處理器完成著不同的任務(wù)。GPU適合深度學(xué)習(xí)中后臺(tái)服務(wù)器大量數(shù)據(jù)訓(xùn)練、矩陣卷積運(yùn)算。NPU、FPGA在性能、面積、功耗等方面有較大優(yōu)勢(shì),能更好的加速神經(jīng)網(wǎng)絡(luò)計(jì)算。而FPGA的特點(diǎn)在于開(kāi)發(fā)使用硬件描述語(yǔ)言,開(kāi)發(fā)門(mén)檻相對(duì)GPU、NPU高。
可以說(shuō),每種處理器都有它的優(yōu)勢(shì)和不足,在不同的應(yīng)用場(chǎng)景中,需要根據(jù)需求權(quán)衡利弊,選擇合適的芯片。
評(píng)論
查看更多