李 國,陳 茜
(中國民航大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,天津 300300)
2016年12月,英國國家航空服務(wù)公司(NATS)由于兩條系統(tǒng)航班服務(wù)器通道均發(fā)生故障,導(dǎo)致數(shù)百架航班無法起飛,此次故障共造成120架航班被取消,500架航班被延誤超45分鐘,共影響約10000萬名旅客[1]。
2016年8月8日凌晨2點,達(dá)美航空公司在亞特蘭大的主數(shù)據(jù)中心發(fā)生故障,導(dǎo)致全球電腦和運營系統(tǒng)停頓。超過650各航班被取消,數(shù)千旅客滯留全球各機(jī)場,航班延誤嚴(yán)重,損失數(shù)百萬美金[2]。
一個典型的數(shù)據(jù)中心服務(wù)器可以運行成百上千資源不斷變化的作業(yè),然而現(xiàn)有系統(tǒng)并不能適應(yīng)日益增長的調(diào)度復(fù)雜性。主要原因是管理系統(tǒng)將工作任務(wù)低效地分配給服務(wù)器,不能在安排工作任務(wù)之前充分考慮服務(wù)器狀態(tài)。因此,高效管理數(shù)據(jù)中心資源,提高服務(wù)器負(fù)載預(yù)測精度,優(yōu)化服務(wù)器資源調(diào)度至關(guān)重要。
國內(nèi)外許多學(xué)者對提高資源負(fù)載預(yù)測精度問題進(jìn)行了大量研究,并取得了一些研究結(jié)果。常見方法有三類,一、傳統(tǒng)預(yù)測方法,如 Holter-Winter,差分整合移動平均自回歸模型(ARIMA)和Prophet算法[3,5],結(jié)合歷史數(shù)據(jù)進(jìn)行趨勢預(yù)測。二、人工智能方法,文獻(xiàn)[6]重點研究谷歌數(shù)據(jù)中心服務(wù)器CPU負(fù)載預(yù)測,使用長短期記憶網(wǎng)絡(luò)(LSTM)并與應(yīng)用廣泛的ARIMA預(yù)測結(jié)果進(jìn)行對比。結(jié)果表明,LSTM模型預(yù)測結(jié)果準(zhǔn)確率更高,學(xué)習(xí)非線性數(shù)據(jù)的能力比ARIMA模型表現(xiàn)更優(yōu)異。文獻(xiàn)[7]指出組合模型通過將兩個或多個單一模型結(jié)合起來,綜合單一模型的優(yōu)點,克服了單一模型的缺點,提高了混合模型的整體預(yù)測精度。文獻(xiàn)[8]研究發(fā)現(xiàn)農(nóng)業(yè)時間序列既包含線性部分又包含非線性部分,線性部分使用ARIMA建模,非線性部分使用LSTM建模。最后,得到兩種模型的混合預(yù)測結(jié)果。文獻(xiàn)[9]提出了EMD/EEMD-ARIMA的混合預(yù)測模型。經(jīng)驗?zāi)B(tài)分解(EMD)和綜合經(jīng)驗?zāi)J接糜趯ⅫS河上游長期徑流預(yù)測的水文時間序列分解為不同頻率的IMF組件進(jìn)行預(yù)測。
關(guān)于服務(wù)器CPU負(fù)載預(yù)測方法,相關(guān)研究主要使用傳統(tǒng)時間序列預(yù)測方法或單一人工智能方法。傳統(tǒng)時間序列預(yù)測方法雖然可變參數(shù)較少,但是對于非線性,非平穩(wěn),信噪比高的數(shù)據(jù)預(yù)測結(jié)果準(zhǔn)確率不高,很難適應(yīng)多變的時間序列預(yù)測。人工智能方法容易陷入局部最優(yōu)、易發(fā)生過擬合,且模型參數(shù)不易精確獲得,導(dǎo)致預(yù)測精度不高。結(jié)合上述問題,本文提取某航空公司數(shù)據(jù)中心CPU負(fù)載數(shù)據(jù),首次采用基于IF-EMD-LSTM的服務(wù)器CPU負(fù)載組合預(yù)測方法,首先對原始數(shù)據(jù)進(jìn)行預(yù)處理,IF能夠去除數(shù)據(jù)中的異常點并提高原始數(shù)據(jù)信噪比;其次,LSTM的結(jié)構(gòu)設(shè)計比傳統(tǒng)預(yù)測模型ARIMA更適合該時間序列預(yù)測,并使用BA算法優(yōu)化LSTM模型,減小LSTM參數(shù)人為主觀選擇對網(wǎng)絡(luò)性能造成的影響。并與單一ARIMA,LSTM模型進(jìn)行對比實驗。根據(jù)預(yù)測結(jié)果可知,組合模型具有更高的預(yù)測精度,對于保證系統(tǒng)運行不中斷,提前進(jìn)行資源調(diào)度具有重要的指導(dǎo)意義。
本文采用某航空公司服務(wù)器集群數(shù)據(jù)集,該數(shù)據(jù)集詳細(xì)記錄了300+服務(wù)器從2018年11月1日至2018年11月15日,總計15天資源使用的詳細(xì)情況。然而手動為300+服務(wù)器建立資源負(fù)載預(yù)測模型不合理。因此,只為其中一臺服務(wù)器(機(jī)器ID:193)建立時間序列分析,建模和預(yù)測方法。其余服務(wù)器也是同樣的建立方法。之所以選擇數(shù)據(jù)集最活躍的機(jī)器進(jìn)行研究,是因為該機(jī)器空缺值最少。以下ID為193的服務(wù)器被稱為機(jī)器A。為了提取服務(wù)器每個時間窗的工作CPU負(fù)載,考慮到某些任務(wù)只部分運行5分鐘時間窗這一事實。因此,將每相隔5分鐘時間窗任務(wù)的所有CPU讀數(shù)相加。并且觀察到一些機(jī)器不活動時期CPU讀數(shù)為0。使用線性插值方法來填充空缺值,使用空缺值的相鄰值進(jìn)行填充,保持序列的連續(xù)性[10]。共計4120條數(shù)據(jù),選取前70%的數(shù)據(jù)作為訓(xùn)練集,20%的數(shù)據(jù)作為單步測試集,10%剩余數(shù)據(jù)用于驗證模型的泛化能力。提取機(jī)器A CPU負(fù)載時間序列數(shù)據(jù)”CPU_load_data.csv”文件,數(shù)據(jù)格式為{time,CPU load data},其中time代表時間,CPU load data代表CPU負(fù)載數(shù)據(jù),具體負(fù)載數(shù)據(jù)如圖1所示。
圖1 CPU負(fù)載數(shù)據(jù)
孤立森林是基于集合的快速異常線性時間復(fù)雜度高的檢測方法。這是一種異常檢測算法滿足大數(shù)據(jù)處理的要求。孤立森林適合用于連續(xù)數(shù)據(jù)的異常檢測,并且異常被定義為“孤立的容易隔離的點,可以理解作為一個稀疏分布且遠(yuǎn)離的點密集的人群[11]。偏遠(yuǎn)的森林需要使用集成方法得到一個收斂值(蒙特卡羅方法),也就是說,從頭開始反復(fù)切割,然后平均每次切割的結(jié)果。孤立的森林需要使用整體方法為了得到一個收斂值(蒙特卡羅方法),也就是說,從一開始就反復(fù)地剪平均每一次切割的結(jié)果。孤立森林組成的 每一棵樹結(jié)構(gòu)實現(xiàn)方式如下:
1)隨機(jī)選擇一個屬性A。
2)隨機(jī)選擇此屬性值的值。
3)根據(jù)A對每條記錄進(jìn)行分類; 將小于A的記錄放在左邊的子樹上,并將大于或等于value的記錄放在右邊的子樹上。
4)構(gòu)造左,右子樹使用遞歸方式,直到滿足以下條件:①傳入數(shù)據(jù)集僅具有一個或多個相同記錄,并且②樹的高度達(dá)到高度閾值。
對于有 4 個樣本的測試數(shù)據(jù) 1、23、29、100 遍歷一棵孤立樹,如圖2所示。從圖2中看出,樣本 100 最先被孤立出來,所以最有可能是異常數(shù)據(jù)。
圖2 測試樣本孤立樹
EMD分解可以將非平穩(wěn)信號自適應(yīng)地分解為一系列IMF信號和殘差。IMF滿足兩點:第一,極端點的數(shù)目和零交叉點的數(shù)目必須相等或相差不超過一。其次,在任何一點上,包絡(luò)都是由局部最大值和局部極小值點形成的。極小值點形成的包絡(luò)的平均值為零。對于給定信號,執(zhí)行EMD分解的步驟如下[12]:
1)求出x(t)的上極點和下極點; 使用插值方法形成上下包絡(luò)并計算初始值m1;
2) 提取細(xì)節(jié):
h1=x(t)-m1
(1)
3)確定h1是否滿足IMF條件。 如果滿足,則h1是x(t)的第一個成分,記錄為c1=h1,并終止分解。 如果不滿意,請對k重復(fù)以上步驟k次以獲得
h1k=h1(k-1)-m1k
(2)
其中h1k是IMF,則c1k=h1k是第一個IMF信號x(t)的分量;
1)在上述迭代滿足術(shù)語標(biāo)準(zhǔn)標(biāo)準(zhǔn)偏差(SD)之前,標(biāo)準(zhǔn)偏差通常為(0.2-0.3);
2)將c1與x(t)合并得到:
r1=x(t)-c1
(3)
3)分解c1,c2,…,cn并重復(fù)進(jìn)行:組件包含不同的分量頻率段從高到低。 總而言之,原始信號的分解是
(4)
蝙蝠算法是Xin-Sbe Yang 等在2010 年研發(fā)的高效生物啟發(fā)式的算法[13]。蝙蝠的回聲定位的行為可以通過與待優(yōu)化的目標(biāo)函數(shù)相關(guān)聯(lián)的方式進(jìn)行表達(dá),即將蝙蝠尋找最優(yōu)位置的過程替換為尋找目標(biāo)函數(shù)fitness和目標(biāo)變量x=(x1,x2,x3,…,xd)T的最優(yōu)值問題。蝙蝠算法的具體運行過程如下:
步驟一:設(shè)置蝙蝠的個數(shù)N,維度d,迭代次數(shù)r,脈沖響度A,脈沖頻率r,脈沖頻率范圍[Qmin,Qmax],位置范圍[xmin,xmax]以及適應(yīng)度函數(shù)fitness。
Qi=Qmin+(Qmax-Qmin)*γ
(5)
(6)
(7)
隨機(jī)產(chǎn)生一個數(shù)rand,比較rand與脈沖頻率r的大小關(guān)系,如果rand大于r,則通過式(16)對當(dāng)前最優(yōu)解xbest進(jìn)行隨機(jī)干擾。如果rand比r小則直接利用式(17)引進(jìn)行越界處理,具體公式如下所示
(8)
(9)
式(16)中,ρ∈[-1,1]的隨機(jī)值,AVt是t時刻蝙蝠群體脈沖n向度的平均值。
步驟四:對新位置xt;求適應(yīng)度函數(shù)值fnew。 生產(chǎn)隨機(jī)數(shù)rand,若rand小于脈沖響度A并且fnew小于目前位置適應(yīng)度函數(shù)值fitness,則把fnew賦值給fitness。
(10)
(11)
(12)
步驟六:重復(fù)步驟二至步驟五,直至達(dá)到最大法代次數(shù)或者最優(yōu)適應(yīng)度函數(shù)值小于設(shè)定值。
在閾值神經(jīng)網(wǎng)絡(luò)中,LSTM網(wǎng)絡(luò)最為著名。存儲器是用來判斷的信息是否有用。與傳統(tǒng)時間序列預(yù)測模型相比,LSTM模型解決長期依賴問題并充分考慮時間序列數(shù)據(jù)的特點。圖2顯示了LSTM模型原理圖。
LSTM包含四個非常關(guān)鍵的元素輸入門,輸出門,遺忘門,和內(nèi)存單元。下面對LSTM中各部分進(jìn)行描述:
1) 輸入門
it=δ(Wi·[ht-1,xt]+bi)
(13)
式中,wt表示輸入門的權(quán)重矩陣,bt為偏置,δ為 sigmoid函數(shù)
(14)
2)輸出門
ot=δ(Wo·[ht-1,xt]+bo)
(15)
式中,W0表示輸出門的權(quán)重矩陣,b0為偏置。
3)遺忘門
ft=δ(Wf·[ht-1,,xt]+bf)
(16)
式中,Wf是遺忘門的權(quán)重矩陣,bf為偏置,δ為 sigmoid。
4)內(nèi)存單元
ct=tanh(Wc·[ht-1,xt]+bc)
(17)
圖3 LSTM原理圖
ct=ft·ct-1+it·ct
(18)
式中,Wc為存儲單元的權(quán)重矩陣,bc為記憶單元的偏差項,tanh 函數(shù)表達(dá)式為:
(19)
LSTM的最終輸出由輸出門和單元狀態(tài)決定
ht=ottanh(ct)
(20)
其中初始化時,c0=0,h0=0,LSTM的輸入單元為x(t),輸出單元代表h(t)。
首先本文設(shè)置LSTM除初始值和閾值之外的數(shù),通過構(gòu)造每層256個神經(jīng)元的兩層LSTM,可以更改歷史序列長度,batch_size和訓(xùn)練回合,以找到最適合該參數(shù)的值。 平均絕對誤差用作模型的評估指標(biāo):
將訓(xùn)練回合編號設(shè)置為50; batch_size為20; 歷史序列長度為5、10、15、20、25。預(yù)測結(jié)果如表1所示。其中,當(dāng)歷史序列長度為20時MAPE最小。
表1 不同歷史序列下的預(yù)測結(jié)果
將歷史記錄序列的長度設(shè)置為10;訓(xùn)練數(shù)回合為50;表2中顯示了預(yù)測結(jié)果。batch_size為52時,誤差最小。
表2 不同batch_size下的預(yù)測結(jié)果
將歷史記錄序列的長度設(shè)置為10;batch_size為20時;訓(xùn)練回合的數(shù)量分別為30、50、80、100,300和1000。預(yù)測結(jié)果如表3所示。其中,當(dāng)訓(xùn)練輪回合為80時,誤差最小。
表3 不同訓(xùn)練回合下的預(yù)測結(jié)果
LSTM除初始權(quán)值和閾值外最優(yōu)參數(shù)設(shè)置,如表4所示。
表4 LSTM參數(shù)設(shè)置
步驟一:首先根據(jù)本文第三部分靜態(tài)確定LSTM參數(shù),除初始權(quán)值和其閾值;
步驟二:準(zhǔn)備數(shù)據(jù):利用IF進(jìn)行數(shù)據(jù)預(yù)處理,EMD進(jìn)行數(shù)據(jù)分解;
步驟三:BA參數(shù)初設(shè)和訓(xùn)練:首先根據(jù)式(21)求出BA算法的維度,其中,j,k,l表示LSTM中輸入層,隱含層和輸出層的個數(shù);
d=4*j*k+4*k+j*k*l
(21)
BA與LSTM目標(biāo)函數(shù)相同:
(22)
其中:o是指蝙蝠中的第o個;p是指第p條數(shù)據(jù);oip和Tip是第o只蝙蝠確定模型LSTM樣本數(shù)據(jù)p下的輸出值和真實值;m是指樣本總數(shù)。
步驟四:將步驟三得到的最優(yōu)值等于LSTM的初始權(quán)值和閾值,訓(xùn)練BA-LSTM模型。
基于IF-EMD-LSTM的CPU負(fù)載趨勢預(yù)測方法總體流程如圖4所示。
圖4 基于IF-EMD-LSTM的CPU負(fù)載預(yù)測方法流程圖
1) 數(shù)據(jù)預(yù)處理:采用孤立森林算法對數(shù)據(jù)中的高異常點進(jìn)行剔除并提高信噪比。
2) 數(shù)據(jù)分解:為了進(jìn)一步提高預(yù)測精度,采用EMD算法將輸入數(shù)據(jù)分解為不同頻率的IMF組件和殘差。
3) 優(yōu)化神經(jīng)網(wǎng)絡(luò):利用BA算法優(yōu)化LSTM初始權(quán)值和閾值,利用優(yōu)化的值構(gòu)造BA-LSTM模型,減少人為主觀選擇參數(shù)對網(wǎng)絡(luò)性能的影響。
4) 神經(jīng)網(wǎng)絡(luò)訓(xùn)練:對每組IMF組件執(zhí)行優(yōu)化后的LSTM網(wǎng)絡(luò)訓(xùn)練,并通過單獨的優(yōu)化后的LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測每個IMF和殘差,并從每個預(yù)測值中重建預(yù)測值。
評價指數(shù)
模型預(yù)測量化指標(biāo)使用平均相對誤差(MAPE)以及均方根誤差(RMSE)評估算法性能:
(23)
(24)
其中m是序列長度,Xj是數(shù)據(jù)的真實值,j是數(shù)據(jù)的預(yù)測值。
實驗需要Keras深度學(xué)習(xí)框架下的LSTM庫,Sklearn機(jī)器學(xué)習(xí)庫,Pandas,Numpy,Matplotlib科學(xué)計算庫和繪圖庫。分別使用ARIMA,LSTM和IF-EMD-LSTM混合模型進(jìn)行預(yù)測。圖5顯示了孤立森林對異常點去除情況的展示。從圖中可以看出,一些高爆炸異常數(shù)據(jù)已被消除。圖6顯示了使用EMD算法對數(shù)據(jù)進(jìn)行分解的結(jié)果,將數(shù)據(jù)分解為不同頻率的IMF組件和殘差。圖7顯示了使用ARIMA模型預(yù)測,圖8顯示了使用LSTM預(yù)測模型的曲線預(yù)測結(jié)果。圖9顯示了使用IF-EMD-LSTM混合算法總體預(yù)測結(jié)果。
圖5 孤立森林原始數(shù)據(jù)異常點去除
圖6 EMD分解后數(shù)據(jù)曲線
圖7 ARIMA模型預(yù)測結(jié)果
圖8 LSTM模型預(yù)測結(jié)果
圖9 IF-EMD-LSTM模型預(yù)測結(jié)果
三個預(yù)測算法使用MAPE和RMSE做為評價標(biāo)準(zhǔn),預(yù)測結(jié)果對比如表5所示。從表中可以看出MAPE和RMSE優(yōu)于ARIMA和LSTM預(yù)測模型。
表5 三種預(yù)測算法評價指標(biāo)的比較
1)根據(jù)從某航空公司服務(wù)器資源負(fù)載數(shù)據(jù)提取出的CPU負(fù)載時間序列數(shù)據(jù)特點,利用IF和EMD算法對原始數(shù)據(jù)進(jìn)行預(yù)處理,解決原始數(shù)據(jù)非平穩(wěn),非線性,信噪比高對預(yù)測模型性能影響較大的問題。
2)引入蝙蝠算法(BA)優(yōu)化LSTM,避免了單一理論方法的局限性,組合預(yù)測模型與單一ARIMA和LSTM模型預(yù)測相比平均相對誤差(MAPE)分別提高了18.72%和8.71%,預(yù)測效果更佳。使用組合預(yù)測模型進(jìn)行服務(wù)器CPU負(fù)載預(yù)測相比單一模型有了顯著改進(jìn)。
3)本文著重于研究服務(wù)器負(fù)載資源中CPU資源使用情況,未考慮其它因素,如內(nèi)存,磁盤,網(wǎng)絡(luò)等。
接下來的研究,將結(jié)合CPU資源與其它因素對服務(wù)器負(fù)載情況進(jìn)行預(yù)測。