齊萬華 胡向陽
【摘 要】隨著數(shù)據(jù)化社會(huì)的到來,深度學(xué)習(xí)模型被廣泛地研究,并涌現(xiàn)了一批有影響力的模型。由于超參和神經(jīng)元的數(shù)目是百萬級(jí)別,所以這些模型的復(fù)雜度很高。另外,當(dāng)訓(xùn)練數(shù)據(jù)集增大時(shí),模型需要消耗更多的計(jì)算資源。GPGPU具有強(qiáng)大的并行計(jì)算能力,大大減少深度學(xué)習(xí)模型的訓(xùn)練時(shí)間。但GPU通用計(jì)算的性能提升與模型有關(guān),這方面鮮有人研究。本文側(cè)重于GPGPU下深度學(xué)習(xí)模型的性能分析。
【關(guān)鍵詞】GPU;GPGPU;深度學(xué)習(xí);性能
中圖分類號(hào): TP391 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2018)32-0218-002
DOI:10.19694/j.cnki.issn2095-2457.2018.32.101
【Abstract】With the advent of the data society,deep learning models have been extensively studied and a number of influential models have emerged.The complexity of these models is high,as the number of super-parameters and neurons is in the millions.In addition,as the training data set increases,the model consumes more computing resources.GPGPU has powerful parallel computing capability,which can greatly reduce the training time of deep learning models.But the performance improvement from GPGPU is related to the model.There is little research in this problem.This paper focuses on the performance analysis of deep learning models based on GPGPU.
【Key words】GPU;GPGPU;Deep learning;Efficiency
0 前言
盡管神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)在上世紀(jì)早已被提出,但它們一直作為機(jī)器學(xué)習(xí)的普通分支默默存在。直到最近,由于數(shù)據(jù)量的增加,計(jì)算能力的增強(qiáng)(如CPU、GPU以及基于CPU或GPU的集群系統(tǒng))和先進(jìn)深度學(xué)習(xí)技術(shù)的推動(dòng)(如Embedding 和注意力策略等[1,2]),基于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的工作才開始表現(xiàn)優(yōu)異,并得到學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注。如2012年CNN在ImageNet取得驚人成績(接近10%的提升);Google公司的AlphaGO戰(zhàn)勝了李世石和柯潔。由于神經(jīng)網(wǎng)絡(luò)超參和神經(jīng)元的數(shù)目是百萬級(jí)別,所以模型復(fù)雜度很高。另外,當(dāng)訓(xùn)練數(shù)據(jù)集增大時(shí),模型需要消耗更多的計(jì)算資源。GPU通用計(jì)算(GPGPU)具有強(qiáng)大的并行計(jì)算能力,大大減少深度學(xué)習(xí)模型的訓(xùn)練時(shí)間。但GPU通用計(jì)算的性能提升與模型有關(guān),這方面鮮有人研究。鑒于此,本文研究分析在GPU通用計(jì)算下不同深度模型的性能特點(diǎn)。
1 GPU通用計(jì)算
GPU通用計(jì)算(General-Purpose computing on Graphics Processing Units,GPGPU)是一種新型的計(jì)算架構(gòu)。與CPU不同,GPU的設(shè)計(jì)初衷是為了加速圖形處理,因此它的核心數(shù)是成千上萬,且具有強(qiáng)大的并行計(jì)算能力。目前,GPU通用計(jì)算已經(jīng)進(jìn)入高性能計(jì)算的主流行業(yè)[2],廣泛地用于圖形圖像處理和自然語言處理等領(lǐng)域,并取得了明顯的效果提升。
最初的GPU不具備可編程性。針對(duì)這一不足,一些高級(jí)編程平臺(tái)(如CUDA和OpenCL)被提出。CUDA是Nvidia公司提出的一個(gè)基于GPU的異構(gòu)編程平臺(tái)。它支持OpenACC和OpenCL編程框架,并提供了豐富的函數(shù)庫,如用于加速人工神經(jīng)網(wǎng)絡(luò)的 cuDNN[2]。
2 深度學(xué)習(xí)模型
自2006年杰弗里·辛頓等人在科學(xué)雜志上發(fā)表論文《一種深度置信網(wǎng)絡(luò)的快速學(xué)習(xí)算法》后,深度學(xué)習(xí)模型被廣泛地關(guān)注并研究。卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是其中的兩類代表模型。
2.1 卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)(CNN)主要用于圖像處理。它由一個(gè)輸入層,一個(gè)輸出層和多個(gè)隱藏層。每個(gè)隱藏層包括池化層,卷積層,全連接層和歸一化層。CNN的思想是卷積層。卷積層用來進(jìn)行特征抽取。它先構(gòu)建一個(gè)N*N的矩陣作為過濾器,然后對(duì)每個(gè)圖片進(jìn)行卷積操作。由于圖像經(jīng)過卷積操作后,圖像就縮小了,而且圖像邊緣的大部分信息都丟失了,池化層就是針對(duì)兩個(gè)問題提出的。池化層的思想是在圖像邊緣填充像素。本文的CNN包含兩個(gè)卷積層,每個(gè)卷積層采用1個(gè)2X2的卷積過濾器。
2.2 循環(huán)神經(jīng)網(wǎng)絡(luò)
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是針對(duì)序列數(shù)據(jù)設(shè)計(jì)的,在語音識(shí)別、自然語言處理領(lǐng)域引起了深刻地變革。它包括一個(gè)輸入層,一個(gè)輸出層,和多個(gè)隱層。與CNN有兩個(gè)不同點(diǎn):(1)RNN的輸入是有時(shí)序關(guān)系的。(2)網(wǎng)絡(luò)結(jié)構(gòu)不同,其中第隱層的輸入包括第隱層的中間結(jié)果。由于基本的RNN在深層的連接存在時(shí)會(huì)出現(xiàn)梯度消失的問題,長短期記憶網(wǎng)絡(luò)(LSTM),循環(huán)門單元(GRU)等RNN的變體被提出,用來改善梯度消失的問題。其中,LSTM在隱藏層計(jì)算時(shí),用加法代替了乘法,從而避免了梯度消失問題。本文的RNN模型是LSTM。
3 實(shí)驗(yàn)分析
本節(jié)首先介紹了實(shí)驗(yàn)環(huán)境和數(shù)據(jù)集,然后分析了不同模型在GPU和CPU計(jì)算條件下性能的特點(diǎn),以及不同數(shù)據(jù)量對(duì)GPU并行計(jì)算的影響。
CPU環(huán)境:英特爾Core i7-8086K 4.00GHz處理器,16GB內(nèi)存。
GPU環(huán)境:NVIDIA GeForce GTX 1080,16GB顯存, CUDA是CUDA9.0,人工神經(jīng)網(wǎng)絡(luò)的函數(shù)庫是cuDNN7。
數(shù)據(jù)集:CNN模型使用了MNIST數(shù)據(jù)集。MNIST由書寫數(shù)字的圖片和相應(yīng)的標(biāo)簽組成。圖片標(biāo)簽包括10類,即0到9。RNN模型是使用LSTM實(shí)現(xiàn)Char RNN功能。Char RNN[3]用來生成文章、詩歌甚至代碼。它的輸入是長度為N的序列,輸出是與輸入長度相等的序列。編程語言是Python 3。
3.1 不同模型的性能分析
本節(jié)在1000、2000、3000迭代次數(shù)下,分析CPU與GPU并行計(jì)算的性能和兩個(gè)深度學(xué)習(xí)模型(CNN和RNN)的性能特點(diǎn),如圖1所示。從圖中可以看出,(1)無論是CNN還是RNN,GPU的運(yùn)行速度都要大大高于CPU的運(yùn)算性能。這說明:GPU有更強(qiáng)的并行計(jì)算能力。如當(dāng)?shù)螖?shù)為1000時(shí),使用GPU運(yùn)行CNN所消耗的時(shí)間僅為5.36秒,而使用CPU所消耗的時(shí)間是76.15秒。對(duì)于大規(guī)模的并行計(jì)算,采用GPU運(yùn)算,比CPU要省時(shí)很多。(2)在相同實(shí)驗(yàn)環(huán)境下,CNN的運(yùn)算效率要高于RNN。因?yàn)镃NN模型在迭代次數(shù)為1000,2000,3000情況下,CPU與GPU運(yùn)行時(shí)間的比值依次為14.20、17.76和18.07,而RNN模型,在相同條件下,比值僅為5.88、5.81和5.89。這是由于在RNN模型的計(jì)算過程中,隱藏層之間存在數(shù)據(jù)依賴,導(dǎo)致一個(gè)樣本的計(jì)算過程不能完全并行。但多個(gè)樣本之間不存在數(shù)據(jù)依賴可以實(shí)現(xiàn)完全并行,所以GPU能夠加速RNN模型的訓(xùn)練,但CPU與GPU運(yùn)行時(shí)間的比值有限,小于CNN模型的相應(yīng)比值。
4 結(jié)束語
本文分析了CNN和RNN在CPU和GPU環(huán)境下,和不同迭代次數(shù)下性能的特點(diǎn)。實(shí)驗(yàn)結(jié)果表明:GPU在并行計(jì)算上有較強(qiáng)的加速能力。
【參考文獻(xiàn)】
[1]GOODFELLOW I,BENGIO Y,COURVILLE A,et al.Deep learning [M].MIT press Cambridge,2016.
[2]丁科,譚營.GPU通用計(jì)算及其在計(jì)算智能領(lǐng)域的應(yīng)用 [J].智能系統(tǒng)學(xué)報(bào),2015,10(01):1-11.
[3]何之源.21個(gè)項(xiàng)目玩轉(zhuǎn)深度學(xué)習(xí)——基于TensorFlow的實(shí)踐詳解[M].北京:電子工業(yè)出版社,2018.