一、人工智能發(fā)展歷程
當今,人工智能(Artificial Intelligence)已經(jīng)深刻改變了人類生活的方方面面,并且在未來仍然會繼續(xù)發(fā)揮越來越重要的影響力?“人工智能”這一概念在1956年于美國達特茅斯學院舉辦的一次學術集會上被首次提出,自此開啟了人工智能研究的新紀元?自此之后,人工智能在曲折中不斷發(fā)展前進?
1986年,神經(jīng)網(wǎng)絡之父Geoffrey Hinton提出了適用于多層感知機(Multilayer Perceptron,MLP)的反向傳播(Back propagation, BP)算法,并且使用Sigmoid函數(shù)實現(xiàn)非線性映射,有效解決了非線性分類和學習問題?1989年,YannLeCun設計了第一個卷積神經(jīng)網(wǎng)絡,并將其成功應用于手寫郵政編碼識別任務中?
20世紀90年代,Cortes等人提出支持向量機(Support Vector Machine, SVM)模型,隨后SVM迅速發(fā)展成為機器學習的代表性技術之一,在文本分類?手寫數(shù)字識別?人臉檢測和生物信息處理等方面取得了巨大成功?進入21世紀,隨著互聯(lián)網(wǎng)技術的發(fā)展與計算機硬件系統(tǒng)性能的提高,人工智能迎來了新的重大發(fā)展機遇?特別是2011年以來,以深度神經(jīng)網(wǎng)絡為代表的深度學習技術高速發(fā)展,人類在通向人工智能的道路上接連實現(xiàn)了許多重大突破?
二、CPU和GPU在人工智能中的應用
GPU最初是用于圖像處理的,但由于高性能計算需求的出現(xiàn),GPU因其高度 并行的硬件結(jié)構(gòu)而得以顯著提升其并行計算和浮點計算能力,且性能遠超于CPU。由于訓練深度神經(jīng)網(wǎng)絡的計算強度非常大,因而在CPU上訓練神經(jīng)網(wǎng)絡模型的時間往往非常長?
如圖所示,CPU主要由控制器、算數(shù)邏輯單元(Arithmetic and Logic Unit,ALU)和儲存單元三個主要部分組成,CPU的計算能力主要取決于計算核心ALU的數(shù)量,而ALU又大又重,使得CPU常用來處理具有復雜控制邏輯的串行程序以提高性能。
相比之下,GPU由許多SP(Streaming Processor,流處理器)和存儲系統(tǒng)組成,SP又被稱為CUDA核心,類似CPU中的ALU,若干個SP被組織成一個SM(Streaming Multiprocessors,流多處理器)。GPU中的SP數(shù)量眾多且體積較小,這賦予了GPU強大的并行計算和浮點運算能力,常用來優(yōu)化那些控制邏輯簡單而數(shù)據(jù)并行性高的任務,且側(cè)重于提高并行程序的吞吐量。
圖形處理器(Graphics Processing Unit, GPU)具有強大的單機并行處理能力,特別適合計算密集型任務,已經(jīng)廣泛應用于深度學習訓練?然而單個GPU的算力和存儲仍然是有限的,特別是對于現(xiàn)在的很多復雜深度學習訓練任務來說,訓練的數(shù)據(jù)集十分龐大,使用單個GPU訓練深度神經(jīng)網(wǎng)絡(Deep Neural Network ,DNN)模型需要漫長的訓練時間?例如,使用一塊Nvidia M40 GPU在ImageNet-1K上訓練ResNet-50 90個epoch需要14天時間?此外,近年來深度神經(jīng)網(wǎng)絡的模型參數(shù)規(guī)模急劇增加,出現(xiàn)了很多參數(shù)量驚人的“巨模型”?由于在訓練這些大規(guī)模DNN模型時,無法將全部模型參數(shù)和激活值放入單個GPU中,因此無法在單GPU上訓練這些超大規(guī)模DNN模型?
隨著計算機體系結(jié)構(gòu)的飛速發(fā)展,并行(Parallelism)已經(jīng)在現(xiàn)代的計算機體系結(jié)構(gòu)中廣泛存在,目前的計算機系統(tǒng)普遍具有多核或多機并行處理能力?
按照存儲方式的不同,并行計算機體系結(jié)構(gòu)通常分為兩種:共享存儲體系結(jié)構(gòu)和分布存儲體系結(jié)構(gòu)?
對于共享存儲體系結(jié)構(gòu),處理器通常包含多個計算核,通??梢灾С?a class="article-link" target="_blank" href="/baike/1545792.html">多線程并行?然而由于存儲和算力的限制,使用單個計算設備上往往無法高效訓練機器學習模型?
多核集群系統(tǒng)是目前廣泛使用的多機并行計算平臺,已經(jīng)在機器學習領域得到廣泛應用?多核集群系統(tǒng)通常以多核服務器為基本計算節(jié)點,節(jié)點間則通過Infiniband高速互聯(lián)網(wǎng)絡互聯(lián)?此外,在深度學習訓練領域,單機多卡(One Machine Multiple GPUs)和多機多卡(Multiple Machines Multiple GPUs)計算平臺也已經(jīng)發(fā)展成為并行訓練神經(jīng)網(wǎng)絡的主流計算平臺?
消息傳遞接口(Message Passing Interface, MPI)在分布式存儲系統(tǒng)上是被廣泛認可的理想程序設計模型,也為機器學習模型的并行與分布式訓練提供了通信技術支撐?機器學習模型并行訓練的本質(zhì)是利用多個計算設備協(xié)同并行訓練機器學習模型?機器學習模型的并行訓練過程一般是,首先將訓練數(shù)據(jù)或模型部署到多個計算設備上,然后通過這些計算設備協(xié)同并行工作來加速訓練模型?
機器學習模型的并行訓練通常適用于以下兩種情況:(1)當模型可以載入到單個計算設備時,訓練數(shù)據(jù)非常多,使用單個計算設備無法在可接受的時間內(nèi)完成模型訓練;(2)模型參數(shù)規(guī)模非常大,無法將整個模型載入到單個計算設備上;機器學習模型并行訓練的目的往往是為了加速模型訓練,機器學習模型訓練的總時間往往是由單次迭代或者單個epoch的計算時間與收斂速度共同作用的結(jié)果?訓練模型使用的優(yōu)化算法決定了收斂速度,而使用合適的并行訓練模式則可以加快單次迭代或者單個epoch的計算?在并行訓練機器學習模型時,首先要把數(shù)據(jù)分發(fā)到多個不同的計算設備上?
按照數(shù)據(jù)分發(fā)方式的不同,模型的并行訓練模式一般可以分為數(shù)據(jù)并行?模型并行和流水線并行?
上圖是三種并行訓練模式的示意圖?數(shù)據(jù)并行(Data Parallelism)是當前最流行的DNN并行訓練方法?當前流行的許多深度學習框架如Tensor Flow, PyTorch和Horovod等都提供了方便使用的API來支持數(shù)據(jù)并行?
如圖(a)所示,在數(shù)據(jù)并行中,每個計算設備都擁有全部的并且完全一致的模型參數(shù),然后被分配到不同的批處理訓練數(shù)據(jù)?當所有計算設備上的梯度通過參數(shù)服務器或者Allreduce這樣的集合通信操作來實現(xiàn)求和之后,模型參數(shù)才會更新?深度神經(jīng)網(wǎng)絡通常是由很多層神經(jīng)元連續(xù)堆疊而成,每一層神經(jīng)元形成了全連接層(Fully Connected Layers)?卷積層(Convolutional Layers)等不同類型的運算子(Operator)?
傳統(tǒng)的模型并行(Model Parallelism)是將神經(jīng)網(wǎng)絡模型水平切分成不同的部分,然后分發(fā)到不同的計算設備上?如圖(b)所示,模型并行是將不同運算子的數(shù)據(jù)流圖(Data flow Graph)切分并存儲在多個計算設備上,同時保證這些運算子作用于同一個批處理訓練數(shù)據(jù)?由于這種切分是將運算子從水平層次進行切分,因此通常模型并行也稱為運算子并行(Operator Parallelism)或水平并行(Horizontal Parallelism)?
當把神經(jīng)網(wǎng)絡模型按層進行垂直切分時,模型并行可進一步歸類為流水線并行(Pipeline Parallelism)?如圖(c)所示,流水線并行是將神經(jīng)網(wǎng)絡按層切分成多個段(Stage),每個Stage由多個連續(xù)的神經(jīng)網(wǎng)絡層組成?然后所有Stage被分配到不同的計算設備上,這些計算設備以流水線方式并行地訓練?神經(jīng)網(wǎng)絡的前向傳播從第一個計算設備開始,向后做前向傳播,直到最后一個計算設備完成前向傳播?
隨后,神經(jīng)網(wǎng)絡的反向傳播過程從最后一個計算設備開始,向前做反向傳播,直到第一個計算設備完成反向傳播?在算法加速方面,目前加速算法的研究主要是利用不同平臺的計算能力完成?主流的加速平臺包括專用集成電路(Application Specific Integrated Circuit, ASIC)?現(xiàn)場可編程邏輯門陣列(Field-Programmable Gate Array, FPGA)芯片和圖形處理器(Graphics Processing Unit, GPU)等?其中,ASIC芯片定制化程度較高,設計開發(fā)周期長,難以應對迅速變化的市場需求;FPGA芯片是一種可編程的集成電路芯片,自由度相對較高,投入使用比ASIC快,成本與ASIC相比較低,但是由于FPGA芯片仍屬于硬件并行設計的范疇,通用性和成本與GPU相比欠佳?
三、什么是CUDA?
CUDA(Compute Unified Device Architecture)全稱統(tǒng)一計算架構(gòu),作為NIVIDA公司官方提出的GPU編程模型,它提供了相關接口讓開發(fā)者可以使用GPU完成通用計算的加速設計,能夠更加簡單便捷地構(gòu)建基于GPU的應用程序,充分發(fā)揮GPU的高效計算能力和并行能力?CUDA同時支持C/C++,Python等多種編程語言,使得并行算法具有更高的可行性?由于GPU不是可以獨立運行的計算平臺,因此在使用CUDA編程時需要與CPU協(xié)同實現(xiàn),形成一種CPU+GPU的異構(gòu)計算架構(gòu),其中CPU被稱為主機端(Host),GPU被稱為設備端(Device)?
GPU主要負責計算功能,通過并行架構(gòu)與強大的運算能力對CPU指派的計算任務進行加速。通過 CPU/GPU 異構(gòu)架構(gòu)和CUDA C語言,可以充分利用GPU資源來加速一些算法。典型的GPU體系結(jié)構(gòu)如下圖所示,GPU和CPU的主存都是采用DRAM實現(xiàn),存儲結(jié)構(gòu)也十分類似?但是CUDA將GPU內(nèi)存更好地呈現(xiàn)給程序員,提高了GPU編程的靈活性?
CUDA程序?qū)崿F(xiàn)并行優(yōu)化程序設計的具體流程主要分為三個步驟:
1?將數(shù)據(jù)存入主機端內(nèi)存并進行初始化,申請設備端內(nèi)存空間并將主機端的數(shù)據(jù)裝載到設備端內(nèi)存中;
2?調(diào)用核函數(shù)在設備端執(zhí)行并行算法,核函數(shù)是指在GPU中運行的程序,也被稱為kernel函數(shù)?
3?將算法的最終運行結(jié)果從設備端內(nèi)存卸載到主機端,最后釋放設備端和主機端的所有內(nèi)存?
GPU的核心組件是流式多處理器(Streaming Multiprocessor,簡稱SM),也被稱為GPU大核,一個GPU設備含有多個SM硬件,SM的組件包括CUDA核心,共享內(nèi)存和寄存器等?其中,CUDA核心(CUDA core)是GPU最基本的處理單元,具體的指令和任務都是在這個核心上處理的,本質(zhì)上GPU在執(zhí)行并行程序的時候,是在使用多個SM同時處理不同的線程?而共享內(nèi)存和寄存器是SM內(nèi)部最重要的資源,在很大程度上GPU的并行能力就取決于SM中的資源分配能力?
在CUDA架構(gòu)中,網(wǎng)格(Grid),塊(Block)和線程(Thread)是三個十分重要的軟件概念,其中線程負責執(zhí)行具體指令的運行任務,線程塊由多個線程組成,網(wǎng)格由多個線程塊組成,線程和線程塊的數(shù)量都可以通過程序的具體實現(xiàn)設定?
GPU在執(zhí)行核函數(shù)時會以一個網(wǎng)格作為執(zhí)行整體,將其劃分成多個線程塊,再將線程塊分配給SM執(zhí)行計算任務?GPU內(nèi)存結(jié)構(gòu)如下圖所示,主要包括位于SP內(nèi)部的寄存器(Register)?位于SM上的共享內(nèi)存(Shared memory)和GPU板載的全局內(nèi)存(Global memory)?
在NVIDIA提出的CUDA統(tǒng)一編程模型中采用Grid的方式管理GPU上的全部線程,每個Grid中又包含多個線程塊(Block),每個Block中又可以劃分成若干個線程組(Warp)?Warp是GPU線程管理的最小單位,Warp內(nèi)的線程采用單指令多線程(Single Instruction Multiple Threads, SIMT)的執(zhí)行模式?CUDA線程管理的基本結(jié)構(gòu)如下圖所示:
GPU獨特的體系架構(gòu)和強大的并行編程模型,使得GPU在并行計算和內(nèi)存訪問帶寬方面具有獨特的性能優(yōu)勢?相對于傳統(tǒng)的CPU體系結(jié)構(gòu),GPU具有一些獨特的優(yōu)勢:
1)并行度高?計算能力強?
相對于CPU體系結(jié)構(gòu),GPU內(nèi)部集成了更多的并行計算單元,使得GPU在并行計算能力方面的表現(xiàn)更加出色?同時,其理論計算峰值也遠高于同時期CPU,當前NVIDIA A100 GPU在執(zhí)行Bert推理任務,其推理速度可達2個Intel至強金牌6240CPU的249倍6?
2)訪存帶寬高?
為了匹配GPU超強的并行能力,GPU內(nèi)部設置了大量訪存控制器和性能更強的內(nèi)部互聯(lián)網(wǎng)絡,導致GPU具有更高的內(nèi)存訪問帶寬?當前NVIDIA A100 GPU的內(nèi)存帶寬可達1.94TB/s,而同期Intel至強金牌6248 CPU僅為137GB/s?圖處理由于其計算訪存比高,算法執(zhí)行過程中計算次數(shù)多?單次計算量小的特點天然地與GPU的硬件特征相匹配?
四、總結(jié)
隨著深度學習(Deep Learning,DL)的持續(xù)進步,各類深度神經(jīng)網(wǎng)絡(Deep Neural Network ,DNN)模型層出不窮?DNN不僅在精確度上大幅超越傳統(tǒng)模型,其良好的泛化性也為眾多領域帶來了新的突破?
因此,人工智能(Artificial Intelligence, AI)技術得以迅速應用于各個行業(yè)?如今,無論是在物聯(lián)網(wǎng)(Intemet of Things, IoT)的邊緣設備,還是數(shù)據(jù)中心的高性能服務器,DNN的身影隨處可見,人工智能的發(fā)展離不開計算能力的提升,因此高性能GPU的需求也將不斷提升!
參考文獻:
(1)楊翔?深度學習模型的并行推理加速技術研究[D].(2)鄭志高 GPU上圖處理算法優(yōu)化關鍵技術研究[D].?(3)關磊?機器學習模型并行訓練關鍵技術研究[D].(4)薛圣瓏?機載預警雷達雜波快速生成及GPU實現(xiàn)研究[D].(5)韓吉昌?基于CUDA的國密算法SM3和SM4的設計與實現(xiàn)[D].