魏 嘉,張興軍,紀(jì)澤宇,李靖波,岳瑩瑩
(西安交通大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,陜西 西安 710127)
深度神經(jīng)網(wǎng)絡(luò)DNN(Deep Neural Network)是人工智能領(lǐng)域AI(Artificial Intelligence)的重要分支[1]。近年來(lái),由于DNN在自然語(yǔ)言處理[2]和目標(biāo)識(shí)別[3]中里程碑式的表現(xiàn),其在無(wú)人駕駛[4]、癌癥檢測(cè)[5]和復(fù)雜決策[6]等領(lǐng)域應(yīng)用廣泛,尤其是在圖像領(lǐng)域,相比以支持向量機(jī)為代表的傳統(tǒng)算法,基于深度學(xué)習(xí)的AlexNet模型將分類準(zhǔn)確率提高了2倍,從而引起了圖像識(shí)別社區(qū)以及學(xué)術(shù)界的興趣。DNN通過(guò)統(tǒng)計(jì)學(xué)習(xí)大量數(shù)據(jù)來(lái)有效表示輸入空間,進(jìn)而獲取到數(shù)據(jù)高級(jí)特征[7 - 9]。這與早期使用專家設(shè)計(jì)的特定功能或規(guī)則的機(jī)器學(xué)習(xí)方法完全不同。
但是,DNN需要付出巨大的計(jì)算開(kāi)銷來(lái)獲取良好的性能表現(xiàn)。隨著數(shù)據(jù)集規(guī)模的增大和模型復(fù)雜程度的增加,DNN在訓(xùn)練過(guò)程中對(duì)計(jì)算強(qiáng)度和存儲(chǔ)空間的需求也成比例增長(zhǎng)[10 - 12]。盡管通用計(jì)算引擎(尤其是GPU)已成為許多加速DNN訓(xùn)練的主要手段[13 - 16],但人們對(duì)專業(yè)的DNN訓(xùn)練加速技術(shù)有著更高的興趣。為了使訓(xùn)練得到的DNN更具有競(jìng)爭(zhēng)力,本質(zhì)上需要高性能計(jì)算集群[17 - 19]。而對(duì)上述系統(tǒng),需要對(duì)DNN訓(xùn)練和推理(評(píng)估)等不同方面進(jìn)行優(yōu)化[20 - 24],以適應(yīng)相應(yīng)平臺(tái)特點(diǎn),從而提高整體并發(fā)性。
近年來(lái),以GPU、MIC和FPGA為代表的高能效異構(gòu)計(jì)算平臺(tái)[10 - 12,13 - 16,17 - 26]廣泛應(yīng)用于計(jì)算密集型任務(wù)中。 與此同時(shí),這一理念也深刻影響著超級(jí)計(jì)算機(jī)的設(shè)計(jì)[25],如我國(guó)使用GPU加速卡的天河一號(hào)異構(gòu)集群,采用MIC協(xié)處理器的天河二號(hào),以及利用國(guó)產(chǎn)異構(gòu)多核 CPU 制造的神威·太湖之光超級(jí)計(jì)算機(jī)均曾位列TOP500榜首。2020年6月,日本理化研究所和富士通公司基于ARM架構(gòu),搭載富士通開(kāi)發(fā)的CPU“A64FX”的“富岳”超級(jí)計(jì)算機(jī)在最新的2020年TOP500榜單中奪魁,運(yùn)算速度為415.5 PFlop/s。迄今為止,超算向E級(jí)發(fā)展仍是整個(gè)高性能計(jì)算HPC(High Performance Computing)社區(qū)面臨的巨大挑戰(zhàn),其能否對(duì)深度神經(jīng)網(wǎng)絡(luò)表現(xiàn)出良好的適用性亦是眾多科研機(jī)構(gòu)和工業(yè)界重點(diǎn)關(guān)注的領(lǐng)域。
在中國(guó)的百億億級(jí)計(jì)劃中,天河三號(hào)采用了基于ARM的多核架構(gòu),處理器采用國(guó)產(chǎn)Phytium-2000+(FTP)和Matrix-2000+(MTP),并向公眾開(kāi)放以供性能評(píng)估。
不斷發(fā)展的高性能計(jì)算機(jī)與日漸完善的并行框架為分布式并行深度學(xué)習(xí)奠定了基礎(chǔ),如何結(jié)合深度神經(jīng)網(wǎng)絡(luò)模型特點(diǎn)與高性能集群架構(gòu)特性,利用并行編程框架來(lái)設(shè)計(jì)能充分發(fā)揮高性能平臺(tái)計(jì)算能力的神經(jīng)網(wǎng)絡(luò)分布式計(jì)算方法顯得十分迫切。為了實(shí)現(xiàn)優(yōu)化設(shè)計(jì)以充分發(fā)揮超算平臺(tái)的高性能,首先需要對(duì)具體的高性能計(jì)算集群進(jìn)行對(duì)應(yīng)的評(píng)測(cè)和調(diào)優(yōu)。本文在天河三號(hào)原型機(jī)上,對(duì)神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練性能進(jìn)行了評(píng)測(cè)和調(diào)優(yōu)工作。
本文貢獻(xiàn)主要有以下4點(diǎn):
(1)針對(duì)天河三號(hào)原型機(jī)獨(dú)特的架構(gòu)特點(diǎn),通過(guò)綜合考量神經(jīng)網(wǎng)絡(luò)模型、神經(jīng)網(wǎng)絡(luò)執(zhí)行框架和測(cè)試模式3個(gè)維度,設(shè)計(jì)了一套具有針對(duì)性的實(shí)驗(yàn)設(shè)計(jì)策略。
(2)將PyTorch的分布式框架移植到了天河三號(hào)原型機(jī)并實(shí)現(xiàn)了與天河MPI的適配工作。
(3)分別針對(duì)單Matrix-2000+節(jié)點(diǎn)、單Phytium- 2000+節(jié)點(diǎn)、多Matrix-2000+節(jié)點(diǎn)和多Phytium-2000+節(jié)點(diǎn)等多種情況設(shè)計(jì)實(shí)現(xiàn)了不同的測(cè)試策略。
(4)從計(jì)算和通信2個(gè)角度對(duì)測(cè)試所得到的結(jié)果進(jìn)行了綜合分析。
隨著任務(wù)規(guī)模不斷增大、網(wǎng)絡(luò)層數(shù)不斷加深,深度神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練經(jīng)歷了由采用多核、眾核等技術(shù)的單節(jié)點(diǎn)并行計(jì)算[7]到使用MPI(Message Passing Interface)、NCCL(NVIDIA Collective multi-GPU Communication Library)等技術(shù)的多節(jié)點(diǎn)分布式計(jì)算的發(fā)展變遷。單節(jié)點(diǎn)訓(xùn)練加速研究集中在使用GPU、MIC或FPGA上[27 - 31]。
在GPU加速方面,Raina等人[14]最先使用GPU加速訓(xùn)練深度玻爾茲曼機(jī)DBN(Deep Boltzmann Machine);Yadan等人[15]使用NVIDIA Titan顯卡實(shí)現(xiàn)了模型并行與數(shù)據(jù)并行的結(jié)合;Li等人[16]使用單塊NVIDIA Titan Tesla K40c GPU加速DBN,相比于Intel Core i7-4790K在預(yù)訓(xùn)練過(guò)程中獲得了14~22×加速比;Bottleson 等人[13]使用OpenCL改進(jìn)了Caffe框架,相比于 Intel CPU,實(shí)現(xiàn)了2.5~4.6倍加速。
在MIC加速方面,一般使用 OpenMP 并行編程模型。Olas等人[27]在 Intel Xeon Phi 7120P上以原生模式運(yùn)行DBN,相較于Intel Xeon E5-2695v2 CPU最高實(shí)現(xiàn)了13.6×的加速比。Zlateski等人[28]在眾核CPU5110P上實(shí)現(xiàn)的三維卷積算法達(dá)到 90×加速比。
在FPGA加速方面,Suda 等人[29]在FPGA上實(shí)現(xiàn)了VGG和AlexNet,在VGG網(wǎng)絡(luò)中相較于 Intel I5處理器達(dá)到了5.5×加速比。Zhang等人[30]實(shí)現(xiàn)了性能可達(dá)近1.8 Tops/s的FPGA VGG網(wǎng)絡(luò),相較于Intel Xeon E5-1530處理器加速比可達(dá)4.4×。Aydonat等人[31]實(shí)現(xiàn)了具有Winograd矩陣乘優(yōu)化算法的FPGA AlexNet網(wǎng)絡(luò),與此同時(shí)還優(yōu)化了片內(nèi)外帶寬,在Arria 10上達(dá)到了1 382 GFlop/s的峰值性能。
在多節(jié)點(diǎn)加速方面,多節(jié)點(diǎn)分布式并行執(zhí)行深度神經(jīng)網(wǎng)絡(luò)在國(guó)內(nèi)外眾多集群系統(tǒng)中得到了廣泛的應(yīng)用。Yin等人[32]在Summit超級(jí)計(jì)算機(jī)上提供了一套綜合考慮神經(jīng)網(wǎng)絡(luò)計(jì)算核心、通信方式和數(shù)據(jù)I/O的分布式深度學(xué)習(xí)部署拓展策略;Song等人[17]使用神威·太湖之光超級(jí)計(jì)算機(jī)的4個(gè)節(jié)點(diǎn)針對(duì)MNIST網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)并行的深度置信網(wǎng)絡(luò)訓(xùn)練,實(shí)現(xiàn)了對(duì)Intel Xeon E5 2420處理器 23×的加速比。Awan等人[18]針對(duì)具有80個(gè)NVIDIA Tesla K80 GPU加速卡的12個(gè)節(jié)點(diǎn)集群,提出了S-Caffe(Scalable and distributed Caffe adaptation)改進(jìn)的深度神經(jīng)網(wǎng)絡(luò)框架。Li等人[19]提出了swCaffe,將Caffe框架改造并移植到了神威·太湖之光上,在某些神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)上得到了超越NVK40m GPU的處理速度。Moritz等人[26]聯(lián)合使用Caffe和Spark優(yōu)化了SGD(Stochastic Gradient Descent)同步協(xié)議。
對(duì)超級(jí)計(jì)算機(jī)的測(cè)試和調(diào)優(yōu)在HPC領(lǐng)域一直是一個(gè)重要且具挑戰(zhàn)性的課題。Peng等人[20]在天河二號(hào)計(jì)算機(jī)上采用AMBER(Assisted Model Building with Energy Refinement)并行加速策略訓(xùn)練分子動(dòng)力學(xué)模型,與原程序相比,實(shí)現(xiàn)了最高33倍加速;徐藝峰等人[21]在天河二號(hào)上,對(duì)ZnO-MOCVD(ZnO-Metal Organic Chemical Vapor Deposition)腔體數(shù)值模型進(jìn)行測(cè)試,最大加速比可達(dá)45。朱傳家等人[22]探索了使用同步更新策略的去中心化和參數(shù)服務(wù)器分布式方式部署Caffe神經(jīng)網(wǎng)絡(luò)在神威·太湖之光上,文中的實(shí)驗(yàn)表明,同步方式下,去中心化分布式擴(kuò)展方法相比參數(shù)服務(wù)器分布式擴(kuò)展方法在通信效率方面具有明顯的優(yōu)勢(shì),對(duì)特定的模型通信性能提高可達(dá)98倍。You等人[23]針對(duì)天河三號(hào)原型機(jī),對(duì)線性代數(shù)核計(jì)算表現(xiàn)進(jìn)行了測(cè)試和分析,并針對(duì)天河三號(hào)原型機(jī)上的MTP和FTP以及用于比較的KNL處理器進(jìn)行了性能比較。Li等人[24]提出了一種啟發(fā)式的拓?fù)涓兄成渌惴∣HTMA(Optimized Heuristic Topology-aware Mapping Algorithm),對(duì)天河三號(hào)原型機(jī)通信性能進(jìn)行了評(píng)估和改進(jìn),實(shí)驗(yàn)表明使用這種算法可以大大降低通信成本。
本節(jié)主要介紹本文分布式訓(xùn)練的4個(gè)關(guān)鍵點(diǎn):小批量梯度下降、分布式環(huán)境下的并行模型、一致性計(jì)算模型和天河三號(hào)原型機(jī)。
在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中,一個(gè)非常重要的任務(wù)就是求解代價(jià)函數(shù),最常用的優(yōu)化算法是梯度下降算法,梯度下降算法包括批量梯度下降算法、隨機(jī)梯度下降算法和小批量梯度下降算法3種變體。批量梯度下降算法可以收斂到凸函數(shù)的最小值或非凸函數(shù)極小值,但每次執(zhí)行需要遍歷所有樣本,所以存在無(wú)法在線更新、執(zhí)行速度慢和大數(shù)據(jù)集無(wú)法使用的問(wèn)題;隨機(jī)梯度下降算法每次只需輸入一個(gè)樣本,支持在線學(xué)習(xí)且訓(xùn)練速度很快,但這種算法收斂過(guò)程波動(dòng)很大且易陷入局部極??;小批量梯度下降算法汲取了二者優(yōu)勢(shì),每次更新選取一批(D個(gè))數(shù)據(jù)進(jìn)行訓(xùn)練,能夠快速穩(wěn)定地尋找到較優(yōu)的訓(xùn)練結(jié)果。因此,本文實(shí)驗(yàn)選取了小批量梯度下降算法求解代價(jià)函數(shù)。
算法1隨機(jī)梯度下降算法MBGD(Mini Batch Gradient Descent)
輸入:需要進(jìn)行訓(xùn)練的樣本數(shù)據(jù),S:樣本數(shù)據(jù)大小,D:每一批數(shù)據(jù)大小,t:迭代次數(shù),z:每輪輸入數(shù)據(jù);ω:網(wǎng)絡(luò)權(quán)值,l:損失函數(shù),f:評(píng)估結(jié)果,g:評(píng)估結(jié)果梯度,Δω:神經(jīng)網(wǎng)絡(luò)權(quán)值梯度。
輸出:本輪訓(xùn)練完成后的權(quán)值。
1.fort= 0 to (|S|/D)×epochsdo
2.z←SampleBelements fromS;/*從數(shù)據(jù)集中獲取訓(xùn)練樣本*/
3.ωmb←ω(t);//獲取權(quán)值參數(shù)
4.f←l(ωmb,z,h(z));//計(jì)算前向評(píng)估值
5.gmb←l(ωmb,f);//使用反向傳播值計(jì)算梯度
6.Δω←u(gmb,ω(0,…,t),t);//權(quán)值更新算法
7.ω(t+1)=ωmb+Δω;//保存新權(quán)值
深度學(xué)習(xí)目前主要通過(guò)模型與數(shù)據(jù)并行[33]來(lái)實(shí)現(xiàn)并行訓(xùn)練。模型并行將神經(jīng)網(wǎng)絡(luò)劃分成多個(gè)子模塊并指定給多個(gè)計(jì)算單元進(jìn)行協(xié)同訓(xùn)練;數(shù)據(jù)并行將分塊數(shù)據(jù)分配給多個(gè)計(jì)算單元,每個(gè)計(jì)算單元獨(dú)立完成自己數(shù)據(jù)集上的神經(jīng)網(wǎng)絡(luò)訓(xùn)練任務(wù),并通過(guò)參數(shù)服務(wù)器或All-reduce等通信機(jī)制來(lái)完成參數(shù)交換。
在MBGD中,數(shù)據(jù)以N個(gè)樣本為批次進(jìn)行處理。由于大多數(shù)運(yùn)算符相對(duì)于N是獨(dú)立無(wú)關(guān)的,因此并行化的直接方法是在多個(gè)計(jì)算資源(處理器核或設(shè)備)之間分配小批量樣本執(zhí)行工作。
可以認(rèn)為,神經(jīng)網(wǎng)絡(luò)在梯度下降中使用微型批次最初是由數(shù)據(jù)并行性驅(qū)動(dòng)的。 Farber等人[34]使用多個(gè)矢量加速器微處理器(Spert-II)并行執(zhí)行誤差反向傳播,以加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練。為了支持?jǐn)?shù)據(jù)并行性,他們提出了一種稱為“捆綁模式”的延遲梯度更新版本,其中梯度在更新權(quán)重之前被更新了數(shù)次,本質(zhì)上等效于MSGD。
Raina等人[35]最早將DNN計(jì)算映射到數(shù)據(jù)并行架構(gòu)(例如GPU),他們?cè)谑芟薏柶澛鼨C(jī)上的訓(xùn)練結(jié)果,使得CPU的速度提高了72.6倍。如今,絕大多數(shù)深度學(xué)習(xí)框架支持?jǐn)?shù)據(jù)深度并行化,可以使用單個(gè)GPU(CPU)或者多個(gè)GPU(CPU)或多個(gè)GPU(CPU)節(jié)點(diǎn)的集群。
使用MapReduce可以將并行任務(wù)調(diào)度到多個(gè)處理器以及分布式環(huán)境中。在進(jìn)行這些工作之前,科研人員已經(jīng)對(duì)包括神經(jīng)網(wǎng)絡(luò)在內(nèi)的各種機(jī)器學(xué)習(xí)問(wèn)題研究了MapReduce的潛在規(guī)模,從而促進(jìn)了從單處理器學(xué)習(xí)向分布式存儲(chǔ)系統(tǒng)轉(zhuǎn)變的需求。
為了優(yōu)化分布式數(shù)據(jù)并行訓(xùn)練過(guò)程,研究人員提出了整體同步BSP(Bulk Synchronous Parallel)[36]、延遲同步SSP(Staleness Synchronous Parallel)和異步ASP(Asychronous Parallel)[37]等參數(shù)同步模型。
BSP通過(guò)設(shè)置同步柵欄的方式保證一組分布式計(jì)算單元能夠以相同迭代輪次更新模型參數(shù),各個(gè)計(jì)算單元一輪迭代完成后根據(jù)同步柵欄機(jī)制等待主節(jié)點(diǎn)同步指令,主節(jié)點(diǎn)在得到所有計(jì)算單元的更新參數(shù)后更新參數(shù)并發(fā)送給各計(jì)算單元,進(jìn)入新一輪迭代。常見(jiàn)的BSP模型系統(tǒng)包括Spark和Mahout[38]等。
ASP的各計(jì)算單元利用本地?cái)?shù)據(jù)計(jì)算模型參數(shù),計(jì)算單元完成一輪后,無(wú)需等待即可更新主節(jié)點(diǎn)模型參數(shù),并獲取最新全局參數(shù)進(jìn)入下一輪迭代。但是,這種不限制迭代輪數(shù)差的參數(shù)同步模型極易導(dǎo)致結(jié)果不收斂,為解決這一問(wèn)題,有學(xué)者提出了SSP計(jì)算模型。
SSP的各計(jì)算單元同樣以不同輪次更新全局主節(jié)點(diǎn)模型參數(shù),但是限制最快、最慢節(jié)點(diǎn)參數(shù)迭代輪次差小于延遲參數(shù)stale,從而既減弱了慢節(jié)點(diǎn)對(duì)整個(gè)系統(tǒng)運(yùn)行速度的影響,又保證了模型參數(shù)收斂。常見(jiàn)的 SSP 模型系統(tǒng)包括Petuum[39]、深度學(xué)習(xí)系統(tǒng)[32,40,41]等。
天河三號(hào)原型機(jī)采用的處理器包括FT-2000+(FTP)和MT-2000+(MTP),從天津超算中心官方網(wǎng)站、飛騰信息技術(shù)有限公司官方網(wǎng)站和公開(kāi)發(fā)表的論文資料可以知道,F(xiàn)TP包含64個(gè)ARMv8架構(gòu)的FTC662處理器核,工作主頻在2.2~2.4 GHz,片上集成了32 MB的二級(jí)Cache,可提供204.8 GB/s訪存帶寬,典型工作能耗約為100 W;而MTP處理器包含128個(gè)定制的處理器核心,被組織為4個(gè)超級(jí)節(jié)點(diǎn),主頻最高可達(dá)2.0 GHz,整個(gè)處理器的消耗為240 W。FTP和MTP的處理器架構(gòu)如圖1所示。
Figure 1 FT-2000+processor architecture and MT-2000+processor architecture圖1 FT-2000+處理器架構(gòu)和MT-2000+處理器架構(gòu)
在天河三號(hào)原型機(jī)中,如表1所示,F(xiàn)TP和MTP都被劃分成以32個(gè)核作為一個(gè)計(jì)算節(jié)點(diǎn),這么做的目的可能是為了提供更多的計(jì)算節(jié)點(diǎn)以滿足復(fù)雜的計(jì)算任務(wù)[23]。計(jì)算節(jié)點(diǎn)由批處理調(diào)度系統(tǒng)管理和分配。在FTP中,32個(gè)核共享64 GB內(nèi)存,而在MTP中,32個(gè)核共享16 GB的內(nèi)存。它們都帶有具有kernel v4.4.0的Kylin 4.0-1a操作系統(tǒng)。
Table 1 Basic situation of Tianhe-3 prototype system表1 天河三號(hào)原型機(jī)基本情況
除此之外,由國(guó)防科技大學(xué)設(shè)計(jì)實(shí)現(xiàn)的原型集群互連技術(shù)提供了200 Gbps雙向互連帶寬。原型機(jī)使用了Lustre進(jìn)行分布式文件系統(tǒng)管理。與此同時(shí),原型機(jī)提供了多個(gè)版本的MPI編譯實(shí)現(xiàn),包括mpich 3.2.1和尚在調(diào)試階段的 openmpi 4.0.0。除此之外,還預(yù)置了LAMMPS、GROMACS等科學(xué)計(jì)算應(yīng)用軟件。但遺憾的是,原型機(jī)沒(méi)有提供例如Caffe、PyTorch、TensorFlow等針對(duì)深度神經(jīng)網(wǎng)絡(luò)的開(kāi)發(fā)框架,所以本文的工作首先要從移植PyTorch的框架開(kāi)始。
本文通過(guò)綜合考量神經(jīng)網(wǎng)絡(luò)模型、神經(jīng)網(wǎng)絡(luò)執(zhí)行框架和測(cè)試模式3個(gè)維度提出了一套具有針對(duì)性的實(shí)驗(yàn)設(shè)計(jì)方案,從而充分地測(cè)試天河三號(hào)原型機(jī)在神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練中的性能表現(xiàn)。
為了更好地測(cè)試天河三號(hào)原型機(jī)在神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練中的表現(xiàn),本文選取了改進(jìn)版的LeNet模型來(lái)實(shí)現(xiàn)圖像分類工作。它包含2個(gè)卷積層、2個(gè)池化層、3個(gè)激活層和2個(gè)全連接層。第1個(gè)卷積層,輸入通道數(shù)為1,輸出通道數(shù)為10,卷積核大小為5×5,步長(zhǎng)為1,零填充。第2個(gè)卷積層,輸入通道數(shù)為10,輸出通道數(shù)為20,其余參數(shù)同第1個(gè)卷積層。2個(gè)池化層均使用最大池化方法。3個(gè)激活函數(shù)均使用ReLu函數(shù),并對(duì)模型使用了drop_out優(yōu)化方法。
本文將PyTorch分布式深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練框架移植到了天河三號(hào)原型機(jī)上,相比Caffe,PyTorch有較好的內(nèi)部?jī)?yōu)化和更優(yōu)質(zhì)的模型支持,但TensorFlow需要使用bazel聯(lián)網(wǎng)編譯,而天河三號(hào)原型機(jī)無(wú)法連接互聯(lián)網(wǎng)。除此之外,PyTorch還具有相當(dāng)簡(jiǎn)潔、高效、快速的框架,該框架的設(shè)計(jì)追求最少的封裝,符合人類思維,讓用戶盡可能地專注于實(shí)現(xiàn)自己的想法。本文選擇了最適合天河三號(hào)的MPI作為分布式底層通信架構(gòu),這也就決定了只能使用源碼安裝的方式在天河三號(hào)上部署PyTorch。
本文用于訓(xùn)練的數(shù)據(jù)集是Mnist數(shù)據(jù)集,Mnist數(shù)據(jù)集是機(jī)器學(xué)習(xí)領(lǐng)域中非常經(jīng)典的一個(gè)數(shù)據(jù)集,由60 000個(gè)訓(xùn)練樣本和10 000個(gè)測(cè)試樣本組成,每個(gè)樣本都是一幅28×28的灰度手寫數(shù)字圖像。
天河三號(hào)原型機(jī)具有MT-2000+和FT-2000+ 2種不同的處理器節(jié)點(diǎn),本文分別設(shè)計(jì)了MT-2000+和FT-2000+單節(jié)點(diǎn)、多進(jìn)程并行訓(xùn)練任務(wù),MT-2000+多節(jié)點(diǎn)、多進(jìn)程分布式訓(xùn)練任務(wù)和FT-2000+多節(jié)點(diǎn)、多進(jìn)程分布式訓(xùn)練任務(wù),以全面評(píng)估天河三號(hào)原型機(jī)上單節(jié)點(diǎn)的并行訓(xùn)練性能,及其在多節(jié)點(diǎn)分布式訓(xùn)練中的擴(kuò)展性。為保證數(shù)據(jù)的魯棒性,本文所有實(shí)驗(yàn)結(jié)果均為5次測(cè)試后的算術(shù)平均值。
根據(jù)第4節(jié)設(shè)計(jì)的實(shí)驗(yàn)方案,本節(jié)分別針對(duì)MTP、FTP單節(jié)點(diǎn)和多節(jié)點(diǎn)展開(kāi)實(shí)驗(yàn),并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行總結(jié)分析,對(duì)實(shí)驗(yàn)結(jié)果出現(xiàn)的原因進(jìn)行解釋。
為了充分探究在MT-2000+和FT-2000+不同眾核處理器節(jié)點(diǎn)上的性能,本文分別在2種不同處理器構(gòu)成的1個(gè)節(jié)點(diǎn)上使用了最少1個(gè)進(jìn)程到最多32個(gè)進(jìn)程(根據(jù)天河三號(hào)的架構(gòu)特點(diǎn),1個(gè)節(jié)點(diǎn)最多使用32個(gè)處理器核,其中在本文實(shí)驗(yàn)中MTP最多只能使用20個(gè)進(jìn)程,否則會(huì)導(dǎo)致內(nèi)存資源不足)分別對(duì)同一個(gè)分類任務(wù)進(jìn)行訓(xùn)練。本文采取數(shù)據(jù)并行的分布式訓(xùn)練策略,以All-reduce機(jī)制作為通信策略,并使用嚴(yán)格的一致性同步協(xié)議(BSP),同時(shí)將訓(xùn)練集上的數(shù)據(jù)均勻分配到各進(jìn)程。
在單個(gè)MT-2000+節(jié)點(diǎn)上,分別使用1~20個(gè)進(jìn)程進(jìn)行10個(gè)迭代輪次后訓(xùn)練的損失值如圖2e所示,在進(jìn)程數(shù)為2時(shí)loss值最小為0.221 9,在進(jìn)程數(shù)為17時(shí)loss值最大為0.245 7。相應(yīng)地,在進(jìn)程為2時(shí)總訓(xùn)練時(shí)間最短為4.602 5 min,隨后整體訓(xùn)練時(shí)間基本呈現(xiàn)隨進(jìn)程數(shù)的增加而增加的趨勢(shì)(在進(jìn)程數(shù)為8時(shí)有下降),在進(jìn)程數(shù)為20時(shí)總訓(xùn)練時(shí)間達(dá)到最大值37.064 1 min;與此同時(shí),本文發(fā)現(xiàn)當(dāng)進(jìn)程數(shù)是2的冪次時(shí),其訓(xùn)練結(jié)果優(yōu)于相鄰的進(jìn)程數(shù)的訓(xùn)練結(jié)果。
在單個(gè)FT-2000+節(jié)點(diǎn)上,分別使用1~32個(gè)進(jìn)程進(jìn)行10個(gè)迭代輪次后訓(xùn)練的損失值如圖2a所示,在進(jìn)程數(shù)為2時(shí)loss值最小為0.221 0,在進(jìn)程數(shù)為26時(shí)loss值最大為0.262 0。相應(yīng)地,在進(jìn)程為2時(shí)總訓(xùn)練時(shí)間最短為3.995 8 min,在隨后整體訓(xùn)練時(shí)間也基本呈現(xiàn)隨進(jìn)程數(shù)的增加而增加的趨勢(shì)(在進(jìn)程數(shù)為8時(shí)有下降),在進(jìn)程數(shù)為32時(shí),總訓(xùn)練時(shí)間達(dá)到最大值52.082 1 min。與在MTP上的結(jié)果類似,當(dāng)本文使用的進(jìn)程數(shù)為2的冪次時(shí),其訓(xùn)練結(jié)果會(huì)明顯地優(yōu)于鄰近的進(jìn)程數(shù)的訓(xùn)練結(jié)果。
如圖2e~圖2h所示,在MT-2000+多節(jié)點(diǎn)訓(xùn)練過(guò)程中,當(dāng)使用的節(jié)點(diǎn)總數(shù)小于8時(shí),在進(jìn)程數(shù)為節(jié)點(diǎn)數(shù)2倍的情況下,可以在loss基本保持不變的情況下,達(dá)到最短訓(xùn)練時(shí)間;當(dāng)節(jié)點(diǎn)數(shù)大于或等于8時(shí),選擇和節(jié)點(diǎn)數(shù)一致的進(jìn)程數(shù),可以在最小化loss值的同時(shí)達(dá)到最短訓(xùn)練時(shí)間。在MTP選擇2節(jié)點(diǎn)時(shí),由于天河架構(gòu)共享內(nèi)存設(shè)計(jì)的原因,在進(jìn)程數(shù)達(dá)到64時(shí)就會(huì)出現(xiàn)內(nèi)存溢出問(wèn)題。
Figure 2 Training loss and total training time on MT-2000+ and FT-2000+ with different numbers of processors圖2 MT-2000+和FT-2000+單節(jié)點(diǎn)、多節(jié)點(diǎn)訓(xùn)練損失值與訓(xùn)練總時(shí)間
在FT-2000+多節(jié)點(diǎn)訓(xùn)練過(guò)程中,當(dāng)使用的節(jié)點(diǎn)總數(shù)小于或等于8時(shí),與MTP類似,在進(jìn)程數(shù)為節(jié)點(diǎn)數(shù)2倍的情況下,可以在loss基本保持不變的情況下,達(dá)到最短訓(xùn)練時(shí)間,但是這個(gè)時(shí)間隨著節(jié)點(diǎn)數(shù)的增加將逐漸逼近進(jìn)程數(shù)等同于節(jié)點(diǎn)數(shù)情況下的訓(xùn)練時(shí)間。
根據(jù)前文所述的測(cè)試結(jié)果可以發(fā)現(xiàn),在單節(jié)點(diǎn)的表現(xiàn)中,無(wú)論是FTP還是MTP,使用進(jìn)程數(shù)為2的冪次時(shí)結(jié)果會(huì)優(yōu)于鄰近的進(jìn)程數(shù)選擇(訓(xùn)練時(shí)間相差不多甚至更少的同時(shí)得到更低的訓(xùn)練損失函數(shù)值),在10輪迭代后,2種處理器均在進(jìn)程數(shù)為2時(shí)達(dá)到了最優(yōu)的訓(xùn)練結(jié)果,此時(shí)FTP的loss值比MTP的下降了約4%,同時(shí)訓(xùn)練時(shí)間縮短了約13%。在后續(xù)的實(shí)驗(yàn)中,本文將這2種情況下的迭代輪次提升到了50,此時(shí)MTP的loss為0.114 9,所花費(fèi)的時(shí)間為22.889 0 min,F(xiàn)TP的loss為0.112 2,所花費(fèi)的時(shí)間為19.180 9 min。綜上所述,單節(jié)點(diǎn)FTP上的損失函數(shù)值和訓(xùn)練時(shí)間都略優(yōu)于單節(jié)點(diǎn)MTP的損失函數(shù)值和訓(xùn)練時(shí)間。
在多節(jié)點(diǎn)的表現(xiàn)中,當(dāng)MTP使用的節(jié)點(diǎn)數(shù)小于8,F(xiàn)TP使用的節(jié)點(diǎn)數(shù)小于16時(shí),與單節(jié)點(diǎn)上的結(jié)果一致,使用2倍于節(jié)點(diǎn)數(shù)的進(jìn)程數(shù)可以在損失值與最優(yōu)結(jié)果相差不超過(guò)0.002的情況下實(shí)現(xiàn)最短的訓(xùn)練時(shí)間。然而,隨著節(jié)點(diǎn)數(shù)的增加,使用與節(jié)點(diǎn)數(shù)相同的進(jìn)程數(shù)進(jìn)行訓(xùn)練的時(shí)間逐漸逼近使用2倍節(jié)點(diǎn)數(shù)的進(jìn)程數(shù)的訓(xùn)練時(shí)間,并在節(jié)點(diǎn)數(shù)達(dá)到16時(shí),使用等同于節(jié)點(diǎn)數(shù)的進(jìn)程數(shù)可以在損失函數(shù)值與最優(yōu)結(jié)果相差不超過(guò)0.000 5時(shí),達(dá)到最短的訓(xùn)練時(shí)間;在多節(jié)點(diǎn)MTP訓(xùn)練中,當(dāng)節(jié)點(diǎn)數(shù)大于或等于8之后,使用等同于節(jié)點(diǎn)數(shù)的進(jìn)程數(shù)進(jìn)行訓(xùn)練可以同時(shí)達(dá)到最小的損失函數(shù)值和最短的訓(xùn)練時(shí)間。除此之外,本文還發(fā)現(xiàn),在使用的進(jìn)程數(shù)相同時(shí),因?yàn)榭梢允褂酶嗟奶幚砥骱?,所以使用更多的?jié)點(diǎn)一定能夠在損失值相差不超過(guò)0.001的基礎(chǔ)上達(dá)到最短的訓(xùn)練時(shí)間。
針對(duì)在單節(jié)點(diǎn)和多節(jié)點(diǎn)不同進(jìn)程數(shù)下訓(xùn)練性能差異的一個(gè)解釋是,在使用單節(jié)點(diǎn)訓(xùn)練時(shí),使用2個(gè)進(jìn)程比使用單個(gè)進(jìn)程更能充分地發(fā)揮節(jié)點(diǎn)的計(jì)算性能,但當(dāng)進(jìn)程數(shù)繼續(xù)增大時(shí),進(jìn)程間通信的開(kāi)銷所帶來(lái)的損失超過(guò)了進(jìn)程數(shù)增加帶來(lái)的計(jì)算性能的增益,導(dǎo)致總體的訓(xùn)練時(shí)間增加和訓(xùn)練效果的下降;在MTP節(jié)點(diǎn)數(shù)小于8,F(xiàn)TP節(jié)點(diǎn)數(shù)小于或等于16時(shí),原因與單節(jié)點(diǎn)上一致;當(dāng)節(jié)點(diǎn)數(shù)繼續(xù)增加時(shí),即使是2倍的進(jìn)程數(shù)都會(huì)造成通信開(kāi)銷的損失大于計(jì)算性能的提升,所以每個(gè)節(jié)點(diǎn)使用1個(gè)進(jìn)程在這種情況下是最好的選擇。
進(jìn)一步地,為了充分探究上述實(shí)驗(yàn)結(jié)果出現(xiàn)的原因,如圖3所示,本文將整個(gè)實(shí)驗(yàn)切分成了計(jì)算時(shí)間T1(主要包括神經(jīng)網(wǎng)絡(luò)模型前向傳播和反向傳播以及損失值計(jì)算等的計(jì)算開(kāi)銷)和通信時(shí)間T2(主要指使用All-reduce進(jìn)行全局梯度更新時(shí)的通信開(kāi)銷),總時(shí)間T為上述2種開(kāi)銷的總和,如式(1)所示。
T=T1+T2
(1)
Figure 3 Communication and computing time of single node FT-2000+ and MT-2000+ 圖3 FT-2000+和MT-2000+單節(jié)點(diǎn)通信與計(jì)算時(shí)間
Figure 4 Computing time of single node MT-2000+ and FT-2000+ 圖4 MT-2000+和FT-2000+單節(jié)點(diǎn)計(jì)算時(shí)間
其中,計(jì)算開(kāi)銷T1是為了訓(xùn)練網(wǎng)絡(luò)而必須付出的開(kāi)銷,如圖4所示,隨著進(jìn)程數(shù)的增加,分配到單個(gè)進(jìn)程的訓(xùn)練子集數(shù)目將減少,因而在單個(gè)進(jìn)程中需要進(jìn)行的神經(jīng)網(wǎng)絡(luò)前向傳播和反向傳播計(jì)算操作(包括卷積、池化、激活操作、本地梯度更新和損失值更新等)的開(kāi)銷將減少;但與此同時(shí),隨著進(jìn)程數(shù)的增加,根據(jù)天河三號(hào)原型機(jī)的共享內(nèi)存和共享Cache的架構(gòu)特點(diǎn),每個(gè)進(jìn)程的Cache命中率將顯著下降,訪存沖突將明顯增加。在進(jìn)程數(shù)剛開(kāi)始遞增時(shí),前者的影響大于后者,所以計(jì)算時(shí)間將隨著進(jìn)程數(shù)的增大而增大;隨后,隨著進(jìn)程數(shù)的繼續(xù)增大,訪存沖突的影響將遠(yuǎn)遠(yuǎn)大于計(jì)算開(kāi)銷的增益,所以計(jì)算時(shí)間將隨進(jìn)程數(shù)的增大顯著上升,導(dǎo)致了計(jì)算開(kāi)銷隨著進(jìn)程數(shù)的增加先減少后增大的變化趨勢(shì)。
同樣地,通信開(kāi)銷T2是為了同步神經(jīng)網(wǎng)絡(luò)中的權(quán)值在路徑上的損耗,它可以利用式(2)來(lái)計(jì)算:
T2=K×lbN×(α+S/B+S×C)
(2)
其中,α表示2個(gè)進(jìn)程間的通信延遲,它將隨著處理器核在片上的分布方式與相對(duì)距離而變化,共享同一個(gè)Cache的處理器核的通信速度將明顯大于僅僅共享同一個(gè)共享內(nèi)存的不同處理器核,而共享同一個(gè)共享內(nèi)存的處理器核之間的通信速度又會(huì)顯著超過(guò)使用不同共享內(nèi)存但在同一個(gè)節(jié)點(diǎn)內(nèi)的不同處理器核,處于2個(gè)不同節(jié)點(diǎn)之間的處理器核的通信速度將會(huì)是最慢的。S(Size)代表執(zhí)行All-reduce操作時(shí),每一個(gè)進(jìn)程所包含的數(shù)據(jù)塊大小,B(Bandwidth)代表2個(gè)進(jìn)程間通信的帶寬,C(Computing)代表每字節(jié)的計(jì)算開(kāi)銷(注意,這部分計(jì)算開(kāi)銷是指在All-reduce過(guò)程中的計(jì)算開(kāi)銷,而非上一節(jié)中所說(shuō)的計(jì)算開(kāi)銷),N(Nnumbers)代表進(jìn)行通信的所有進(jìn)程數(shù)目,另外,K代表所進(jìn)行的All-reduce操作次數(shù)。本文實(shí)驗(yàn)使用的Mnist數(shù)據(jù)集總共有60 000個(gè)實(shí)例,Batchsize大小固定為128,那么每執(zhí)行一輪訓(xùn)練,所需要的All-reduce操作數(shù)目是固定的,即:
K=60000/128
(3)
雖然每次參與迭代的進(jìn)程數(shù)不同,但是單個(gè)進(jìn)程進(jìn)行交互的數(shù)據(jù)塊大小為恒定的神經(jīng)網(wǎng)絡(luò)的權(quán)值W的大小:
S=W
(4)
所以,式(1)可以改寫為:
T2=458.75×lbN(α+W/B+W×C)
(5)
因此,由式(5)可知,在通信帶寬和每比特計(jì)算開(kāi)銷確定的情況下,總體通信時(shí)間只與進(jìn)程的個(gè)數(shù)和2個(gè)進(jìn)程間的通信延遲相關(guān)。另外,在進(jìn)程數(shù)為奇數(shù)時(shí),每一個(gè)批次的通信開(kāi)銷都會(huì)增加1個(gè)單位時(shí)間,所以在進(jìn)程數(shù)為奇數(shù)時(shí)總通信開(kāi)銷時(shí)間為:
T2=468.75×[lbN(α+W/B+W×C)+1]
(6)
所以,除了在FTP單節(jié)點(diǎn)的實(shí)驗(yàn)之外,在其他的所有測(cè)試場(chǎng)景下,總通信時(shí)間隨著進(jìn)程數(shù)的增大而增大,因?yàn)橥ㄐ叛舆t的變化在進(jìn)程數(shù)目較小時(shí),隨進(jìn)程數(shù)的增加變化不大。所以,式(6)中的總通信時(shí)間T2主要受到進(jìn)程數(shù)N的影響,T2隨著N的增大而增大,但是隨著N的增大,T2增大的幅度在減小,這與對(duì)數(shù)曲線的趨勢(shì)相一致。
進(jìn)一步地,如圖5所示,本文發(fā)現(xiàn)在FTP單節(jié)點(diǎn)的訓(xùn)練場(chǎng)景中,當(dāng)進(jìn)程數(shù)超過(guò)20時(shí),總體通信時(shí)間反而會(huì)隨著進(jìn)程數(shù)的增加而減小,因?yàn)樵谶M(jìn)程數(shù)相對(duì)節(jié)點(diǎn)數(shù)目較大的時(shí)候,通信延遲和進(jìn)程間的通信帶寬B會(huì)變得復(fù)雜而不能一概而論。所以,式(6)所示的通信延遲的計(jì)算方法應(yīng)描述為:
(7)
從實(shí)驗(yàn)中發(fā)現(xiàn),根據(jù)式(7),當(dāng)進(jìn)程數(shù)繼續(xù)增加時(shí),各進(jìn)程間的總體通信延遲減小,總體通信帶寬增大,從而導(dǎo)致了通信的總時(shí)間減少。
Figure 5 Communication time of single node FT-2000+ and MT-2000+圖5 FT-2000+和MT-2000+單節(jié)點(diǎn)通信時(shí)間
本文在作者自己移植的PyTorch分布式框架之上使用改進(jìn)的LeNet模型評(píng)估天河三號(hào)原型機(jī)的深度神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練性能。評(píng)估結(jié)果可用于評(píng)估邁向百億億級(jí)時(shí)的軟件和硬件設(shè)計(jì)。為了全面地評(píng)估和說(shuō)明評(píng)估結(jié)果,本文分別為FTP和MTP的單節(jié)點(diǎn)和集群設(shè)計(jì)了相應(yīng)的實(shí)驗(yàn),為軟件開(kāi)發(fā)人員和硬件架構(gòu)師提供了多角度的性能優(yōu)化方向。
此外,本文將FTP和MTP處理器的性能進(jìn)行了比較,反映了不同處理器體系結(jié)構(gòu)設(shè)計(jì)之間的優(yōu)缺點(diǎn)。本文希望能夠向HPC社區(qū)與天河三號(hào)的開(kāi)發(fā)人員提供參考,裨益中國(guó)百億億級(jí)超級(jí)計(jì)算機(jī)計(jì)劃,從而為追求百億億級(jí)超級(jí)計(jì)算機(jī)的發(fā)展開(kāi)辟道路。在今后的工作中,希望結(jié)合天河三號(hào)原型機(jī)計(jì)算節(jié)點(diǎn)的特點(diǎn)和網(wǎng)絡(luò)拓?fù)涞奶攸c(diǎn),在PyTorch等平臺(tái)上對(duì)現(xiàn)有神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練框架結(jié)構(gòu)進(jìn)行進(jìn)一步的調(diào)優(yōu),以更好地發(fā)揮天河三號(hào)原型機(jī)潛在的計(jì)算能力。