朱墨儒,高仲合
(曲阜師范大學(xué) 軟件學(xué)院,山東 曲阜 273165)
云資源的管理與調(diào)度是云計(jì)算的關(guān)鍵技術(shù)之一,而負(fù)載預(yù)測(cè)有利于云資源高效管理、系統(tǒng)安全和穩(wěn)定運(yùn)行,在虛擬機(jī)遷移與調(diào)度、任務(wù)執(zhí)行時(shí)間計(jì)算及優(yōu)化用戶服務(wù)過(guò)程中發(fā)揮著重要作用[1]。
目前,多數(shù)負(fù)載預(yù)測(cè)算法是對(duì)負(fù)載時(shí)序數(shù)據(jù)進(jìn)行分析建模,通過(guò)負(fù)載歷史記錄來(lái)進(jìn)行負(fù)載的短期預(yù)測(cè)。文獻(xiàn)[2]通過(guò)隱馬爾科夫模型(Hidden Markov Model,HMM)輔助優(yōu)化資源負(fù)載預(yù)測(cè)。文獻(xiàn)[3]通過(guò)c-c法確定嵌入維度,并通過(guò)支持向量機(jī)預(yù)測(cè)下一時(shí)刻的資源負(fù)載。但是,由于負(fù)載數(shù)據(jù)影響因素的復(fù)雜性和噪音的干擾,以上算法在云資源負(fù)載未來(lái)一段時(shí)間內(nèi)的預(yù)測(cè)上表現(xiàn)并不理想。為提高較長(zhǎng)期負(fù)載預(yù)測(cè)準(zhǔn)確度,本文采用Seq2seq模型進(jìn)行云資源負(fù)載預(yù)測(cè)。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)是一種具有“記憶”功能的特殊神經(jīng)網(wǎng)絡(luò),其在神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上將某些隱層作為循環(huán)層,保存每一時(shí)刻循環(huán)層的輸出并作為下一時(shí)刻該循環(huán)層的輸入。這種特殊的屬性使得其在處理時(shí)序數(shù)據(jù)上具有獨(dú)特的優(yōu)勢(shì)[4]。
RNN的結(jié)構(gòu)如圖1所示。

圖1 RNN及其展開(kāi)結(jié)構(gòu)
圖1中,t表示時(shí)間,xt表示t時(shí)刻輸入,st表示t時(shí)刻記憶信息,ot表示t時(shí)刻輸出,U、V、W分別表示輸入層、輸出層、循環(huán)層權(quán)重,則任意時(shí)刻輸出ot可表示為:

其中f、g為激活函數(shù)。
可以看到,RNN的歷史信息通過(guò)st保存,這種結(jié)構(gòu)使得其具有記憶功能,非常適合用來(lái)處理負(fù)載時(shí)間序列數(shù)據(jù)。對(duì)于每一時(shí)刻,輸入為當(dāng)前時(shí)刻負(fù)載,輸出為下一時(shí)刻負(fù)載[5]。
Seq2seq模型是基于RNN網(wǎng)絡(luò)建立的用于處理輸入輸出數(shù)據(jù)為時(shí)間序列的模型,其輸入和輸出均為時(shí)間序列,包含編碼(encode)和解碼(decode)兩個(gè)過(guò)程,常采用兩種異構(gòu)的RNN網(wǎng)絡(luò)[6]。Seq2seq的結(jié)構(gòu)如圖2所示。
圖2中輸入序列長(zhǎng)度為3,輸出序列長(zhǎng)度也為3,表示以t時(shí)刻之前的3個(gè)時(shí)刻的狀態(tài)預(yù)測(cè)t時(shí)刻之后的3個(gè)時(shí)刻的狀態(tài)。

圖2 Seq2seq模型結(jié)構(gòu)
Seq2seq在自然語(yǔ)言處理(Natural Language Processing,NLP)方面有不錯(cuò)的表現(xiàn)[7],但針對(duì)時(shí)間序列預(yù)測(cè)的情況,如果采用同構(gòu)RNN網(wǎng)絡(luò),模型會(huì)將上一時(shí)刻輸出作為下一時(shí)刻輸入,每個(gè)時(shí)間節(jié)點(diǎn)的網(wǎng)絡(luò)結(jié)構(gòu)都相同。如果第一步預(yù)測(cè)有些許偏差,之后的預(yù)測(cè)誤差會(huì)迅速增大。如果采用異構(gòu)RNN網(wǎng)絡(luò),模型長(zhǎng)期預(yù)測(cè)準(zhǔn)確率提高的同時(shí),短期預(yù)測(cè)的準(zhǔn)確率會(huì)降低。所以,將Seq2seq模型用于負(fù)載預(yù)測(cè)需要進(jìn)行部分改動(dòng)。
考慮到RNN網(wǎng)絡(luò)對(duì)于短期預(yù)測(cè)往往有著不俗的表現(xiàn),本文在RNN模型的基礎(chǔ)上為其增加了一個(gè)調(diào)節(jié)層來(lái)修正多步預(yù)測(cè)的誤差,組成了同構(gòu)的Seq2seq模型,以修正短期負(fù)載預(yù)測(cè)的偏差,并且提高長(zhǎng)期負(fù)載預(yù)測(cè)的準(zhǔn)確率。此外,充分利用已知信息,將已知的輸入作為每一時(shí)刻調(diào)節(jié)層的輸入來(lái)使輸出序列的誤差達(dá)到最小。結(jié)構(gòu)如圖3所示。

