馮赟龍,劉 勇,何王全
(江南計算技術研究所, 江蘇 無錫 214083)
隨著高性能計算機技術的快速發(fā)展,越來越多的科研工作者能夠使用高性能計算機進行研究。然而,高性能計算機體系結構進化得越來越復雜:更多的計算核心、更復雜的并行層次和存儲層次,應用優(yōu)化的門檻逐漸提高,讓對相應體系結構不熟悉的普通用戶望而卻步,迫切需要一種能夠讓普通用戶使用的智能化性能分析工具。
智能化的程序性能分析方法正在成為一個研究趨勢,原因主要有兩個:(1)應用優(yōu)化的迫切需求,現有性能分析工具大多數都極度依賴于用戶的性能分析經驗知識,它們越來越難以支撐用戶的性能優(yōu)化工作;(2)人工智能技術的進步,為性能分析的智能化提供了有力的技術支撐。
機器學習作為重要的人工智能技術實現方法,已經被學者們用于智能化程序性能分析的研究[1]。深度學習是機器學習的一種實現技術,它在諸多領域均取得了重要成果,但并未出現在程序性能分析領域。本文提出了一種基于深度學習的程序性能智能分析框架,并在神威太湖之光[2]超級計算機上進行了實現,取得了良好的效果。它是深度學習技術在程序性能分析領域的一次探索和有益嘗試,可為相關的研究帶來一些啟示。
高性能計算應用的性能分析工具根據所支持的功能分為三類:(1)采集類,主要提供基本的性能數據采集功能,如FPMPI(Fast Profiling library for MPI)[3]、mpiP[4]和PAPI(Performance API)[5]等;(2)可視化類,實現豐富的圖表幫助分析,如Vampir[6]和CUBE(Cube Uniform Behavioral Encoding)[7]等;(3)集成類,集成多種層次的數據采集和可視化分析功能,如Vtune[8]、Scalasca[9]、HPCToolkit[10]和TAU(Tuning and Analysis Utilities)[11]等。這些工具在性能數據的采集方面已經有插裝、采樣、抽樣等大量成熟技術,但對所采集數據的分析技術卻相對較弱,需要用戶掌握大量的體系結構和性能分析經驗知識。隨著處理器從單核到多核再到眾核的不斷發(fā)展進化,芯片體系結構的日益復雜導致用戶使用性能分析工具的門檻不斷抬高。
除了長期研究積淀形成的上述成熟工具外,還有大量的研究工作。Urlinger等人[12]提出一種基于預設性能問題自動搜索的方法,通過設置性能指標門限以及搜索策略,然后計算得到指標的嚴重程度和指標存在問題的可信程度,自動搜索程序中的性能問題和瓶頸。該方法能夠實現分布式自動在線分析并且可以擴展至數千規(guī)模的處理器,它主要被用來解決工具的可擴展性問題。雖然它能夠實現一定程度的自動化分析,但是參數設置仍然依賴用戶的經驗知識。Yoo等人[1]提出的使用硬件事件自動診斷性能問題方法ADP(Automated Diagnosis of Performance pathologies using hardware events),通過CFS(Correlation-based Feature Selection)方法自動選擇關鍵硬件性能事件集構建決策樹模型。但是,它忽略了硬件事件間復雜的影響關系,如圖1所示,其中A、B兩條線大致可將GLDPC(Global LoaD Per Cycle,指每cycle從主存加載數據的事件記數)與IPC(Instructions Per Cycle)的關系劃分為三段:無明顯關系、負相關趨勢和負相關關系。直線A的左邊為無明顯關系,表示GLDPC的變化與IPC不存在明顯的關系;直線A、B之間為負相關趨勢,隨著GLDPC的增大,IPC呈現出減少趨勢;負相關關系指GLDPC與IPC存在一個確定的一次函數關系,即圖1中所示直線C在直線B右邊的線段,說明程序中GLD訪問為主要開銷。實際中還要再考慮其他指標影響,關系將會更加復雜。
Figure 1 Example of the complex relationship between hardware performance events圖1 硬件性能事件的復雜關系示例
深度學習使得機器學習能夠實現眾多應用,并擴展了人工智能的領域范圍,它是2006年由Hinton教授提出的一種深層機器學習方法,具有較強的從樣本中提取特征以及對特征進行轉換的能力,學習能力強,是近幾年國內外的研究熱點[13]。深度學習明確突出了特征學習的重要性,也就是說,通過逐層特征變換,將原空間的特征變換到新的空間,使分類或預測更加容易。深度學習的常用模型有自動編碼器、稀疏編碼、深度置信網等。這些模型目前使用和應用都比較廣泛,在圖像分類、語音識別、目標識別、自然語言處理等多個領域均取得了成功應用。
深度學習模型的訓練過程分為兩步:預訓練和調優(yōu)。第一步:從底層開始,一層一層地往頂層訓練,采用無標簽數據或標簽數據訓練第一層;在學習到第n-1層后,將第n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的參數;第二步:基于第一步得到的各層參數進一步優(yōu)化整個多層模型的參數,這一步是有監(jiān)督的訓練過程。
Figure 3 Framework of program performance analysis based on deep learning圖3 基于深度學習的程序性能分析框架
定位具體性能問題的過程,可抽象為一個分類問題。記一條性能數據為X,它包含多個資源類性能指標Xi(i=1,2,…,m),將所有性能問題(C)劃分為若干性能問題類別(C1,C2,…,Cn),其中:
X=(X1,X2,…,Xm)
(1)
C=C1∪C2∪…∪Cn
(2)
Ci∩Cj=?(i,j=1,2,…,n)
(3)
則從采集的性能數據分析性能問題的過程可描述為一個確定X所屬分類Ci的問題。
基于深度學習的性能分析方法重點關注性能的分類模型,根據大量的性能數據,經過深度學習的訓練,將多種性能指標歸為幾種典型類型,并指導程序員把握最主要的性能問題。該方法需要大量的數據作為訓練的輸入數據,我們使用處理器周期數進行標準化后的性能監(jiān)控單元PMU(Performance Monitoring Unit)事件計數指標PI/Cycle,其中PI可以是任何一個PMU事件計數,Cy-cle為處理器周期。 現階段有許多應用廣泛的分類技術,如決策樹、貝葉斯分類器等,這些淺層機器學習技術,在性能數據集比較完備的情況下能夠達到非常好的效果,但目前硬件平臺PMU等資源限制,使我們難以獲得完備的性能數據集。而無論數據集是否完備,基于深度學習技術只需通過強大的學習能力對大量性能數據樣本進行學習,即可挖掘到各性能指標間的復雜數據關系,建立起更為準確的分析模型。當前雖然已有利用機器學習進行程序性能分析的研究,但僅用到了淺層機器學習方法,本文方法的創(chuàng)新在于引入深度學習技術。如圖2所示,左側輸入經過標準化后的性能數據指標,經過隱含層(Hidden Layers)的訓練,右側輸出性能問題類別概率,概率最大的類即為性能問題類別。
Figure 2 Program performance classification based on deep learning圖2 基于深度學習的程序性能分類
性能分析框架主要包括性能數據采集、基于深度學習的性能問題分類模型訓練、性能數據分類和統(tǒng)計展示等四個部分,如圖3所示?;谏疃葘W習的性能問題分類模型訓練采用大量作業(yè)的性能數據進行迭代訓練,獲得比較準確的性能問題分類,當訓練收斂后,對于新采集的性能數據,可以進行性能問題的診斷,并對多進程的性能問題進行統(tǒng)計分析。
采集不同的性能指標能夠確定不同的性能問題類型。理論上若能采集所有的性能指標,那么可以分析出任何潛在性能問題,但考慮到性能指標采集時產生的程序擾動和軟硬件開銷,以及硬件資源本身的限制,顯然選取其中若干重要的指標進行采集才是切實可行的方案。
深度學習技術依賴大量的數據進行學習,需要保證所采集數據的準確性,否則將會影響模型的效果。獲取PMU事件計數指標的開銷小,對程序本身的執(zhí)行幾乎不會造成明顯的干擾,所獲得的性能數據能夠準確地反映程序的性能指標。PMU事件計數可通過系統(tǒng)提供的API以及相關工具接口獲得。
4.2.1 稀疏編碼模型簡介
稀疏編碼模型可以自動從無標注數據中學習,給出比原始數據更好的特征描述,實際運用時使用稀疏編碼器發(fā)現的特征取代原始數據,往往能帶來更好的結果。本文使用深度學習的稀疏編碼模型進行實驗研究。
稀疏編碼模型由若干層自動編碼器AE(Auto Encoder)堆疊而成,一個典型的AE結構如圖4所示,輸出層y與輸入層x具有相同的規(guī)模結構,從輸入層x到隱含層h的過程記為函數f,從隱含層h到輸出層y的過程記為函數g,則:
h=f(x)=Sf(Wx+p)
(4)
y=g(h)=Sg(WTh+q)
(5)
其中Sf、Sg一般取為sigmod函數;W為輸入層與隱含層之間的權值矩陣,WT表示隱含層與輸出層之間的權值矩陣,p和q分別表示隱含層與輸出層的偏置向量,為后續(xù)表示方便,記θ=(W,WT,p,q)。
假設輸入層輸入的數據樣本表示為x=(x1,x2,…,xn),A為包含N個數據樣本的訓練集,則預訓練AE的過程實質上就是利用A對其參數θ的訓練過程,解碼目標是使y和x盡可能接近,其接近程度使用重構誤差函數L(x,y)來刻畫,其定義為:
(6)
則訓練集A的損失函數為:
(7)
對其進行極小化即可得到該層AE的參數θ。
Figure 4 AE structure圖4 自動編碼器結構
然而實際中,如果直接對損失函數作極小化,有時候很可能得到一個恒等函數。為了避免這種情況,可以對損失函數進行稀疏性限制,實現時通常采用一種基于相對熵的方法,損失函數如下:
(8)
其中,β為稀疏性懲罰項的權重系數;ρ為稀疏性參數,ηj表示輸入為xi時隱藏層上第j號神經元在訓練集A上的平均激活度。稀疏性懲罰項KL(ρ||ηj)的表達式為:
(9)
從KL(ρ||ηj)表達式可以看出,它隨著ρ與ηj差值的增大而逐漸減小,當二者相等時取最小值0,因此可以通過最小化損失函數使得ρ與ηj盡量接近。
4.2.2 性能問題類別
依靠專家經驗,可以根據性能指標直接確定性能問題類別,但主觀性強,我們使用一種相對客觀的方法,通過機器學習的聚類技術確定性能問題類別。
首先,使用聚類發(fā)現數據中的非隨機簇數k,并使用差距統(tǒng)計(Gap Statistic)[14]方法進行簇的有效性評估,通過選取滿足:
Gap(k)-(Gap(k+1)-sd(k+1))≥0
(10)
的最小k值確定最優(yōu)簇數,也就是需要劃分的性能問題類別數。然后,根據每個簇內數據的特征賦予性能問題類別實際意義,如果不能很好地解釋每個簇就要考慮次優(yōu)的劃分方法,直到找到能被賦予實際意義的劃分。
4.2.3 模型訓練
模型訓練主要依靠經驗和實驗嘗試。深度學習雖然在許多應用中都取得了比較好的效果,但是其模型的訓練卻缺乏堅實的理論基礎,針對特定問題需要多少層的神經網絡,每層網絡需要多少個神經元,都只有一些經驗方法,因此應參考相關經驗進行實驗,根據模型的分類效果調整參數,逐步確定較優(yōu)的模型參數。
我們在神威太湖之光超級計算機上實現了基于深度學習的性能問題分類模型,使用R[15]作為編程語言,R語言對統(tǒng)計計算和作圖方面有很好的支持,近幾年在數據挖掘、大數據等領域有廣泛的應用。在實現過程中,我們使用了R語言的cluster[16]庫(版本2.0.5)和deepnet[17]庫(版本0.2)進行編程。
Figure 5 Radar figure of the performance data圖5 性能數據雷達圖
4.3.1 性能指標和數據
神威太湖之光是一個基于國產申威眾核處理器的異構平臺,目前提供了作業(yè)級性能監(jiān)測工具、性能分析API等性能分析支持,能夠采集作業(yè)和指定代碼段的PMU數據。通過PMU獲取的數據可被單位化成8個指標協助用戶進行性能分析,如表1所示。
Table 1 Metrics and their abbreviations表1 性能指標及其簡寫
當前通過該工具已經產生了大量的PMU數據樣本,這些數據是許多用戶的課題多次運行時產生的,包含了應用優(yōu)化過程中不同版本的性能數據,有較好的隨機性和代表性。經過人工分析,認為這8個性能指標已經能夠識別出現頻繁的幾類性能問題,采用這8個性能指標作為模型訓練的輸入是可行的。
4.3.2 性能問題類別
我們隨機抽取500條原始的性能數據用雷達圖表示,如圖5所示,各指標數值進行了取對數處理。其中每個小圖代表一條性能數據,任意選取其中一個小圖觀察,均可以發(fā)現其他相似度很高的小圖,說明性能數據中存在一定的規(guī)律,可以使用聚類技術來確定其中的簇,給出性能問題的類別。
基于差距統(tǒng)計標準評估簇數,結果如圖6所示,橫坐標表示簇的個數,縱坐標表示差距統(tǒng)計值,最優(yōu)結果為第一個差距統(tǒng)計值大于0的簇個數。實驗結果表明,將數據劃分為6個性能問題類別是最理想的。
Figure 6 Gap statistics圖6 差距統(tǒng)計結果
使用cluster庫中clara[16]方法將性能數據聚為6類,其中的輸入訓練數據均為通過均值和方差標準化后的數據,負值表明數據相對較小,對其簇內典型數據進行分析,結果如圖7所示,其中縱坐標的含義見表1。
Figure 7 Various metric values of the typical representation of the cluster of 6圖7 簇數為6時簇內典型代表的各指標情況
第1個簇的IPC較大,并且其他指標均較小,說明該簇代表各方面的性能均衡,沒有明顯的性能瓶頸;第3個簇雖然各個指標也均較小,但其IPC較小,表明程序性能差但不是由于所選取的這些指標導致的,為其他類型,可以進一步優(yōu)化指令序列提高IPC;第4個簇的DTBMPC指標明顯偏大,說明DTB Miss對程序性能的影響很大;第6個簇的MEMAPC指標明顯偏大,說明需要重點優(yōu)化訪存行為;第2個簇可發(fā)現其DMAGPC值偏大,說明DMA比較碎,可以嘗試減少DMA次數,比如數據打包優(yōu)化;第5個簇綜合ICache的指標可發(fā)現其L2ICMPC大但是L2ICAPC卻小,也就是說其L2ICache的Miss率較高。
根據上述分析結果,可以將神威太湖之光上的性能問題分為6類,如表2所示。
4.3.3 訓練性能問題分類模型
深度學習總會在擬合上出現問題,只是程度不同而已:若訓練集比驗證集的分類正確率更高,表明可能出現了過擬合;若兩個分類正確率都很低,表明可能出現了欠擬合。正則化是遏制過擬合訓練數據的有效方法,最熱門的正則化技術是dropout,它在訓練期間隨機跳過神經元,并強迫層內其他算法重拾這些神經元,簡單而有效。對欠擬合問題,可以通過增加參數搜索網格的容量并進行更多、更長的訓練調整。當模型性能長時間得不到提升時,結束當前學習,防止過學習的問題。
Table 2 Categories and description of performance problems表2 性能問題類別及描述
在預訓練階段,我們直接使用15 000個有效作業(yè)的性能數據,每個作業(yè)包含若干進程,每個進程的性能數據可以作為一條輸入。在該階段,從中抽取了10萬條無標簽性能數據樣本作為預訓練集。初步訓練使用較少的迭代次數,確定網絡層數和每個隱含層內的節(jié)點數,如圖8所示,可見隱含層數為3、每個隱含層節(jié)點數為30時能獲得較好的分類性能。
Figure 8 Effect of the number of hidden layers and nodes on classification accuracy圖8 隱含層數和隱層節(jié)點數對分類正確率的影響
在微調階段,選取其中部分數據根據體系結構和性能調優(yōu)的經驗知識打上分類標簽生成的1 000個微調樣本,對訓練的成果進行微調,通過反復迭代進行模型優(yōu)化,模型在測試集上的分類正確率不斷提升,目前已到達了94%(與標簽數據對比),每當有提升時記錄其分類正確率。如圖9所示,可見所訓練的模型能夠以較高的正確率識別出性能問題。
Figure 9 Changes in classification accuracy of the iterative model圖9 迭代模型分類正確率變化圖
本文提出的性能分析框架可以實現作業(yè)級和指定程序代碼級的性能智能分析。作業(yè)級的性能分析通過集成作業(yè)管理部分功能,可實現透明的作業(yè)級性能數據采集和智能分析;指定程序代碼級的性能分析通過在代碼段的開始和結束位置插入性能API接口,由框架實現該代碼段性能數據的采集和智能分析。相比于傳統(tǒng)的性能分析工具,該框架能夠直觀地給出作業(yè)或代碼段最主要的性能瓶頸問題,降低復雜系統(tǒng)性能調優(yōu)的門檻,提高程序優(yōu)化的進度。
為了驗證基于深度學習的性能分析框架的正確性和有效性,我們利用國家超算無錫中心的神威太湖之光超級計算機系統(tǒng)進行了測試。神威太湖之光每個節(jié)點由一顆申威眾核處理器構成(260核,1.45 GHz),配備32 GB內存,運行Linux操作系統(tǒng),節(jié)點間采用56 Gbps的Infiniband FDR網絡連接。測試中,最大使用了神威太湖之光計算機系統(tǒng)1 024 CPU的計算資源。
(1)FDTD課題。
FDTD課題是電磁領域的典型應用,采用時域有限差分方法求解麥克斯韋方程。課題采用高階差分方法,基于區(qū)域分解并行,每個迭代步完成邊緣通信和計算。
FDTD課題的分析過程和效果如表3所示。
Table 3 Analysis process of FDTD表3 FDTD分析過程和效果
采集的數據經模型分析輸出為Mem類問題,程序員將課題中主要的三個只讀的數組拷貝到片上高速存儲器進行優(yōu)化,性能提升45%;再次分析后顯示為Mem類問題,程序員發(fā)現還有另外兩個變量未利用片上高速存儲器進行優(yōu)化;優(yōu)化后再次分析結果為Balance,至此核心段性能提升約711%。
(2)微孔道擴散過程MD模擬課題。
該課題是分子動力學應用,計算分子之間相互作用力。核心計算采用區(qū)域分解的方式,在計算過程中交換重疊邊界上數據信息。
MD課題的分析過程和效果如表4所示。采集的數據經模型分析輸出為Mem類問題,程序員將課題中的多個臨時變量聲明為局部變量,性能提升34%;再次分析顯示依然為Mem類問題,程序員將其中多個數組拷貝片上高速存儲器進行優(yōu)化,性能提升73%;再次分析還是為Mem類問題,程序員發(fā)現拷貝數據方式不是最優(yōu),對數據進行動態(tài)拷貝優(yōu)化;再次分析結果為Balance,至此核心段性能提升約218%。
Table 4 Analysis process of MD表4 MD分析過程和效果
(3)解有限域上某類線性方程組。
課題的核心計算為一個次數達百萬級別的并行循環(huán),單次循環(huán)內主要完成如下工作:首先根據循環(huán)迭代變量的位置和原始數據構造一個線性方程組,然后求解該線性方程組并保留部分有價值的數據,其中構造線性方程組的過程存在數量眾多的大跨度離散寫操作。
如表5所示,核心段某版本,經分析為DTB類問題,程序員將其中數據進行排序優(yōu)化;再次分析結果為Balance,至此核心段性能提升約67%。
Table 5 Analysis process of solving equation表5 解某方程核心段分析過程
(4)CESM課題MICRO_MSG核心段。
CESM是地球系統(tǒng)模式應用課題,MICRO_MSG是重要的核心段,包含復雜的函數調用關系。
micro_mg核心段的分析過程和效果如表6所示。采集的數據經模型分析輸出為ICache類問題,程序員根據核心段調用關系對函數順序進行重排優(yōu)化;再次分析結果為Balance,核心段性能提升約230%。
Table 6 Analysis process of micro_mg表6 micro_mg核心段分析過程
本文提出了一種基于深度學習的性能分析方法和框架?;谏疃葘W習的性能分析方法使用簇評估和稀疏編碼深度學習技術,在大量性能監(jiān)測數據訓練的基礎上,將程序性能問題分為若干類,并給出優(yōu)化方向性建議。我們在神威太湖之光上實現了程序性能分析框架的原型,能夠根據性能監(jiān)測數據,直觀地指導程序員快速把握當前應用最為突出的性能瓶頸問題,在當前性能瓶頸解決后可進一步迭代,直到取得滿意的性能結果。實驗結果表明,該性能分析框架能有效提高應用優(yōu)化的效率,降低用戶調優(yōu)代碼的成本。
本文研究工作中得到了國家超算無錫中心的大力支持和無私幫助,在此表示衷心的感謝。基于深度學習的性能分析方法可以推廣到其它多核和眾核系統(tǒng)。下一步我們將繼續(xù)完善和優(yōu)化該方法和實現,采集更多的數據進行訓練,進一步提高判斷的準確性,為更多的應用提供智能化的性能優(yōu)化服務。
[1] Yoo W,Larson K,Baugh L,et al.Adp:Automated diagnosis of performance pathologies using hardware events[C]∥Proc of the 12th ACM Sigmetrics/Performance,2012:283-294.
[2] Fu H,Liao J,Yang J,et al.The Sunway Taihulight supercomputer:System and applications[J].Science in China Series F:Information Sciences,2016,59(7):072001.
[3] FPMPI Team. Fast profiling library for MPI[EB/OL].[2017-11-28].http:∥www.mcs.anl.gov/research/projects/fpmpi/WWW/index.html.
[4] Chris C,Jeffery V.Mpip:Lightweight,Scalable MPI profiling[EB/OL].[2017-08-30].http:∥mpip.sourceforge.net.
[5] PAPI Team.PAPI[EB/OL].[2017-08-06].http:∥icl.cs.utk.edu/papi.
[6] Popescu M,Hotrabhsvananda B,Moore M.VAMPIR:An automatic fall detection system using a vertical PIR sensor array[C]∥Proc of International Conference on Pervasive Computing,2012:163-166.
[7] Scalasca Team.Cube 4.x series[EB/OL].[2017-04-15].http:∥www.scalasca.org/software/cube-4.x/download.html.
[8] Intel Corporation. Intel vtune amplifier 2017[EB/OL].[2017-09-08].https:∥software.intel.com/en-us/intel-vtune-amplifier-xe.
[9] Scalasca Team.Scalasca[EB/OL].[2017-11-28].http:∥www.scalasca.org.
[10] Adhianto L,Banerjee S,Fagan M,et al.Hpctoolkit tools for performance analysis of optimized parallel programs[J].Concurrency and Computation:Practice and Experience,2010,22(6):685-701.
[11] Malony A D,Shende S.The TAU parallel performance system[J].International Journal of High Performance Computing Application,2006,20(2):287-311.
[12] Urlinger K,Gerndt M,Kereku E.Periscope:Advanced techniques for performance analysis[C]∥Proc of Parallel Computing:Current & Future Issuesof High-End Computing,2005:15-26.
[13] Yu Kai, Jia Lei,Chen Yu-qiang.Deep learning:Yesterday,today,and tomorrow[J].Journal of Computer Research and Development,2013,50(9):1799-1804.(in Chinese)
[14] Broberg P,Kohl M,Harrington J.Gap statistic for estimating the number of clusters[EB/OL].[2017-03-01].http:∥cran.r-project.org/web/packages/clusGap/index.html.
[15] R Development Core Team.The R project for statistical computing[EB/OL].[2017-03-24].http:∥www.r-project.org.
[16] Maechler M, Rousseeuw P, Struyf A. Cluster:Finding groups in data[EB/OL].[2017-03-02].http:∥cran.r-project.org/web/packages/cluster/index.html.
[17] Xiao R.Deep learning toolkit in R[EB/OL].[2017-03-02].http:∥cran.r-project.org/web/packages/deepnet/index.html.
附中文參考文獻:
[13] 余凱,賈磊,陳雨強.深度學習的昨天,今天和明天[J].計算機研究與發(fā)展,2013,50(9):1799-1804.