徐青青, 安 虹, 武 錚, 金 旭
(中國(guó)科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 合肥 230027)
近些年來(lái), 深度學(xué)習(xí)技術(shù)蓬勃發(fā)展, 廣泛應(yīng)用于各大領(lǐng)域并接連取得了突破性成就.卷積神經(jīng)網(wǎng)絡(luò)作為該領(lǐng)域中最具影響力的網(wǎng)絡(luò)結(jié)構(gòu)之一, 在計(jì)算機(jī)視覺(jué)領(lǐng)域中長(zhǎng)期占據(jù)著主導(dǎo)地位, 相關(guān)技術(shù)趨向成熟.目前,卷積神經(jīng)網(wǎng)絡(luò)主要基于通用CPU 和GPU 進(jìn)行訓(xùn)練,而通用處理器在面對(duì)網(wǎng)絡(luò)訓(xùn)練的龐大計(jì)算需求時(shí), 表現(xiàn)出較低的能效比.而且, 隨著網(wǎng)絡(luò)結(jié)構(gòu)朝著更深更復(fù)雜的方向發(fā)展, 對(duì)硬件計(jì)算能力提出了越來(lái)越高的要求, 隨之出現(xiàn)了各種類(lèi)型的專(zhuān)用處理器.為了對(duì)這類(lèi)處理器進(jìn)行評(píng)估并指導(dǎo)其優(yōu)化設(shè)計(jì), 需要一套基準(zhǔn)測(cè)試程序作為指導(dǎo)標(biāo)準(zhǔn).
為此, 本文面向卷積神經(jīng)網(wǎng)絡(luò)提出了一套基準(zhǔn)測(cè)試程序.基準(zhǔn)測(cè)試程序的設(shè)計(jì)分為兩部分, 在為宏基準(zhǔn)測(cè)試程序選定好卷積神經(jīng)網(wǎng)絡(luò)后, 為了把握網(wǎng)絡(luò)的整體性能表現(xiàn), 本文從系統(tǒng)層面對(duì)網(wǎng)絡(luò)程序進(jìn)行評(píng)測(cè).但是, 網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜性使得難以對(duì)其進(jìn)行深入的微架構(gòu)性能分析和瓶頸定位, 這就需要對(duì)網(wǎng)絡(luò)中各個(gè)組成部分做進(jìn)一步的分析.考慮到卷積神經(jīng)網(wǎng)絡(luò)是由網(wǎng)絡(luò)層構(gòu)成的, 除了輸入層, 網(wǎng)絡(luò)訓(xùn)練過(guò)程中每個(gè)網(wǎng)絡(luò)層都是作用于相鄰層輸出的張量結(jié)果.將這些網(wǎng)絡(luò)層看做獨(dú)立的計(jì)算單元, 將其從網(wǎng)絡(luò)中抽取出來(lái)并為其提供輸入集, 使其成為完整的測(cè)試模塊, 構(gòu)建微基準(zhǔn)測(cè)試程序.由于不同的網(wǎng)絡(luò)層具有不同的程序特性, 包括計(jì)算特性和訪存特性等, 通過(guò)對(duì)這些程序獨(dú)立進(jìn)行分析, 明確各個(gè)網(wǎng)絡(luò)層的行為特征, 定位它們的性能瓶頸, 從而有針對(duì)性地進(jìn)行處理器的結(jié)構(gòu)設(shè)計(jì).
本文在給出基準(zhǔn)測(cè)試程序后, 在通用CPU 平臺(tái)上運(yùn)行基準(zhǔn)測(cè)試程序, 從系統(tǒng)和微架構(gòu)層面對(duì)測(cè)試程序進(jìn)行性能評(píng)測(cè).通過(guò)分析性能數(shù)據(jù), 明確測(cè)試程序的行為特征和性能瓶頸, 進(jìn)而給出處理器的優(yōu)化建議.
早期的神經(jīng)網(wǎng)絡(luò)基準(zhǔn)測(cè)試程序不具有討論價(jià)值,以BenchNN[1]為例, 它包含的是多層感知器等早期神經(jīng)網(wǎng)絡(luò).若用這樣過(guò)時(shí)的基準(zhǔn)測(cè)試程序?qū)μ幚砥鬟M(jìn)行評(píng)測(cè), 不能準(zhǔn)確反映出先進(jìn)神經(jīng)網(wǎng)絡(luò)和應(yīng)用的行為特征, 不能對(duì)處理器的設(shè)計(jì)提供正確指導(dǎo).
DeepBench[2]是由百度開(kāi)發(fā)的一款神經(jīng)網(wǎng)絡(luò)基準(zhǔn)測(cè)試程序, 旨在評(píng)測(cè)神經(jīng)網(wǎng)絡(luò)中最核心的網(wǎng)絡(luò)層和基礎(chǔ)操作的性能表現(xiàn), 因此它僅選取了卷積層、循環(huán)層和矩陣乘法作為測(cè)試程序.由于DeepBench 包含的網(wǎng)絡(luò)層有限, 不能全面反映出神經(jīng)網(wǎng)絡(luò)的行為特性.
Data Motifs[3]是面向大數(shù)據(jù)應(yīng)用和神經(jīng)網(wǎng)絡(luò)任務(wù)的基準(zhǔn)測(cè)試程序, 與神經(jīng)網(wǎng)絡(luò)相關(guān)的測(cè)試程序包括卷積層、池化層、激活層和矩陣乘法.與DeepBench 相比程序集更豐富, 但是仍缺乏全面性.
BenchIP[4]的測(cè)試程序較多, 包括11 個(gè)神經(jīng)網(wǎng)絡(luò)和10 個(gè)網(wǎng)絡(luò)層, 但是測(cè)試程序的選取有待改進(jìn).BenchIP 沒(méi)有選取主流的Inception 系列網(wǎng)絡(luò)等; 在選取人臉識(shí)別網(wǎng)絡(luò)時(shí), 未包含識(shí)別效果最佳的FaceNet[5];在選取網(wǎng)絡(luò)層時(shí), 沒(méi)有剔除不再流行的LRN 等層, 而未包含流行的Concat 和Eltwise 等層.
針對(duì)神經(jīng)網(wǎng)絡(luò)基準(zhǔn)測(cè)試程序的研究工作還有很多,但是它們?cè)谠O(shè)計(jì)時(shí)存在諸多不足, 主要表現(xiàn)在: 大多數(shù)基準(zhǔn)測(cè)試程序僅從網(wǎng)絡(luò)或網(wǎng)絡(luò)層的單一角度進(jìn)行設(shè)計(jì);在選取目標(biāo)網(wǎng)絡(luò)或網(wǎng)絡(luò)層時(shí)缺乏全面性; 沒(méi)有充分考慮所選網(wǎng)絡(luò)或網(wǎng)絡(luò)層的流行性; 僅針對(duì)網(wǎng)絡(luò)的前向計(jì)算過(guò)程進(jìn)行設(shè)計(jì); 缺少?gòu)南到y(tǒng)、微架構(gòu)層面對(duì)測(cè)試程序進(jìn)行全面的性能分析過(guò)程.本文基于卷積神經(jīng)網(wǎng)絡(luò),克服現(xiàn)有基準(zhǔn)測(cè)試程序存在的種種缺陷, 提出了一套基準(zhǔn)測(cè)試程序.
為了使構(gòu)建出的基準(zhǔn)測(cè)試程序能夠有效指導(dǎo)硬件設(shè)計(jì), 本文充分調(diào)研了卷積神經(jīng)網(wǎng)絡(luò)的主流應(yīng)用領(lǐng)域和各領(lǐng)域的網(wǎng)絡(luò)情況, 為宏基準(zhǔn)測(cè)試程序的構(gòu)造奠定基礎(chǔ).基于流行性和代表性選取得到的卷積神經(jīng)網(wǎng)絡(luò)如下:
(1)手寫(xiě)數(shù)字識(shí)別網(wǎng)絡(luò): LeNet[6]的簡(jiǎn)單網(wǎng)絡(luò)結(jié)構(gòu)對(duì)手寫(xiě)數(shù)字圖像的識(shí)別效果較好, 因此被選作手寫(xiě)數(shù)字識(shí)別領(lǐng)域的代表網(wǎng)絡(luò), 采用的數(shù)據(jù)集為MNIST.
(2)圖像分類(lèi)網(wǎng)絡(luò): 從2012 年開(kāi)始, 圖像分類(lèi)領(lǐng)域涌現(xiàn)出了眾多卷積神經(jīng)網(wǎng)絡(luò), 最初大多都基于ImageNet數(shù)據(jù)集進(jìn)行訓(xùn)練, 并在ILSVRC 競(jìng)賽中表現(xiàn)出了優(yōu)異的分類(lèi)效果, 包括2012 年的AlexNet[7], 2013 年的ZFNet[8], 2014 年的Vgg[9]和GoogLeNet[10], 2015 年的ResNet[11], 以及表現(xiàn)優(yōu)于ResNet 的DenseNet[12].在選取Inception 和ResNet 系列網(wǎng)絡(luò)時(shí), 本文將其多個(gè)版本均包含進(jìn)基準(zhǔn)測(cè)試程序, 這是因?yàn)椴煌姹镜木W(wǎng)絡(luò)復(fù)雜度差異較大且均被廣泛使用.在選取以上網(wǎng)絡(luò)作為圖像分類(lèi)領(lǐng)域的代表網(wǎng)絡(luò)后, 統(tǒng)一為它們提供計(jì)算機(jī)視覺(jué)標(biāo)準(zhǔn)數(shù)據(jù)集ImageNet.
(3)輕量型分類(lèi)網(wǎng)絡(luò): 卷積神經(jīng)網(wǎng)絡(luò)大多關(guān)注訓(xùn)練精度, 在精度要求不高的情況下, 小規(guī)模網(wǎng)絡(luò)模型通常具有訓(xùn)練速度快、帶寬要求低等優(yōu)點(diǎn), 且能夠很好地部署到FPGA 等硬件上, 因此, 輕量型分類(lèi)網(wǎng)絡(luò)得以提出, 著名的有SqueezeNet[13], ShuffleNet[14]和MobileNet[15].本文選取這3 個(gè)網(wǎng)絡(luò)作為輕量型網(wǎng)絡(luò)的代表, 并選擇ImageNet 作為其數(shù)據(jù)集.
(4)目標(biāo)檢測(cè)網(wǎng)絡(luò): 該領(lǐng)域主要包括兩類(lèi)卷積神經(jīng)網(wǎng)絡(luò), 分別是R-CNN 系列網(wǎng)絡(luò)和YOLO 系列網(wǎng)絡(luò), 這兩類(lèi)網(wǎng)絡(luò)在目前的目標(biāo)檢測(cè)領(lǐng)域均得到了廣泛應(yīng)用并占據(jù)著主導(dǎo)地位.本文分別選取R-CNN[16]和YOLO v3[17]作為該領(lǐng)域中R-CNN 系列和YOLO 系列的代表網(wǎng)絡(luò), 采用目標(biāo)檢測(cè)數(shù)據(jù)集PASCAL VOC.
(5)語(yǔ)義分割網(wǎng)絡(luò): 圖像分割技術(shù)在2014 年之后取得了突破性進(jìn)展, 這得益于FCN[18]的提出, 該網(wǎng)絡(luò)確定了語(yǔ)義分割的基礎(chǔ)框架, 實(shí)現(xiàn)了對(duì)輸入圖像的逐像素分類(lèi), 隨后出現(xiàn)了很多基于FCN 的研究工作.本文選取FCN 作為語(yǔ)義分割的代表網(wǎng)絡(luò), 為其提供數(shù)據(jù)集PASCAL VOC 2012.
(6)醫(yī)學(xué)影像分割網(wǎng)絡(luò): U-Net[19]常作為Kaggle 競(jìng)賽中解決醫(yī)學(xué)影像分割問(wèn)題的優(yōu)選方案, 該網(wǎng)絡(luò)采用特殊的U 型結(jié)構(gòu), 具有從少量數(shù)據(jù)中學(xué)習(xí)特征的能力.本文選取U-Net 作為醫(yī)學(xué)影像分割領(lǐng)域的代表網(wǎng)絡(luò),并為其提供肺部結(jié)節(jié)檢測(cè)數(shù)據(jù)集LUNA16.
(7)人臉識(shí)別網(wǎng)絡(luò): 已有很多前沿項(xiàng)目將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到人臉識(shí)別任務(wù)中, 最著名的包括DeepID[20],DeepFace[21]和FaceNet, 表現(xiàn)最優(yōu)的FaceNet 在人臉數(shù)據(jù)集LFW 上的識(shí)別準(zhǔn)確率高達(dá)99.63%, 已超出人眼識(shí)別的99.25%準(zhǔn)確率.本文選取FaceNet 作為人臉識(shí)別領(lǐng)域的代表網(wǎng)絡(luò), 并為其提供數(shù)據(jù)集LFW.
本文為圖像分類(lèi)領(lǐng)域選取的網(wǎng)絡(luò)多達(dá)十幾個(gè), 但是這些網(wǎng)絡(luò)的作用不僅僅局限于圖像分類(lèi), 由于它們具有很好的特征提取能力, 目前被廣泛應(yīng)用于各大領(lǐng)域.如神經(jīng)風(fēng)格遷移應(yīng)用fast-style-transfer 的核心網(wǎng)絡(luò)為Vgg; 主流實(shí)例分割網(wǎng)絡(luò)Mask R-CNN[22]的核心網(wǎng)絡(luò)為ResNet; Faster R-CNN[23]的核心網(wǎng)絡(luò)為ZFNet 或Vgg 等.綜上所述, 本文共選取了20 個(gè)流行的卷積神經(jīng)網(wǎng)絡(luò)并為各個(gè)網(wǎng)絡(luò)配置了數(shù)據(jù)集, 這些網(wǎng)絡(luò)涉及到的應(yīng)用領(lǐng)域眾多, 具有很好的代表性, 它們共同構(gòu)成了宏基準(zhǔn)測(cè)試程序.
在提出和改進(jìn)卷積神經(jīng)網(wǎng)絡(luò)模型的過(guò)程中, 很多研究工作都是著眼于降低模型的計(jì)算量和參數(shù)量.網(wǎng)絡(luò)計(jì)算量在很大程度上決定了網(wǎng)絡(luò)模型的訓(xùn)練時(shí)間和預(yù)測(cè)時(shí)間; 網(wǎng)絡(luò)攜帶的參數(shù)量又與網(wǎng)絡(luò)在分布式訓(xùn)練過(guò)程中產(chǎn)生的跨節(jié)點(diǎn)通信量有關(guān).在網(wǎng)絡(luò)進(jìn)行分布式數(shù)據(jù)并行訓(xùn)練時(shí), 參數(shù)服務(wù)器對(duì)各個(gè)計(jì)算節(jié)點(diǎn)上的參數(shù)梯度進(jìn)行收集后求平均值, 再將處理后的梯度回傳給計(jì)算節(jié)點(diǎn)用于更新本地參數(shù), 當(dāng)網(wǎng)絡(luò)的參數(shù)較多時(shí),參數(shù)服務(wù)器和計(jì)算節(jié)點(diǎn)之間的參數(shù)梯度傳輸量較大,可能會(huì)產(chǎn)生較高的通信延遲, 影響網(wǎng)絡(luò)的訓(xùn)練速度.
把握網(wǎng)絡(luò)的計(jì)算量和參數(shù)量有助于估計(jì)網(wǎng)絡(luò)的計(jì)算耗時(shí)和通信耗時(shí)情況, 在衡量網(wǎng)絡(luò)模型的計(jì)算量時(shí),針對(duì)單個(gè)樣本輸入, 選取網(wǎng)絡(luò)計(jì)算過(guò)程中產(chǎn)生的乘加操作次數(shù)MACCs 作為評(píng)測(cè)指標(biāo).在衡量網(wǎng)絡(luò)模型的參數(shù)量時(shí), 選取卷積層和全連接層攜帶的參數(shù)個(gè)數(shù)作為評(píng)測(cè)指標(biāo), 這是因?yàn)樗鼈兙哂械膮?shù)量通常占據(jù)了網(wǎng)絡(luò)參數(shù)總量的絕大部分, 而其他網(wǎng)絡(luò)層不具有參數(shù)或只具有很少的參數(shù).圖1 給出了所選網(wǎng)絡(luò)的計(jì)算量和參數(shù)量, 從圖中可以看出, 各個(gè)網(wǎng)絡(luò)的計(jì)算量和參數(shù)量存在較大的差異性.
圖1 卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算量和參數(shù)量
在針對(duì)目標(biāo)程序進(jìn)行軟硬件優(yōu)化時(shí), 首先需要對(duì)程序進(jìn)行熱點(diǎn)分析.本文通過(guò)對(duì)所選網(wǎng)絡(luò)中網(wǎng)絡(luò)層的出現(xiàn)頻率和執(zhí)行時(shí)間占比進(jìn)行統(tǒng)計(jì)分析, 定位出各個(gè)網(wǎng)絡(luò)中頻繁出現(xiàn)、較耗時(shí)的網(wǎng)絡(luò)層, 對(duì)這些網(wǎng)絡(luò)層進(jìn)行優(yōu)化通常能夠明顯提升網(wǎng)絡(luò)的計(jì)算效率.圖2 給出了目標(biāo)網(wǎng)絡(luò)中網(wǎng)絡(luò)層的出現(xiàn)頻率, 圖3 基于Intel Xeon E5-2695 給出了網(wǎng)絡(luò)層在網(wǎng)絡(luò)中的執(zhí)行時(shí)間占比.
不同的卷積神經(jīng)網(wǎng)絡(luò)包含的網(wǎng)絡(luò)層存在差異性,且各個(gè)網(wǎng)絡(luò)層在網(wǎng)絡(luò)中的出現(xiàn)頻率不盡相同, 本文所選網(wǎng)絡(luò)主要涉及11 種網(wǎng)絡(luò)層.由圖2 可以看出, 所有網(wǎng)絡(luò)均包含卷積層和ReLU 層, 兩者的出現(xiàn)頻率較高且相當(dāng), 頻率總和在大多數(shù)網(wǎng)絡(luò)中高達(dá)50%以上.這是因?yàn)榫矸e層和ReLU 層是卷積神經(jīng)網(wǎng)絡(luò)中最核心的操作, 卷積層在網(wǎng)絡(luò)中反復(fù)出現(xiàn)起到逐步提取特征的作用, ReLU 層一般作用于卷積層之后, 為網(wǎng)絡(luò)引入非線性.圖中多數(shù)網(wǎng)絡(luò)包含歸一化層(LRN 層、BatchNorm層), L R N 層出現(xiàn)在早期提出的網(wǎng)絡(luò)中, 隨后被BatchNorm 層取代, BatchNorm 層在網(wǎng)絡(luò)中的出現(xiàn)頻率通常高達(dá)30%.
圖2 網(wǎng)絡(luò)層的出現(xiàn)頻率
圖3 網(wǎng)絡(luò)層的執(zhí)行時(shí)間占比
此外, 最大池化層出現(xiàn)在大多數(shù)網(wǎng)絡(luò)中且出現(xiàn)頻率較高, 平均池化層一般以全局平均池化的方式出現(xiàn)在網(wǎng)絡(luò)中且出現(xiàn)頻率一律較低.全連接層通常出現(xiàn)在網(wǎng)絡(luò)的后幾層且出現(xiàn)次數(shù)不超過(guò)3 次, Softmax 層在多數(shù)網(wǎng)絡(luò)中單次出現(xiàn), 反卷積層對(duì)于語(yǔ)義分割領(lǐng)域的網(wǎng)絡(luò)(FCN、U-Net 等)具有不可或缺的影響, 兩類(lèi)融合層(Concat 層、Eltwise 層)以較高頻率出現(xiàn)在多數(shù)網(wǎng)絡(luò)中.
圖3 顯示卷積層的執(zhí)行時(shí)間占比在所有網(wǎng)絡(luò)中均高達(dá)70%以上, 這是因?yàn)榫矸e層在各個(gè)網(wǎng)絡(luò)中的出現(xiàn)頻率較高, 且單個(gè)卷積層產(chǎn)生的計(jì)算量較大.相比于卷積層, ReLU 層盡管有著相當(dāng)?shù)某霈F(xiàn)頻率, 但是執(zhí)行時(shí)間占比均在5%以下, 這是因?yàn)镽eLU 層的計(jì)算是基于元素級(jí)別的, 產(chǎn)生的計(jì)算量較少.BatchNorm 層一旦被卷積神經(jīng)網(wǎng)絡(luò)所采用, 出現(xiàn)頻率一般較高, 且執(zhí)行時(shí)間占比能夠達(dá)到10%至20%.全連接層和Softmax 層在較淺的網(wǎng)絡(luò)中有著較高的執(zhí)行時(shí)間占比, 但是均不超過(guò)10%.而在較深的網(wǎng)絡(luò)中, 它們對(duì)應(yīng)的執(zhí)行時(shí)間占比很低, 這是因?yàn)槿B接層和Softmax 層通常出現(xiàn)在網(wǎng)絡(luò)的最后幾層, 且全連接層的出現(xiàn)次數(shù)不超過(guò)3 次,Softmax 層的出現(xiàn)次數(shù)一般為單次, 這兩類(lèi)網(wǎng)絡(luò)層的執(zhí)行時(shí)間相對(duì)于眾多的其他層而言非常少.最大池化層的執(zhí)行時(shí)間占比在多數(shù)網(wǎng)絡(luò)中不超過(guò)5%, 平均池化層的執(zhí)行時(shí)間占比極低, 兩類(lèi)融合層在網(wǎng)絡(luò)中的執(zhí)行時(shí)間比例不足10%.
綜合網(wǎng)絡(luò)層的出現(xiàn)頻率和執(zhí)行時(shí)間占比情況, 本文最終選取卷積層、ReLU 層、最大池化層、平均池化層、BatchNorm 層、全連接層、Softmax 層、反卷積層、Concat 層和Eltwise 層構(gòu)建微基準(zhǔn)測(cè)試程序.值得注意的是, 本文沒(méi)有選取LRN 層是因?yàn)樵搶赢?dāng)前已不再流行, 將其納入基準(zhǔn)測(cè)試程序不具有實(shí)際意義.微基準(zhǔn)測(cè)試程序涵蓋了目前卷積神經(jīng)網(wǎng)絡(luò)中流行的網(wǎng)絡(luò)層, 且大多數(shù)網(wǎng)絡(luò)層在卷積神經(jīng)網(wǎng)絡(luò)中有著較高的出現(xiàn)頻率或執(zhí)行時(shí)間占比, 所選的網(wǎng)絡(luò)層對(duì)于卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建發(fā)揮著不可或缺的作用.
通過(guò)詳盡的調(diào)研與分析, 本文最終選取20 個(gè)主流的卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成宏基準(zhǔn)測(cè)試程序, 而微基準(zhǔn)測(cè)試程序集如表1 所示.
表1 微基準(zhǔn)測(cè)試程序集
根據(jù)實(shí)際應(yīng)用情況, 本文為卷積層構(gòu)造了5 種常用配置, 分別是(3×3, 1), (3×3, 2), (1×1, 1), (5×5, 1),(7×7, 2), 配置給出了卷積核尺寸和卷積步長(zhǎng); 為平均池化層構(gòu)造了2 種配置, 分別是(2×2, 2), (3×3, 2), 為最大池化層給出的配置為(7×7, 7), 配置給出了池化窗口大小和池化步長(zhǎng).因此, 微基準(zhǔn)測(cè)試程序共包含15 個(gè)子測(cè)試模塊.此外, 在輸入集方面, 本文提供了小中大3 種規(guī)模, 分別為(64, 256, 56×56), (64, 128, 112×112),(64, 64, 224×224), 規(guī)模參數(shù)依次給出了批量樣本數(shù)、通道數(shù)和輸入張量的尺寸.
圖4 給出了基準(zhǔn)測(cè)試程序的實(shí)現(xiàn)及評(píng)測(cè)框架, 本文基于通用CPU、GPU 和國(guó)產(chǎn)神威平臺(tái)上的高效深度學(xué)習(xí)庫(kù), 給出了基準(zhǔn)測(cè)試程序在這些平臺(tái)上的實(shí)現(xiàn).
圖4 基準(zhǔn)測(cè)試程序?qū)崿F(xiàn)及評(píng)測(cè)框架
實(shí)驗(yàn)基于3 臺(tái)商用Intel 服務(wù)器, 每臺(tái)服務(wù)器的硬件配置具體如表2 所示.
表2 實(shí)驗(yàn)服務(wù)器的硬件配置
實(shí)驗(yàn)采用性能分析工具Intel VTune Amplifier XE 和Perf, 在程序執(zhí)行過(guò)程中, 捕獲系統(tǒng)中發(fā)生的硬件事件.通過(guò)對(duì)眾多事件有選擇地進(jìn)行選取和計(jì)算, 得到所需的性能數(shù)據(jù).
卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程是基于大數(shù)據(jù)的, 大量的訓(xùn)練數(shù)據(jù)最開(kāi)始存放于磁盤(pán), 在每次迭代前, 輸入層從磁盤(pán)讀取批量樣本數(shù)據(jù), 整個(gè)訓(xùn)練過(guò)程中針對(duì)大量數(shù)據(jù)的讀取操作可能會(huì)造成較高的I/O 等待延遲.另外, 為了加速網(wǎng)絡(luò)的訓(xùn)練過(guò)程, 基于多節(jié)點(diǎn)的分布式數(shù)據(jù)并行訓(xùn)練[24]就顯得尤為必要, 然而, 這一過(guò)程中網(wǎng)絡(luò)參數(shù)梯度需要在參數(shù)服務(wù)器和計(jì)算節(jié)點(diǎn)間相互傳輸,可能會(huì)產(chǎn)生大量的節(jié)點(diǎn)間通信從而造成較高的通信延遲.為了把握宏基準(zhǔn)測(cè)試程序中各個(gè)網(wǎng)絡(luò)的整體性能表現(xiàn), 在3 臺(tái)服務(wù)器上執(zhí)行網(wǎng)絡(luò)的分布式數(shù)據(jù)并行訓(xùn)練, 圖5 給出了這些網(wǎng)絡(luò)在batchsize 為2 時(shí)的I/O 等待延遲、跨節(jié)點(diǎn)通信延遲和CPU 利用率等3 個(gè)系統(tǒng)性能指標(biāo)的評(píng)測(cè)結(jié)果.
圖5 I/O 等待延遲、跨節(jié)點(diǎn)通信延遲和CPU 利用率
由圖5 可知, 所有網(wǎng)絡(luò)的I/O 等待時(shí)間均不足1%(圖中一律顯示為1%).雖然訓(xùn)練數(shù)據(jù)量巨大, 但是,網(wǎng)絡(luò)在每次迭代訓(xùn)練的過(guò)程中, 僅由輸入層從磁盤(pán)讀取一批次訓(xùn)練數(shù)據(jù), 產(chǎn)生I/O 行為.在數(shù)據(jù)到達(dá)網(wǎng)絡(luò)后,其他網(wǎng)絡(luò)層的計(jì)算都是基于上一層產(chǎn)生的輸出結(jié)果,這些操作數(shù)存放在內(nèi)存中, 中間網(wǎng)絡(luò)層的計(jì)算過(guò)程不涉及磁盤(pán)的讀寫(xiě)操作, 通信過(guò)程同樣不存在I/O 行為.輸入層讀磁盤(pán)產(chǎn)生的I/O 等待延遲相對(duì)于網(wǎng)絡(luò)計(jì)算時(shí)間和通信時(shí)間而言極低, 讀磁盤(pán)造成的I/O 等待不是影響網(wǎng)絡(luò)模型訓(xùn)練性能的因素.
然而, 很多網(wǎng)絡(luò)的通信延遲顯示較高, 部分網(wǎng)絡(luò)的通信時(shí)間高達(dá)40%.結(jié)合圖6 給出的網(wǎng)絡(luò)計(jì)算量與參數(shù)量的比值來(lái)看, 可以發(fā)現(xiàn)比值較低的網(wǎng)絡(luò)通常具有較高的通信時(shí)間占比, 而對(duì)于計(jì)算量與參數(shù)量比值最大的網(wǎng)絡(luò)U-Net, 通信時(shí)間不足2%.這是因?yàn)楫?dāng)網(wǎng)絡(luò)參數(shù)量相對(duì)于計(jì)算量越小時(shí), 通信時(shí)間相對(duì)于計(jì)算時(shí)間也就越少, 通信時(shí)間占比越低, 因此, 可以從網(wǎng)絡(luò)計(jì)算量與參數(shù)量的比值對(duì)網(wǎng)絡(luò)通信延遲作出估計(jì).
圖6 網(wǎng)絡(luò)計(jì)算量與參數(shù)量的比值
最后, 從CPU 利用率來(lái)看, 各個(gè)網(wǎng)絡(luò)的這一指標(biāo)值存在差異性, 通信時(shí)間占比較低的網(wǎng)絡(luò)通常具有較高的CPU 利用率, 對(duì)計(jì)算資源的利用更加充分.
經(jīng)過(guò)進(jìn)一步的探究發(fā)現(xiàn), 隨著batchsize 的增大, 這些網(wǎng)絡(luò)的通信時(shí)間占比減小且CPU 利用率增大, 這是因?yàn)榫W(wǎng)絡(luò)計(jì)算量大幅增加, 而網(wǎng)絡(luò)參數(shù)量近似不變.因此, 為網(wǎng)絡(luò)訓(xùn)練過(guò)程選取較大的batchsize 有利于減少通信開(kāi)銷(xiāo)且更充分地利用CPU 計(jì)算資源, 網(wǎng)絡(luò)能夠較快地訓(xùn)練完所有數(shù)據(jù).為了支持網(wǎng)絡(luò)在較大batchsize下的訓(xùn)練, 在構(gòu)建網(wǎng)絡(luò)訓(xùn)練平臺(tái)時(shí), 需要配置足夠的內(nèi)存量.
接下來(lái)針對(duì)微基準(zhǔn)測(cè)試程序中的網(wǎng)絡(luò)層, 從微架構(gòu)層面進(jìn)行自頂向下的性能評(píng)測(cè), 明確不同網(wǎng)絡(luò)層的行為特征并定位它們的性能瓶頸, 從而有針對(duì)性地對(duì)處理器的微架構(gòu)改進(jìn)提出建議.后續(xù)實(shí)驗(yàn)都是基于各個(gè)網(wǎng)絡(luò)層程序在大規(guī)模輸入集下的執(zhí)行過(guò)程所得.
首先關(guān)注測(cè)試程序的整體性能表現(xiàn), 圖7 給出了它們的IPC 和Retiring.IPC 表示周期指令數(shù), Retiring表示執(zhí)行有效微操作的流水線槽數(shù)占流水線總槽數(shù)的比例.實(shí)驗(yàn)平臺(tái)采用Intel 的四發(fā)射處理器, 假設(shè)每條程序指令被解碼為單個(gè)微操作, 當(dāng)Retiring 為100%時(shí), IPC 可達(dá)到理論最大值4.圖中顯示IPC 與Retiring具有高度的一致性, 多數(shù)程序的IPC 高達(dá)2 以上, 程序執(zhí)行性能表現(xiàn)較好.BatchNorm、Softmax、Concat 和Eltwise 層的IPC 明顯較低, 程序的指令并行性仍有待發(fā)掘.然而, Retiring 較高并不代表目標(biāo)程序沒(méi)有性能優(yōu)化空間, 通過(guò)進(jìn)一步分析發(fā)現(xiàn), 池化層和ReLU 層的向量化程度顯示極低.可以通過(guò)對(duì)Intel MKL-DNN 中池化層和ReLU 層實(shí)行向量?jī)?yōu)化, 使得單條指令就能完成多個(gè)浮點(diǎn)計(jì)算, 由此來(lái)提升程序執(zhí)行性能.
圖7 IPC 和Retiring
對(duì)于非空的流水線槽, 其上執(zhí)行的微操作如果最終成功退役, 則該流水線槽被歸類(lèi)為Retiring, 不產(chǎn)生性能瓶頸.但是, 當(dāng)分支預(yù)測(cè)發(fā)生錯(cuò)誤時(shí), 流水線槽上執(zhí)行的微操作在退役前被取消, 導(dǎo)致流水線槽的無(wú)效執(zhí)行.圖8 給出了各個(gè)程序的分支指令比重和分支預(yù)測(cè)錯(cuò)誤率, 可以看出ReLU 層、最大池化層和Softmax層具有較高比例的分支指令, 且分支預(yù)測(cè)錯(cuò)誤率較高,程序性能在很大程度上受到錯(cuò)誤分支預(yù)測(cè)的影響.這是因?yàn)檫@幾個(gè)程序中存在大量的比較操作, 且操作數(shù)之間的大小存在不可預(yù)測(cè)性.其他程序中的分支預(yù)測(cè)行為主要產(chǎn)生于循環(huán)控制部分, 這類(lèi)的分支跳轉(zhuǎn)能夠很好地被當(dāng)前基于歷史的分支預(yù)測(cè)機(jī)制所處理, 因此表現(xiàn)出較低的分支預(yù)測(cè)錯(cuò)誤率.
圖8 分支指令比重和分支預(yù)測(cè)錯(cuò)誤率
然而, 并不是所有的流水線槽都會(huì)被占用, 空的流水線槽表現(xiàn)為CPU 停頓, 從CPU 時(shí)鐘周期上微操作的執(zhí)行情況考慮, 可以將總的時(shí)鐘周期劃分為工作周期和停頓周期.在CPU 停頓周期上, 執(zhí)行單元空閑, 沒(méi)有微操作在執(zhí)行, 頻繁的CPU 停頓必然會(huì)造成程序性能的極大損失.
引起CPU 停頓的原因有很多, 從前端來(lái)看, 取指譯碼階段造成的CPU 停頓表現(xiàn)為指令饑餓.通過(guò)對(duì)目標(biāo)程序的指令饑餓表現(xiàn)進(jìn)行探究, 發(fā)現(xiàn)具有較高分支預(yù)測(cè)錯(cuò)誤率的ReLU 層、最大池化層和Softmax 層對(duì)應(yīng)較高的指令饑餓, 測(cè)試程序的指令饑餓在較大程度上由錯(cuò)誤的分支預(yù)測(cè)造成.這是因?yàn)楫?dāng)分支預(yù)測(cè)發(fā)生錯(cuò)誤后, 流水線需要被重新刷新, 在程序恢復(fù)正確執(zhí)行路徑之前, 執(zhí)行單元沒(méi)有來(lái)自于前端的可執(zhí)行指令, 處于等待指令的空閑狀態(tài).改善分支預(yù)測(cè)機(jī)制對(duì)于這3 個(gè)程序的性能提升會(huì)帶來(lái)明顯效果, 不僅使執(zhí)行無(wú)效微操作的流水線槽減少, 還能降低指令饑餓.
前端造成的停頓一般較少, 很大一部分的CPU 停頓由后端執(zhí)行階段造成, 由于后端資源有限, 當(dāng)產(chǎn)生資源競(jìng)爭(zhēng)時(shí), 微操作便不能被發(fā)射.亂序執(zhí)行過(guò)程中需要競(jìng)爭(zhēng)的資源主要包括保留站、讀緩沖、寫(xiě)緩沖和重排序緩沖.通過(guò)詳盡探究資源的使用情況, 最終定位出測(cè)試程序的資源競(jìng)爭(zhēng)集中在保留站和寫(xiě)緩沖, 圖9 給出了這些程序的保留站滿(mǎn)載率和寫(xiě)緩沖滿(mǎn)載率.
圖9 保留站滿(mǎn)載率和寫(xiě)緩沖滿(mǎn)載率
由圖9 可知, BatchNorm 層的保留站滿(mǎn)載率最高,其20%的滿(mǎn)載率在很大程度上由程序內(nèi)部頻繁的除法操作造成, 由于除法操作通常更加耗時(shí)而除法單元配置較少, 除法單元長(zhǎng)時(shí)間被占用導(dǎo)致后續(xù)連續(xù)的除法微操作不能被分配到執(zhí)行單元, 微操作滯留于保留站中造成目標(biāo)資源的頻繁滿(mǎn)載.由此可見(jiàn), 優(yōu)化除法操作、增加除法執(zhí)行單元對(duì)BatchNorm 層的性能提升有較大的幫助.與保留站競(jìng)爭(zhēng)相比, 寫(xiě)緩沖競(jìng)爭(zhēng)對(duì)測(cè)試程序造成的性能損失更普遍且更明顯.大部分程序的寫(xiě)緩沖滿(mǎn)載率高達(dá)20%以上, 其中, Concat 層和Eltwise層的寫(xiě)緩沖滿(mǎn)載率分別高達(dá)80%和40%, 這與程序內(nèi)部大量連續(xù)的存儲(chǔ)操作密切相關(guān), 進(jìn)行寫(xiě)緩沖資源的擴(kuò)容對(duì)程序性能提升有著重要意義.
在后端執(zhí)行過(guò)程中, 復(fù)雜的依賴(lài)關(guān)系、計(jì)算資源受限和訪存受限均會(huì)造成程序執(zhí)行性能的損失, 接下來(lái)從訪存表現(xiàn)進(jìn)行探究.在高速緩存的3 個(gè)級(jí)別中, L1 DCache 離CPU 最近, 速度最快, 較高的L1 DCache 命中率能夠很好地解決訪存與計(jì)算速度的不匹配問(wèn)題.然而, 一旦程序執(zhí)行過(guò)程中頻繁發(fā)生L1 DCache 的訪問(wèn)缺失, 程序執(zhí)行性能會(huì)受到很大影響, 圖10 給出了各個(gè)程序的L1 DCache 缺失率.
圖10 L1 DCache 缺失率
可以發(fā)現(xiàn), 大部分測(cè)試程序的L1 DCache 缺失率較小, 這是因?yàn)樗鼈兓跀?shù)據(jù)塊做循環(huán)計(jì)算, 程序具有良好的數(shù)據(jù)局部性, 當(dāng)一個(gè)Cache Line 的數(shù)據(jù)從內(nèi)存被取進(jìn)L1 DCache 后, 在接下來(lái)的一系列操作中, 前面讀進(jìn)來(lái)的數(shù)據(jù)都能被命中.其中, ReLU 層、池化層、Concat 層的L1 DCache 缺失率極低, 不足0.3%, 卷積層、全連接層和反卷積層的L1 DCache 缺失率均在3%以下.Softmax 層和Eltwise 層的L1 DCache 缺失率較高, 后者的L1 DCache 缺失率最高, 達(dá)到12%以上,這是因?yàn)镋ltwise 層的主要計(jì)算是矩陣的按元素相加操作, 內(nèi)部計(jì)算較為簡(jiǎn)單, 幾乎不存在數(shù)據(jù)依賴(lài), 在程序執(zhí)行過(guò)程中, 產(chǎn)生大量的同時(shí)取數(shù)據(jù)操作, 由此造成大量的數(shù)據(jù)緩存缺失.
當(dāng)L1 DCache 命中失敗時(shí), 需要訪問(wèn)L2 Cache,圖11 給出了測(cè)試程序的L2 Cache 局部缺失率和全局缺失率.
L2 Cache 的局部缺失率即為L(zhǎng)2 Cache 的缺失次數(shù)與其訪問(wèn)總次數(shù)的比值, L2 Cache 的全局缺失率是其局部缺失率與L1 DCache 缺失率的乘積結(jié)果.圖中顯示部分程序的L2 Cache 局部缺失率高達(dá)80%, L2 Cache 的局部缺失率不具有說(shuō)服力, 這是因?yàn)長(zhǎng)1 DCache中存儲(chǔ)的數(shù)據(jù)是最容易被命中的, L2 Cache 只會(huì)在L1 DCache 發(fā)生缺失時(shí)才會(huì)被訪問(wèn).因此, 在評(píng)測(cè)L2 Cache缺失率時(shí), 需要選取全局缺失率, 大多數(shù)程序的L2 Cache 全局缺失率不足1%, Softmax 層和Eltwise 層的L2 Cache 全局缺失率在10%左右, 這是由其極差的數(shù)據(jù)局部性造成.
圖11 L2 Cache 的局部缺失率和全局缺失率
綜合L1 DCache 缺失率和L2 Cache 的全局缺失率來(lái)看, 絕大多數(shù)測(cè)試程序的取數(shù)據(jù)需求能夠被前兩級(jí)緩存很好地滿(mǎn)足, 程序?qū)3 Cache 的訪問(wèn)需求極小,本文不再對(duì)L3 Cache 的缺失率進(jìn)行分析.在此基礎(chǔ)上給出了進(jìn)一步的分析, 以Conv331 為例, 在GEM5 體系結(jié)構(gòu)模擬器上探究了L1 DCache 和L3 Cache 的6 種配置組合對(duì)目標(biāo)程序的影響.其中, L3 Cache 的容量被減小為25 MB, 相聯(lián)度保持20 路不變, L1 DCache 的配置分別為2 路32 KB, 4 路32 KB, 8 路32 KB, 2 路64 KB, 4 路64 KB, 8 路64 KB.通過(guò)對(duì)比分析這些配置下的L1 DCache 缺失率和目標(biāo)程序的執(zhí)行時(shí)間發(fā)現(xiàn), 相聯(lián)度產(chǎn)生的影響極小, 因此重點(diǎn)關(guān)注容量配置帶來(lái)的影響.相對(duì)于L1 DCache 容量為32 KB 的情況, 在容量增至64 KB 時(shí)L1 DCache 的缺失率降低到80%以下, 目標(biāo)程序的執(zhí)行時(shí)鐘周期數(shù)也有所減少, 由此可見(jiàn), 增大L1 DCache 容量在較大程度上降低了缺失率,對(duì)于目標(biāo)程序的執(zhí)行時(shí)間優(yōu)化具有較好的效果.另外,對(duì)比第三種配置與真實(shí)硬件配置情況發(fā)現(xiàn), 目標(biāo)程序的執(zhí)行時(shí)間沒(méi)有明顯變化, 減小L3 Cache 的容量對(duì)于目標(biāo)程序的執(zhí)行時(shí)間沒(méi)有明顯影響.考慮到L3 Cache具有較大的容量, 占用了較大的芯片面積, 卻沒(méi)有帶來(lái)程序性能的明顯提升, 可以考慮減少L3 Cache 的容量,增大L1 DCache 的容量.
本文給出了一套卷積神經(jīng)網(wǎng)絡(luò)基準(zhǔn)測(cè)試程序, 包括由網(wǎng)絡(luò)構(gòu)成的宏基準(zhǔn)測(cè)試程序和由網(wǎng)絡(luò)層構(gòu)成的微基準(zhǔn)測(cè)試程序, 同時(shí)為所選網(wǎng)絡(luò)提供了典型數(shù)據(jù)集, 為網(wǎng)絡(luò)層提供了常見(jiàn)的配置, 并為它們構(gòu)造了不同規(guī)模的輸入集.最后從系統(tǒng)層面和微架構(gòu)層面給出了這套基準(zhǔn)測(cè)試程序的性能評(píng)測(cè)實(shí)例, 結(jié)合程序的性能表現(xiàn)和程序本身進(jìn)行分析, 可以證明測(cè)試程序能夠準(zhǔn)確反映卷積神經(jīng)網(wǎng)絡(luò)的程序特性, 能夠用于處理器的評(píng)測(cè)和優(yōu)化設(shè)計(jì)指導(dǎo).并且, 通過(guò)分析性能評(píng)測(cè)結(jié)果, 明確了目標(biāo)程序的行為特征和性能瓶頸, 為處理器的設(shè)計(jì)提出了一些改進(jìn)建議.
下一步將繼續(xù)完善基準(zhǔn)測(cè)試程序, 使其包含更多領(lǐng)域的卷積神經(jīng)網(wǎng)絡(luò), 提高基準(zhǔn)測(cè)試程序的代表性.待國(guó)產(chǎn)神威硬件平臺(tái)上的軟件環(huán)境包括深度學(xué)習(xí)框架、卷積神經(jīng)網(wǎng)絡(luò)庫(kù)和性能分析工具完善后, 利用這套基準(zhǔn)測(cè)試程序?yàn)閲?guó)產(chǎn)處理器面向神經(jīng)網(wǎng)絡(luò)訓(xùn)練任務(wù)的優(yōu)化提供指導(dǎo).