圖3 用于負(fù)載預(yù)測(cè)的Seq2seq模型結(jié)構(gòu)
圖3中對(duì)于處理負(fù)載預(yù)測(cè)問(wèn)題,不需記錄龐雜的歷史負(fù)載數(shù)據(jù),只需保存歷史狀態(tài)信息st-1,通過(guò)獲取當(dāng)前負(fù)載,即可預(yù)測(cè)未來(lái)一段時(shí)間的負(fù)載。
此處模型的訓(xùn)練分為兩步。
第一步,訓(xùn)練一步預(yù)測(cè)的RNN網(wǎng)絡(luò)。RNN網(wǎng)絡(luò)的反向傳播采用基于時(shí)間的反向傳播算法(Backpropagation Through Time,BPTT),這就導(dǎo)致傳播深度與樣本數(shù)據(jù)大小成正比,于是要對(duì)樣本數(shù)據(jù)進(jìn)行劃分,以加速訓(xùn)練速度。為防止梯度爆炸和梯度消失,本文采用門(mén)循環(huán)控制單元(Gated Recurrent Unit,GRU)[8]組成的RNN網(wǎng)絡(luò),結(jié)構(gòu)如圖4所示。

圖4 GRU結(jié)構(gòu)
它通過(guò)“更新門(mén)”和“重置門(mén)”控制所要記憶的信息。不僅記憶能力優(yōu)越,而且訓(xùn)練速度很快。
第二步是為訓(xùn)練好的GRU網(wǎng)絡(luò)添加調(diào)節(jié)層。本文采用一個(gè)深度神經(jīng)網(wǎng)絡(luò)作為調(diào)節(jié)層,并且采用dropout[9]過(guò)程以一定概率使調(diào)節(jié)層神經(jīng)元失活,以提高模型的泛化能力。分步訓(xùn)練可以提高模型收斂速度,且使循環(huán)層與調(diào)節(jié)層不會(huì)互相影響,以發(fā)揮各個(gè)層的最大優(yōu)勢(shì)。
本文選用Google clusterdata 2011數(shù)據(jù)集中連續(xù)140 h CPU利用率的時(shí)序數(shù)據(jù)對(duì)算法進(jìn)行驗(yàn)證,時(shí)間序列樣本總計(jì)1 688個(gè)數(shù)據(jù)點(diǎn),實(shí)驗(yàn)將前1 000數(shù)據(jù)點(diǎn)作為訓(xùn)練集,將后688個(gè)數(shù)據(jù)點(diǎn)作為驗(yàn)證集。Seq2seq模型的建立采用Google的TensorFlow學(xué)習(xí)框架進(jìn)行。
實(shí)驗(yàn)的衡量標(biāo)準(zhǔn)采用平均絕對(duì)值誤差(Mean Absolute Deviation,MAD),公式如下:

其中yi*為預(yù)測(cè)值,yi為真實(shí)值。
將本文中用于負(fù)載預(yù)測(cè)的Seq2seq模型的預(yù)測(cè)結(jié)果同傳統(tǒng)Seq2seq模型及調(diào)優(yōu)后的支持向量機(jī)(Support Vector Machine,SVM)的預(yù)測(cè)結(jié)果作比較,SVM作為經(jīng)典非線性問(wèn)題的解決方法,其整體預(yù)測(cè)效果比起傳統(tǒng)Seq2seq模型要好,隨機(jī)抽取連續(xù)100個(gè)樣本點(diǎn)的一步預(yù)測(cè)結(jié)果對(duì)比如圖5所示,五步預(yù)測(cè)結(jié)果對(duì)比如圖6所示。
實(shí)驗(yàn)在全部測(cè)試集上的結(jié)果對(duì)比如表1所示。

圖5 一步預(yù)測(cè)結(jié)果對(duì)比

圖6 五步預(yù)測(cè)結(jié)果對(duì)比

表1 云計(jì)算資源負(fù)載預(yù)測(cè)性能對(duì)比表
由結(jié)果可以看出,傳統(tǒng)Seq2seq模型在短期預(yù)測(cè)與長(zhǎng)期預(yù)測(cè)上誤差非常均衡,非常適合用來(lái)作長(zhǎng)期預(yù)測(cè),但整體準(zhǔn)確率上卻不如SVM算法。在短期預(yù)測(cè)上用于負(fù)載預(yù)測(cè)的Seq2seq模型與SVM的性能相差不大,但對(duì)于較長(zhǎng)期的預(yù)測(cè),負(fù)載預(yù)測(cè)Seq2seq模型的表現(xiàn)明顯優(yōu)于SVM。所以,對(duì)于較長(zhǎng)期的預(yù)測(cè),負(fù)載預(yù)測(cè)Seq2seq模型顯然更加適用。
Seq2seq模型在負(fù)載較長(zhǎng)期的預(yù)測(cè)上的優(yōu)越表現(xiàn),可以提升云資源實(shí)現(xiàn)負(fù)載均衡的效果,并可以進(jìn)一步用來(lái)預(yù)測(cè)一段時(shí)間內(nèi)的平均負(fù)載預(yù)測(cè),對(duì)提升QoS質(zhì)量也有非常大的作用。通過(guò)調(diào)整Seq2seq模型的損失函數(shù)權(quán)重,可實(shí)現(xiàn)不同負(fù)載預(yù)測(cè)需求。在實(shí)際負(fù)載數(shù)據(jù)采樣過(guò)程中,可通過(guò)減小采樣間隔獲取更加準(zhǔn)確的負(fù)載變化,對(duì)于資源負(fù)載異常的監(jiān)測(cè)也有非常大的幫助。