齊萬華 胡向陽
【摘 要】隨著數據化社會的到來,深度學習模型被廣泛地研究,并涌現了一批有影響力的模型。由于超參和神經元的數目是百萬級別,所以這些模型的復雜度很高。另外,當訓練數據集增大時,模型需要消耗更多的計算資源。GPGPU具有強大的并行計算能力,大大減少深度學習模型的訓練時間。但GPU通用計算的性能提升與模型有關,這方面鮮有人研究。本文側重于GPGPU下深度學習模型的性能分析。
【關鍵詞】GPU;GPGPU;深度學習;性能
中圖分類號: TP391 文獻標識碼: A 文章編號: 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 前言
盡管神經網絡和深度學習在上世紀早已被提出,但它們一直作為機器學習的普通分支默默存在。直到最近,由于數據量的增加,計算能力的增強(如CPU、GPU以及基于CPU或GPU的集群系統)和先進深度學習技術的推動(如Embedding 和注意力策略等[1,2]),基于神經網絡和深度學習的工作才開始表現優異,并得到學術界和工業界的廣泛關注。如2012年CNN在ImageNet取得驚人成績(接近10%的提升);Google公司的AlphaGO戰勝了李世石和柯潔。由于神經網絡超參和神經元的數目是百萬級別,所以模型復雜度很高。另外,當訓練數據集增大時,模型需要消耗更多的計算資源。GPU通用計算(GPGPU)具有強大的并行計算能力,大大減少深度學習模型的訓練時間。但GPU通用計算的性能提升與模型有關,這方面鮮有人研究。鑒于此,本文研究分析在GPU通用計算下不同深度模型的性能特點。
1 GPU通用計算
GPU通用計算(General-Purpose computing on Graphics Processing Units,GPGPU)是一種新型的計算架構。與CPU不同,GPU的設計初衷是為了加速圖形處理,因此它的核心數是成千上萬,且具有強大的并行計算能力。目前,GPU通用計算已經進入高性能計算的主流行業[2],廣泛地用于圖形圖像處理和自然語言處理等領域,并取得了明顯的效果提升。
最初的GPU不具備可編程性。針對這一不足,一些高級編程平臺(如CUDA和OpenCL)被提出。CUDA是Nvidia公司提出的一個基于GPU的異構編程平臺。它支持OpenACC和OpenCL編程框架,并提供了豐富的函數庫,如用于加速人工神經網絡的 cuDNN[2]。
2 深度學習模型
自2006年杰弗里·辛頓等人在科學雜志上發表論文《一種深度置信網絡的快速學習算法》后,深度學習模型被廣泛地關注并研究。卷積神經網絡(CNN)和循環神經網絡(RNN)是其中的兩類代表模型。
2.1 卷積神經網絡
卷積神經網絡(CNN)主要用于圖像處理。它由一個輸入層,一個輸出層和多個隱藏層。每個隱藏層包括池化層,卷積層,全連接層和歸一化層。CNN的思想是卷積層。卷積層用來進行特征抽取。它先構建一個N*N的矩陣作為過濾器,然后對每個圖片進行卷積操作。由于圖像經過卷積操作后,圖像就縮小了,而且圖像邊緣的大部分信息都丟失了,池化層就是針對兩個問題提出的。池化層的思想是在圖像邊緣填充像素。本文的CNN包含兩個卷積層,每個卷積層采用1個2X2的卷積過濾器。
2.2 循環神經網絡
循環神經網絡(RNN)是針對序列數據設計的,在語音識別、自然語言處理領域引起了深刻地變革。它包括一個輸入層,一個輸出層,和多個隱層。與CNN有兩個不同點:(1)RNN的輸入是有時序關系的。(2)網絡結構不同,其中第隱層的輸入包括第隱層的中間結果。由于基本的RNN在深層的連接存在時會出現梯度消失的問題,長短期記憶網絡(LSTM),循環門單元(GRU)等RNN的變體被提出,用來改善梯度消失的問題。其中,LSTM在隱藏層計算時,用加法代替了乘法,從而避免了梯度消失問題。本文的RNN模型是LSTM。
3 實驗分析
本節首先介紹了實驗環境和數據集,然后分析了不同模型在GPU和CPU計算條件下性能的特點,以及不同數據量對GPU并行計算的影響。
CPU環境:英特爾Core i7-8086K 4.00GHz處理器,16GB內存。
GPU環境:NVIDIA GeForce GTX 1080,16GB顯存, CUDA是CUDA9.0,人工神經網絡的函數庫是cuDNN7。
數據集:CNN模型使用了MNIST數據集。MNIST由書寫數字的圖片和相應的標簽組成。圖片標簽包括10類,即0到9。RNN模型是使用LSTM實現Char RNN功能。Char RNN[3]用來生成文章、詩歌甚至代碼。它的輸入是長度為N的序列,輸出是與輸入長度相等的序列。編程語言是Python 3。
3.1 不同模型的性能分析
本節在1000、2000、3000迭代次數下,分析CPU與GPU并行計算的性能和兩個深度學習模型(CNN和RNN)的性能特點,如圖1所示。從圖中可以看出,(1)無論是CNN還是RNN,GPU的運行速度都要大大高于CPU的運算性能。這說明:GPU有更強的并行計算能力。如當迭代次數為1000時,使用GPU運行CNN所消耗的時間僅為5.36秒,而使用CPU所消耗的時間是76.15秒。對于大規模的并行計算,采用GPU運算,比CPU要省時很多。(2)在相同實驗環境下,CNN的運算效率要高于RNN。因為CNN模型在迭代次數為1000,2000,3000情況下,CPU與GPU運行時間的比值依次為14.20、17.76和18.07,而RNN模型,在相同條件下,比值僅為5.88、5.81和5.89。這是由于在RNN模型的計算過程中,隱藏層之間存在數據依賴,導致一個樣本的計算過程不能完全并行。但多個樣本之間不存在數據依賴可以實現完全并行,所以GPU能夠加速RNN模型的訓練,但CPU與GPU運行時間的比值有限,小于CNN模型的相應比值。
4 結束語
本文分析了CNN和RNN在CPU和GPU環境下,和不同迭代次數下性能的特點。實驗結果表明:GPU在并行計算上有較強的加速能力。
【參考文獻】
[1]GOODFELLOW I,BENGIO Y,COURVILLE A,et al.Deep learning [M].MIT press Cambridge,2016.
[2]丁科,譚營.GPU通用計算及其在計算智能領域的應用 [J].智能系統學報,2015,10(01):1-11.
[3]何之源.21個項目玩轉深度學習——基于TensorFlow的實踐詳解[M].北京:電子工業出版社,2018.