謝同磊,鄧 莉,曹 振,梁晨君,李 超
(1.武漢科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 武漢 430065;2.湖北大學(xué) 信息建設(shè)與管理處,湖北 武漢 430062)
云數(shù)據(jù)中心按需為用戶提供服務(wù),服務(wù)器主機(jī)規(guī)模龐大,資源利用率低、耗電量高。研究表明微軟Azure[1]有60%的虛擬機(jī)平均CPU利用率低于20%,有40%的虛擬機(jī)第95個(gè)百分?jǐn)?shù)的最大CPU利用率低于50%;谷歌云平臺(tái)主機(jī)CPU利用率低且呈現(xiàn)出隨機(jī)的波動(dòng)[2];低資源利用率主要是由云平臺(tái)缺乏有效的資源管理造成的。主機(jī)負(fù)載預(yù)測(cè)可以促進(jìn)有效的調(diào)度和資源優(yōu)化配置,關(guān)閉不必要的空閑機(jī)器,幫助云平臺(tái)進(jìn)行有效的資源管理,降低數(shù)據(jù)中心成本。
在最近的研究工作中,一些深度學(xué)習(xí)的方法被應(yīng)用到了主機(jī)負(fù)載預(yù)測(cè)。為了提前多步預(yù)測(cè)主機(jī)負(fù)載,Song等[3]使用長(zhǎng)短期記憶網(wǎng)絡(luò)LSTM模型進(jìn)行主機(jī)負(fù)載預(yù)測(cè),并取得比以往統(tǒng)計(jì)學(xué)方法更好的效果,但是隨著隱藏層的增加會(huì)出現(xiàn)模型過(guò)擬合等問(wèn)題。文獻(xiàn)[4]基于深度循環(huán)神經(jīng)網(wǎng)絡(luò)編碼器-解碼器設(shè)計(jì)了一種主機(jī)負(fù)載在線預(yù)測(cè)模型,然而隨著模型復(fù)雜度的提升,仍然會(huì)出現(xiàn)過(guò)擬合現(xiàn)象。Nguyen等[5]使用遺傳算法和群智能算法代替神經(jīng)網(wǎng)絡(luò)中的反向傳播過(guò)程,由于神經(jīng)網(wǎng)絡(luò)模型的大量參數(shù)計(jì)算,會(huì)增大遺傳算法的計(jì)算復(fù)雜性。
云平臺(tái)資源利用率主要包括內(nèi)存資源利用率和CPU資源利用率等,主機(jī)CPU資源利用率是反映云平臺(tái)能耗情況的重要指標(biāo)。本文首先對(duì)云平臺(tái)CPU資源使用情況的特點(diǎn)進(jìn)行分析,設(shè)計(jì)并實(shí)現(xiàn)了基于Zoneout的長(zhǎng)短期記憶網(wǎng)絡(luò)主機(jī)負(fù)載預(yù)測(cè)方法(long short term memory with Zoneout,LSTM-Z)。該預(yù)測(cè)方法改變LSTM細(xì)胞狀態(tài)的保留機(jī)制,使得LSTM門控結(jié)構(gòu)中的隱藏層神經(jīng)元隨機(jī)地保持上一個(gè)時(shí)刻狀態(tài)的值,進(jìn)一步提高預(yù)測(cè)模型的泛化能力。神經(jīng)元的更新策略會(huì)因?yàn)橹鳈C(jī)負(fù)載的突變性和隨機(jī)波動(dòng)性產(chǎn)生較大的性能擾動(dòng),而LSTM-Z基于隨機(jī)保留和更新的策略表現(xiàn)出更加穩(wěn)定的性能,泛化性更好,能較好地適應(yīng)主機(jī)負(fù)載的波動(dòng)性特點(diǎn)。在云平臺(tái)主機(jī)的生命周期中,主機(jī)負(fù)載的不同歷史數(shù)據(jù)對(duì)預(yù)測(cè)值的影響大小各異。為了更好地學(xué)習(xí)到歷史窗口的數(shù)據(jù)依賴關(guān)系,本文基于遺傳算法來(lái)優(yōu)化主機(jī)負(fù)載歷史窗口的權(quán)重向量,進(jìn)一步提高模型的預(yù)測(cè)性能。遺傳算法能夠更好地收斂且能跳出局部最優(yōu),通過(guò)迭代進(jìn)化探索歷史窗口的權(quán)重向量能夠較好學(xué)習(xí)歷史信息,使本文所提的方法能更準(zhǔn)確地預(yù)測(cè)主機(jī)負(fù)載。
資源利用率低是云平臺(tái)面臨的主要挑戰(zhàn)之一,而主機(jī)資源負(fù)載預(yù)測(cè)有助于實(shí)施有效的主動(dòng)資源調(diào)度,同時(shí)能夠滿足服務(wù)水平協(xié)議(service level agreements,SLA)。目前大多數(shù)主機(jī)負(fù)載預(yù)測(cè)的工作都與機(jī)器學(xué)習(xí)有關(guān),特別是深度學(xué)習(xí)。主要的相關(guān)工作體現(xiàn)在以下幾個(gè)方面。
基于深度學(xué)習(xí)模型優(yōu)化的方法在主機(jī)負(fù)載預(yù)測(cè)中的運(yùn)用。Nguyen等[6]采用基于編碼器和解碼器的LSTM模型進(jìn)行主機(jī)負(fù)載預(yù)測(cè),并取得了比以往更好的效果。為了提高LSTM的記憶能力和非線性建模能力,Gupta等[7]提出了一種基于稀疏BLSTM的云數(shù)據(jù)中心資源使用預(yù)測(cè)方法。該方法是一種端到端模型,能雙向地提取時(shí)序特征,不需要額外的特征提取步驟,資源預(yù)測(cè)的準(zhǔn)確性比以往的方法有所提升。文獻(xiàn)[8]基于概率預(yù)測(cè)(probabilistic forecast)和改進(jìn)的多層長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)云資源預(yù)測(cè)模型(PF-LSTM)進(jìn)行研究,引入主機(jī)網(wǎng)絡(luò)流量作為預(yù)測(cè)CPU利用率的額外協(xié)變量,使得模型的預(yù)測(cè)性能優(yōu)于大部分傳統(tǒng)策略方法。為了緩解循環(huán)神經(jīng)網(wǎng)絡(luò)梯度消失等問(wèn)題,同時(shí)增強(qiáng)神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)長(zhǎng)期依賴關(guān)系的能力,Li等[9]提出了改進(jìn)的循環(huán)神經(jīng)網(wǎng)絡(luò)模型(independently recurrent neural network,INDRNN)。此方法通過(guò)堆疊多個(gè)層來(lái)構(gòu)建比一般RNN更深的深度網(wǎng)絡(luò),IDNRNN能夠處理非常長(zhǎng)的序列,可用于構(gòu)建非常深的網(wǎng)絡(luò),并且可以進(jìn)行穩(wěn)定的訓(xùn)練。Billa等[10]探索了將Dropout技術(shù)應(yīng)用到LSTM神經(jīng)網(wǎng)絡(luò)的前饋連接中,提高了模型的泛化性能。Zoneout比以前的研究更有優(yōu)勢(shì),其最顯著的貢獻(xiàn)是不僅激活一個(gè)單元,而且保存它,使單元在語(yǔ)義上有意義,Zoneout旨在提高LSTM對(duì)隱藏狀態(tài)擾動(dòng)的魯棒性,并使用隨機(jī)機(jī)制強(qiáng)制隱藏層神經(jīng)單元保持其先前狀態(tài)的值,使梯度信息和狀態(tài)信息更容易通過(guò)時(shí)間傳播[11]。
結(jié)合遺傳算法(genetic algorithm,GA)的神經(jīng)網(wǎng)絡(luò)模型研究。Nguyen等[5],使用遺傳算法代替功能鏈接神經(jīng)網(wǎng)絡(luò)(functional link neural network,F(xiàn)LNN)的反向傳播過(guò)程,提出了GA-FLNN對(duì)云平臺(tái)作業(yè)實(shí)際使用主機(jī)資源進(jìn)行預(yù)測(cè),GA能夠避免陷入局部最優(yōu)并克服反向傳播算法中收斂速度慢等問(wèn)題,但此方法訓(xùn)練的神經(jīng)元的結(jié)點(diǎn)較少,無(wú)法學(xué)習(xí)數(shù)據(jù)中心復(fù)雜的數(shù)據(jù)分布特性。此外,還有研究基于遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)(back propagation,BP)的連接權(quán)重和閾值來(lái)預(yù)測(cè)老人的負(fù)性情緒[12]。使用遺傳算法取代神經(jīng)網(wǎng)絡(luò)中大量神經(jīng)元參數(shù)的計(jì)算過(guò)程會(huì)非常耗時(shí),因?yàn)樵诘M(jìn)化計(jì)算的過(guò)程中,種群大小以及迭代次數(shù)會(huì)嚴(yán)重影響訓(xùn)練模型的時(shí)間,這影響了主機(jī)負(fù)載預(yù)測(cè)的實(shí)時(shí)性。
由于云平臺(tái)環(huán)境的復(fù)雜性和用戶作業(yè)提交的多變性,主機(jī)負(fù)載數(shù)據(jù)存在突變性和非線性等特點(diǎn),這些方法難以有效捕獲主機(jī)負(fù)載中短期突變的信息和學(xué)習(xí)歷史數(shù)據(jù)的依賴關(guān)系。本文基于Zoneout的LSTM預(yù)測(cè)模型改變?cè)瓉?lái)記憶細(xì)胞狀態(tài)的更新,提高LSTM對(duì)隱藏狀態(tài)中擾動(dòng)的魯棒性,使得梯度信息和狀態(tài)信息更容易通過(guò)時(shí)間傳播。主機(jī)某一時(shí)間點(diǎn)的負(fù)載情況與其附近的負(fù)載具有較大的相關(guān)性,離時(shí)間點(diǎn)越近,其差距就越小。遺傳算法能夠較好地收斂且能跳出局部最優(yōu),通過(guò)迭代進(jìn)化探索歷史窗口的權(quán)重向量能夠較好地表示歷史信息的依賴關(guān)系,使得提出的預(yù)測(cè)方法具有更好的性能。
目前有已發(fā)布的真實(shí)云平臺(tái)資源使用跟蹤數(shù)據(jù),如谷歌trace[4]以及阿里云trace[13]等。本文以谷歌2011 trace和阿里云2018 trace為例進(jìn)行分析。谷歌trace中記錄了谷歌云平臺(tái)超過(guò)1.2萬(wàn)臺(tái)主機(jī)運(yùn)行29天里的所有任務(wù)日志,其中有超過(guò)2500萬(wàn)個(gè)任務(wù)的資源使用數(shù)據(jù),每個(gè)作業(yè)至少包含一個(gè)任務(wù)。谷歌trace并沒(méi)有直接記錄主機(jī)負(fù)載的日志文件,因此需要把一臺(tái)主機(jī)中在同一個(gè)時(shí)間戳內(nèi)所有任務(wù)的資源使用情況提取為當(dāng)前時(shí)間戳內(nèi)主機(jī)的負(fù)載信息。在阿里云trace中,記錄了大約4000臺(tái)主機(jī)運(yùn)行8天的日志信息,其中直接包含了主機(jī)的負(fù)載數(shù)據(jù)表。
根據(jù)公布的云平臺(tái)跟蹤日志分析,云平臺(tái)的主機(jī)資源利用率不高、負(fù)載不均衡,使得云平臺(tái)維護(hù)成本高。圖1描述了分別在谷歌trace和阿里云trace隨機(jī)抽取的100臺(tái)主機(jī)CPU利用率的CDF圖。圖1表明,云平臺(tái)中主機(jī)CPU資源利用率大部分沒(méi)有超過(guò)60%。其中,在阿里云trace中這些主機(jī)的CPU資源利用率集中在30%~50%之間,谷歌trace中這些主機(jī)的CPU資源利用率集中在10%~40%之間。云平臺(tái)這種較低的資源利用率可能是由云平臺(tái)中用戶實(shí)際使用資源與云環(huán)境為用戶預(yù)留資源之間的巨大差距造成的[14]。雖然,通過(guò)設(shè)置閾值機(jī)制可以比較容易為云環(huán)境資源定義擴(kuò)展規(guī)則,但是與應(yīng)用程序的多變需求相比,設(shè)置閾值機(jī)制無(wú)法準(zhǔn)確地為用戶提供資源[5]。
自相關(guān)性能夠描述時(shí)序數(shù)據(jù)在時(shí)間上的依賴,自相關(guān)系數(shù)可以衡量這種依賴。對(duì)于主機(jī)負(fù)載序列滯后k階的自相關(guān)系數(shù)計(jì)算如式(1)所示
(1)
式中:mi為第i個(gè)時(shí)間戳的主機(jī)負(fù)載值,u為負(fù)載的平均值。圖2描述了阿里云trace中隨機(jī)抽取的主機(jī)(ID:m_1307)CPU利用率的k階自相關(guān)系數(shù)分布。從圖2可以發(fā)現(xiàn),主機(jī)CPU利用率數(shù)據(jù)具有局部相關(guān)性,一些觀測(cè)值與附近的一些觀測(cè)值相關(guān),歷史數(shù)據(jù)離當(dāng)前值越近,對(duì)當(dāng)前時(shí)刻的值影響越大。其中,滯后為1階和2階的自相關(guān)系數(shù)分別為0.9013和0.8403,主機(jī)負(fù)載數(shù)據(jù)存在明顯的時(shí)間自相關(guān)性。這可以通過(guò)預(yù)測(cè)模型學(xué)習(xí)這種時(shí)間依賴關(guān)系,根據(jù)歷史負(fù)載推測(cè)未來(lái)的主機(jī)負(fù)載情況。

圖2 阿里云trace主機(jī)CPU利用率自相關(guān)系數(shù)
圖3描述了谷歌trace中隨機(jī)抽取的主機(jī)(ID:4478967491)在某一時(shí)間段內(nèi)CPU的實(shí)際使用情況,CPU資源利用率被歸一化為0~1之間的數(shù)值。從圖中可以看出CPU的利用率在一定范圍內(nèi)波動(dòng),呈現(xiàn)出非線性的特點(diǎn),具有一定的突變性。在5月12日0時(shí)20分,CPU的利用率在局部范圍內(nèi)達(dá)到了最高0.4412;在5月12日16時(shí),CPU的利用率在局部范圍內(nèi)突然降到了最低0.0752。云平臺(tái)負(fù)載較大的波動(dòng)性以及在短期內(nèi)的突變性使得現(xiàn)有的預(yù)測(cè)模型難以準(zhǔn)確預(yù)測(cè)。

圖3 谷歌trace中主機(jī)CPU使用情況
歷史數(shù)據(jù)是預(yù)測(cè)未來(lái)的重要參考信息,基于歷史負(fù)載的變化情況預(yù)測(cè)主機(jī)未來(lái)的資源使用情況是提高其性能和工作效率的有效方法。本文將主機(jī)負(fù)載時(shí)間序列數(shù)據(jù)劃分為固定窗口大小的歷史序列數(shù)據(jù),每個(gè)歷史序列數(shù)據(jù)對(duì)應(yīng)一個(gè)預(yù)測(cè)序列數(shù)據(jù),通過(guò)訓(xùn)練模型來(lái)建立歷史與未來(lái)的映射關(guān)系。假設(shè)隨機(jī)抽取的一臺(tái)主機(jī)歷史序列數(shù)據(jù)為 (m1,m2,…,mn), 則預(yù)測(cè)模式為:(mi,…,mi+s-1)=f(mi-1,…,mi-k)。 其中,f為映射關(guān)系,s為預(yù)測(cè)步長(zhǎng),k為歷史窗口大小。
針對(duì)第2節(jié)云平臺(tái)跟蹤數(shù)據(jù)的資源使用特點(diǎn),設(shè)計(jì)了如圖4所示的云平臺(tái)基于LSTM-Z的主機(jī)負(fù)載預(yù)測(cè)方法,用于主機(jī)CPU負(fù)載預(yù)測(cè)。主要由預(yù)處理器、訓(xùn)練器和預(yù)測(cè)器3個(gè)部分組成。通過(guò)預(yù)處理器對(duì)原始跟蹤進(jìn)行數(shù)據(jù)預(yù)處理,谷歌trace中任務(wù)資源使用數(shù)據(jù)被轉(zhuǎn)化為對(duì)應(yīng)時(shí)間戳的主機(jī)負(fù)載數(shù)據(jù)。原始跟蹤數(shù)據(jù)較大且存在缺失值和異常值。因此,需要進(jìn)行數(shù)據(jù)清洗和特征選擇等一系列的工作。歸一化消除量綱的影響,最后基于滑動(dòng)窗口方法將數(shù)據(jù)進(jìn)行轉(zhuǎn)化,存儲(chǔ)到數(shù)據(jù)庫(kù)中供模型訓(xùn)練和預(yù)測(cè)。在訓(xùn)練器模塊中,首先初始化滑動(dòng)窗口權(quán)重參數(shù),將時(shí)序數(shù)據(jù)輸入到LSTM-Z進(jìn)行訓(xùn)練,其結(jié)果用于計(jì)算初次的適應(yīng)度。然后基于遺傳算法進(jìn)行選擇、交叉、變異,計(jì)算適應(yīng)度函數(shù)值。重復(fù)此過(guò)程至達(dá)到迭代終止條件時(shí),保存最優(yōu)的權(quán)重參數(shù)和模型,供預(yù)測(cè)器使用。在預(yù)測(cè)器中,使用訓(xùn)練好的模型和歷史的數(shù)據(jù)對(duì)未來(lái)的主機(jī)負(fù)載進(jìn)行預(yù)測(cè)。

圖4 云平臺(tái)主機(jī)負(fù)載預(yù)測(cè)方法LSTM-Z
主機(jī)負(fù)載數(shù)據(jù)存在突變性和非線性等特點(diǎn),這使得傳統(tǒng)的預(yù)測(cè)模型無(wú)法達(dá)到較好的預(yù)測(cè)效果。雖然LSTM本身具有良好的非線性建模能力,但應(yīng)用于主機(jī)負(fù)載預(yù)測(cè)建模時(shí),仍然存在模型泛化能力低等問(wèn)題。機(jī)器學(xué)習(xí)模型過(guò)擬合是長(zhǎng)期存在的問(wèn)題,過(guò)擬合的本質(zhì)是模型適應(yīng)噪聲,而不是捕捉數(shù)據(jù)中存在變化的關(guān)鍵因素,導(dǎo)致模型的泛化能力弱[15]。正則化可以提高神經(jīng)網(wǎng)絡(luò)模型的泛化能力。
目前Dropout正則化技術(shù)被廣泛應(yīng)用于深度學(xué)習(xí)模型的訓(xùn)練中,由于時(shí)序信息在一定程度的丟失,Dropout的拋棄機(jī)制并不能有效提高主機(jī)負(fù)載的預(yù)測(cè)性能。一些學(xué)者對(duì)循環(huán)神經(jīng)網(wǎng)絡(luò)正則化[11]技術(shù)有過(guò)研究并取得了不錯(cuò)的效果,文獻(xiàn)[16]將Zoneout運(yùn)用于跨尺度循環(huán)神經(jīng)網(wǎng)絡(luò)中,從而實(shí)現(xiàn)對(duì)各個(gè)模塊的隨機(jī)更新。Zoneout本質(zhì)上仍是一種正則化的技術(shù),不像Dropout那樣刪除隱藏單元,Zoneout旨在提高LSTM對(duì)隱藏狀態(tài)擾動(dòng)的魯棒性,并使用隨機(jī)機(jī)制強(qiáng)制一些隱藏層神經(jīng)單元保持其先前狀態(tài)的值,使得梯度信息和狀態(tài)信息更容易通過(guò)時(shí)間傳播。為了提高LSTM模型主機(jī)負(fù)載預(yù)測(cè)的泛化能力,本文將Zoneout更新機(jī)制集成到LSTM的門控結(jié)構(gòu)中,改變LSTM細(xì)胞狀態(tài)的保留機(jī)制,從而實(shí)現(xiàn)一種主機(jī)負(fù)載預(yù)測(cè)方法。
長(zhǎng)短期記憶網(wǎng)絡(luò)LSTM是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),可以緩解逐漸消失的梯度問(wèn)題,并且能夠?qū)W習(xí)長(zhǎng)期依賴關(guān)系。LSTM通過(guò)門結(jié)構(gòu)來(lái)控制信息的傳遞,分別是遺忘門、輸入門、輸出門。LSTM-Z通過(guò)將某些單元的激活隨機(jī)替換為它們?cè)谏弦粋€(gè)時(shí)間步的激活,控制LSTM細(xì)胞形態(tài)和狀態(tài)特征的下一次輸出,其具體每一步的信息傳遞過(guò)程如圖5所示,圖5中的粗線部分是Zoneout技術(shù)引入的新操作,表示相應(yīng)的狀態(tài)被對(duì)應(yīng)的掩碼所屏蔽。其中ft、it、ot、ct、ht分別表示遺忘門、輸入門、輸出門、記憶單元、隱藏層的輸出值,Wf、Wi、Wg、Wo分別表示遺忘門、輸入門、細(xì)胞狀態(tài)、輸出門的權(quán)重矩陣,bf、bi、bg、bo分別表示相應(yīng)的偏置,dt表示對(duì)應(yīng)的掩碼信息,具體計(jì)算步驟如下:

圖5 LSTM-Z模型結(jié)構(gòu)
(1)細(xì)胞狀態(tài)通過(guò)遺忘門的sigmoid計(jì)算單元對(duì)重要信息進(jìn)行保留,選擇性丟掉不重要的信息。遺忘門通過(guò)查看ht-1和xt的數(shù)據(jù)信息計(jì)算得到一個(gè)0到1之間的向量值,向量中的值表示對(duì)上一個(gè)細(xì)胞狀態(tài)中對(duì)應(yīng)信息的保留程度。具體計(jì)算過(guò)程如式(2)所示
ft=σ(Wf[ht-1,xt]+bf)
(2)
(2)通過(guò)遺忘掉不重要的信息以后,細(xì)胞狀態(tài)通過(guò)輸入門進(jìn)行信息更新。將ht-1和xt送進(jìn)輸入門來(lái)操作信息的更新,然后利用tanh單元計(jì)算ht-1和xt新的候選細(xì)胞信息gt,這個(gè)過(guò)程的計(jì)算如式(3)和式(4)所示
it=σ(Wi[ht-1,xt]+bi)
(3)
gt=tanh(Wg[ht-1,xt]+bg)
(4)
(3)通過(guò)前兩步的計(jì)算,在此步更新細(xì)胞信息ct-1為ct。在LSTM門控結(jié)構(gòu)中,根據(jù)遺忘門的信息ft和輸入門更新后的候選信息gt得到新的細(xì)胞信息ct。原始LSTM的細(xì)胞狀態(tài)ct計(jì)算如式(5)。為提高模型的泛化能力,本文使用Zoneout來(lái)計(jì)算下一個(gè)細(xì)胞狀態(tài)。Zoneout在訓(xùn)練中注入噪聲,這樣可以使隱藏狀態(tài)和存儲(chǔ)單元隨機(jī)保持先前的值。細(xì)胞狀態(tài)的計(jì)算為式(6)
ct=ft?ct-1+it?gt
(5)
(6)
(4)更新完細(xì)胞狀態(tài)后,在輸出門根據(jù)輸入的ht-1和xt使用sigmoid單元來(lái)判斷輸出哪些狀態(tài)特征,然后經(jīng)過(guò)tanh層得到一個(gè)輸出值向量。原始LSTM在計(jì)算隱藏層狀態(tài)ht時(shí),如式(8)所示。本文基于隨機(jī)機(jī)制強(qiáng)制LSTM中隱藏層神經(jīng)單元保持其先前狀態(tài)的值,具體計(jì)算隱藏層狀態(tài)如式(9)所示
ot=σ(Wo[ht-1,xt]+bo)
(7)
ht=ot?tanh(ct)
(8)

(9)
LSTM-Z模型提高了預(yù)測(cè)性能,在預(yù)測(cè)主機(jī)負(fù)載時(shí)表現(xiàn)出了較好的效果。主機(jī)負(fù)載數(shù)據(jù)的預(yù)測(cè)值受鄰近歷史值的影響,不同歷史值其影響大小不同。不同歷史值以及預(yù)測(cè)長(zhǎng)度的變化對(duì)模型都產(chǎn)生了一定的影響,于是本文基于遺傳算法對(duì)未來(lái)主機(jī)負(fù)載的LSTM-Z預(yù)測(cè)做進(jìn)一步優(yōu)化。
遺傳算法是一種典型的進(jìn)化算法。其本質(zhì)是一種高效、并行、全局搜索的方法,引入種群、父代、子代、染色體等基本概念,能夠在搜索的過(guò)程中自動(dòng)獲取有關(guān)搜索空間的知識(shí),并通過(guò)不斷的進(jìn)化,探索一種最優(yōu)的解[12]。遺傳算法能夠較好地處理時(shí)序數(shù)據(jù)的歷史窗口權(quán)重信息,這樣能更好地發(fā)揮模型對(duì)于云平臺(tái)具有多變性和波動(dòng)性數(shù)據(jù)的預(yù)測(cè)。
遺傳算法的基本步驟包括編碼、初始化種群、選擇、交叉、變異從而不斷產(chǎn)生新的子代進(jìn)行求解。編碼是將主機(jī)負(fù)載歷史信息權(quán)重的表現(xiàn)型結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換為遺傳空間的基因型結(jié)構(gòu)數(shù)據(jù)。交叉和變異都是在個(gè)體間的基因段上進(jìn)行的。此外,適應(yīng)度函數(shù)和終止條件也是算法中兩個(gè)比較重要的概念。適應(yīng)度函數(shù)關(guān)系到最優(yōu)解的確定,而終止條件一般為最大迭代次數(shù)或達(dá)到解的條件。由于GA選擇個(gè)體是根據(jù)適應(yīng)度函數(shù)來(lái)評(píng)估。平均絕對(duì)百分比誤差能夠描述預(yù)測(cè)性能的差異,因此基于式(10),根據(jù)式(11)計(jì)算適應(yīng)度的評(píng)估值。其中oi和yi分別是預(yù)測(cè)值與真實(shí)值,n為預(yù)測(cè)樣本數(shù),F(xiàn)為適應(yīng)度函數(shù)
(10)
(11)
主要操作算子的計(jì)算過(guò)程如下:
(1)初始化:遺傳算法需要解決的是預(yù)測(cè)優(yōu)化問(wèn)題,由于不同歷史值對(duì)預(yù)測(cè)值的影響不同,需要調(diào)整歷史值的權(quán)重輸入。在初始化時(shí),先隨機(jī)初始化滿足式(12)的多個(gè)個(gè)體,并在此基礎(chǔ)上進(jìn)行遺傳迭代。假設(shè)每代種群有n個(gè)個(gè)體。每個(gè)權(quán)重表示占整個(gè)歷史信息輸入的比例,歷史值的輸入調(diào)整主要包括權(quán)重的組合和改變。因此,本文初始化種群,將窗口的參數(shù)扁平化為一個(gè)一維向量,并進(jìn)行組編碼。圖6描述了任意一個(gè)個(gè)體染色體的編碼結(jié)構(gòu),染色體由多組基因片段組成。一個(gè)個(gè)體有唯一的一條染色體 (w1,w2,…,wk), 表示一種最優(yōu)解的可能,其基因序列w表示一個(gè)權(quán)值所對(duì)應(yīng)的基因片段,g表示相應(yīng)的基因編碼。其中每個(gè)個(gè)體基因序列的表現(xiàn)型滿足

圖6 個(gè)體染色體的編碼方式
(12)
(2)選擇:根據(jù)適應(yīng)度對(duì)個(gè)體進(jìn)行評(píng)價(jià),采用輪盤賭算法選擇出優(yōu)良的個(gè)體,每個(gè)個(gè)體被選擇的概率與其適應(yīng)度成正比。這是模擬生物自然選擇的過(guò)程,如式(13)所示,其中qi為每個(gè)個(gè)體被選擇的概率,適應(yīng)度大則表示個(gè)體較優(yōu),更容易遺傳給后代
(13)
(3)交叉:交叉是遺傳算法的重要操作,是從兩個(gè)父代產(chǎn)生后代從而把更多有益的信息遺傳給后代的過(guò)程。交叉算子是基于交叉率進(jìn)行的,對(duì)于兩個(gè)父代,隨機(jī)交換兩個(gè)父代的一個(gè)基因片段。由于交換基因片段后可能不再滿足式(12),因此需要對(duì)個(gè)體基因進(jìn)行調(diào)整。對(duì)于小于1的個(gè)體隨機(jī)選取一個(gè)基因段的表現(xiàn)型加上其差值,對(duì)于大于1的個(gè)體隨機(jī)選取一個(gè)或多個(gè)基因段的表現(xiàn)型減去其差值或上限值,直到滿足式(12)。這樣能夠在進(jìn)行基因組合和調(diào)整的過(guò)程中保留父代較多的優(yōu)良基因片段。在式(14)中,C表示交叉調(diào)整操作,交叉率為c,c∈[0,1], 當(dāng)隨機(jī)概率小于c時(shí),個(gè)體才進(jìn)行交叉操作。x為第d代的pi和pj交叉后的個(gè)體
x(d)=C(pi(d),pj(d))
(14)
(4)變異:變異是遺傳算法的輔助性操作,可以豐富子代以增加新的信息、擴(kuò)大搜索空間避免陷入局部最優(yōu)。在滿足式(12)的前提下,在豐富子代的同時(shí)使父代的基因片段產(chǎn)生較少的改變,變異操作隨機(jī)選擇一個(gè)交叉后個(gè)體的兩個(gè)基因片段,并交換兩個(gè)基因片段的位置。在式(15)中,M表示變異操作函數(shù),變異率為m,m∈[0,1]。 算法過(guò)程每次產(chǎn)生一個(gè)概率數(shù),如果隨機(jī)概率數(shù)小于變異率,個(gè)體則進(jìn)行變異,否則不進(jìn)行。p是變異后的個(gè)體,用于計(jì)算下一代的適應(yīng)度
p(d+1)=M(x(d))
(15)
為了評(píng)估本文的方法,使用第2節(jié)中分析的谷歌trace和阿里云trace進(jìn)行實(shí)驗(yàn)。對(duì)于谷歌trace,按照第3節(jié)中數(shù)據(jù)預(yù)處理器的方法預(yù)處理數(shù)據(jù),提取一個(gè)月前20天的數(shù)據(jù)作為訓(xùn)練集,第21天到26天的數(shù)據(jù)做驗(yàn)證集,第27天到最后的數(shù)據(jù)做測(cè)試集。對(duì)于阿里云trace,提取第1天到第6天的數(shù)據(jù)作為訓(xùn)練集,第7天的數(shù)據(jù)作為驗(yàn)證集,第8天的數(shù)據(jù)作為測(cè)試集。本文先使用LSTM-Z預(yù)測(cè)方法對(duì)主機(jī)負(fù)載預(yù)測(cè)做了相關(guān)實(shí)驗(yàn),將LSTM-Z與LSTM[3]、INDRNN[9]以及文獻(xiàn)中的BC-LSTM[17]進(jìn)行對(duì)比實(shí)驗(yàn)。使用4.1節(jié)所述3個(gè)指標(biāo)客觀評(píng)估本文的方法,得出實(shí)驗(yàn)結(jié)果并進(jìn)行對(duì)比,最后基于遺傳算法做了進(jìn)一步的優(yōu)化實(shí)驗(yàn)。實(shí)驗(yàn)部分本文采用了Keras2.1.5,Tensorflow1.15.0深度學(xué)習(xí)框架,使用Python3.7進(jìn)行編程,IDE集成開(kāi)發(fā)環(huán)境為PyCharm。硬件環(huán)境為6核CPU(Core i5-10400F @ 2.90 GHz),內(nèi)存容量為16 G(威剛DDR4 2666 MHz)和Nvidia GeForce GTX 1050Ti(4 GB)。
為了客觀評(píng)價(jià)實(shí)驗(yàn)結(jié)果,本文使用回歸任務(wù)評(píng)估指標(biāo)均方根誤差(root mean square error,RMSE)、平均絕對(duì)誤差(mean absolute error,MAE)和平均絕對(duì)百分比誤差(mean absolute percentage error,MAPE)評(píng)估實(shí)驗(yàn)方法的性能。RMSE的主要目標(biāo)是衡量預(yù)測(cè)值與真實(shí)值之間的偏差,受異常值影響大,經(jīng)常作為機(jī)器學(xué)習(xí)預(yù)測(cè)結(jié)果的評(píng)價(jià)標(biāo)準(zhǔn),其計(jì)算過(guò)程如式(16)所示,其中,oi表示預(yù)測(cè)值,yi表示真實(shí)值,n為預(yù)測(cè)值數(shù)量。MAE具有較好的魯棒性,其計(jì)算原理如式(17)所示。MAPE跟MAE很相似,不同之處在于誤差還要與真實(shí)值做比較,能較為準(zhǔn)確展現(xiàn)出預(yù)測(cè)值與真實(shí)值的相對(duì)誤差,其計(jì)算過(guò)程如式(10)所示
(16)
(17)
云平臺(tái)主機(jī)負(fù)載的準(zhǔn)確預(yù)測(cè)對(duì)于提高資源利用率,降低數(shù)據(jù)中心成本和確保作業(yè)調(diào)度至關(guān)重要。主機(jī)負(fù)載預(yù)測(cè)首先要做的工作是短期預(yù)測(cè),能較為準(zhǔn)確地預(yù)測(cè)主機(jī)未來(lái)一步5分鐘的CPU平均負(fù)載具有非常重要的意義,因?yàn)橹鳈C(jī)CPU的平均負(fù)載水平是衡量云平臺(tái)主機(jī)集群能耗的一個(gè)非常重要的指標(biāo)。在主機(jī)負(fù)載預(yù)測(cè)實(shí)驗(yàn)中,通過(guò)控制變量觀察模型的收斂程度、誤差值和運(yùn)行時(shí)間,分別確定出重要的超參數(shù)epochs=50,batch_size=130,hidden_size=128,LSTM-Z的方法中單獨(dú)設(shè)置了zone_out_c=0.8,zone_out_h=0.01,使用Adam做為優(yōu)化器。實(shí)驗(yàn)初步探索了滑動(dòng)窗口的長(zhǎng)度,一方面要考慮主機(jī)負(fù)載數(shù)據(jù)的時(shí)間相關(guān)性,另一方面也要考慮運(yùn)行性能。由于負(fù)載數(shù)據(jù)具有的波動(dòng)性和周期性,滑動(dòng)窗口的大小對(duì)不同數(shù)據(jù)集預(yù)測(cè)結(jié)果也有影響。結(jié)合多次實(shí)驗(yàn)綜合考慮后,對(duì)這部分實(shí)驗(yàn)的滑動(dòng)窗口大小設(shè)置為30。
從圖7可以看出,LSTM-Z在訓(xùn)練集和驗(yàn)證集上的收斂效果明顯優(yōu)于其它對(duì)比方法且表現(xiàn)出更加穩(wěn)定的性能,這主要是因?yàn)長(zhǎng)STM-Z在進(jìn)行正則化機(jī)制時(shí)并沒(méi)有完全刪除隱藏單元,隨機(jī)地使一些隱藏層神經(jīng)單元保持其先前狀態(tài)的值,提高LSTM對(duì)隱藏狀態(tài)中擾動(dòng)的魯棒性,更好地適應(yīng)主機(jī)負(fù)載這種具有較大波動(dòng)性特點(diǎn)的預(yù)測(cè)。由表1可知,在多個(gè)對(duì)比實(shí)驗(yàn)中LSTM-Z模型取得了最好的預(yù)測(cè)效果;與LSTM模型相比,在谷歌trace中MAE、MAPE和RMSE分別降低了8.31%、17.47%和4.51%,在阿里云trace中MAE、MAPE和RMSE分別降低了8.01%、5.24%和8.73%。

表1 測(cè)試集上實(shí)驗(yàn)指標(biāo)的比較

圖7 谷歌trace實(shí)驗(yàn)中l(wèi)oss值的變化情況
在云平臺(tái)短期主機(jī)負(fù)載預(yù)測(cè)中,預(yù)測(cè)算法所需時(shí)間也是評(píng)估模型性能的一個(gè)重要指標(biāo),在線訓(xùn)練和預(yù)測(cè)要求能對(duì)未來(lái)的主機(jī)負(fù)載變化做出及時(shí)的響應(yīng),算法所消耗的時(shí)間會(huì)影響云平臺(tái)資源的調(diào)度。結(jié)合表1和表2可以看出,基于LSTM和INDRNN的預(yù)測(cè)模型雖然耗時(shí)比較短,但是預(yù)測(cè)精度相對(duì)來(lái)說(shuō)并不高。基于BC-LSTM的主機(jī)負(fù)載預(yù)測(cè)方法對(duì)之前的工作進(jìn)行了進(jìn)一步的改善,但在不同負(fù)載數(shù)據(jù)中表現(xiàn)出性能的不穩(wěn)定性,同時(shí)也增加了時(shí)間的消耗。改進(jìn)門控的LSTM-Z模型顯得更加輕量級(jí)并且預(yù)測(cè)誤差更小,預(yù)測(cè)時(shí)間較短,具有更好的適用性。

表2 算法執(zhí)行時(shí)間對(duì)比/ms
為了驗(yàn)證本文方法在多步預(yù)測(cè)的有效性,分別進(jìn)行了時(shí)間步長(zhǎng)為3和6的實(shí)驗(yàn),即預(yù)測(cè)未來(lái)15分鐘和30分鐘的主機(jī)負(fù)載變化情況。從圖8兩個(gè)數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果可以看出,隨著預(yù)測(cè)時(shí)間步的增長(zhǎng),實(shí)驗(yàn)中預(yù)測(cè)模型的預(yù)測(cè)誤差都在逐漸增大,但是LSTM-Z的預(yù)測(cè)性能均優(yōu)于前三者對(duì)比的模型。這是因?yàn)轭A(yù)測(cè)未來(lái)更長(zhǎng)的時(shí)間,云平臺(tái)的不確定性因素更大,使得主機(jī)負(fù)載變化模式更加難以被學(xué)習(xí)。

圖8 云平臺(tái)多步預(yù)測(cè)的MAPE對(duì)比
LSTM-Z使用隨機(jī)機(jī)制強(qiáng)制一些隱藏單元保持其先前狀態(tài)的值,提高了對(duì)隱藏狀態(tài)擾動(dòng)的魯棒性和增強(qiáng)了模型的泛化能力。在谷歌trace的多步預(yù)測(cè)實(shí)驗(yàn)中,與LSTM、INDRNN和BC-LSTM相比,預(yù)測(cè)未來(lái)3步時(shí),MAPE分別降低了8.95%、16.56%、12.83%,預(yù)測(cè)未來(lái)6步時(shí),MAPE分別降低了4.72%、10.42%、9.64%。在阿里云trace的多步預(yù)測(cè)實(shí)驗(yàn)中,與LSTM、INDRNN和BC-LSTM相比,預(yù)測(cè)未來(lái)3步時(shí),MAPE分別降低了11.66%、14.38%、5.13%,預(yù)測(cè)未來(lái)6步時(shí),MAPE分別降低了9.06%、12.80%、2.33%。
在實(shí)驗(yàn)中,歷史窗口的大小對(duì)預(yù)測(cè)結(jié)果產(chǎn)生了一定的影響,主機(jī)負(fù)載數(shù)據(jù)的預(yù)測(cè)值受鄰近歷史值的影響,不同歷史值其影響大小不同。本文基于歷史窗口使用遺傳算法對(duì)模型做了進(jìn)一步優(yōu)化以達(dá)到較好的預(yù)測(cè)性能。在進(jìn)一步改進(jìn)的模型方法中,本文在單步預(yù)測(cè)的基礎(chǔ)上做了進(jìn)一步實(shí)驗(yàn)。在實(shí)驗(yàn)中,設(shè)置種群大小為48,交叉率為0.5,變異率為0.05。在阿里云trace的預(yù)測(cè)實(shí)驗(yàn)中MAPE為0.1221,在LSTM-Z實(shí)驗(yàn)?zāi)P?MAPE=0.1265)和LSTM實(shí)驗(yàn)?zāi)P?MAPE=0.1335)的基礎(chǔ)上,MAPE降低了3.48%和8.54%;在谷歌trace的預(yù)測(cè)實(shí)驗(yàn)中MAPE為0.1798,在LSTM-Z實(shí)驗(yàn)?zāi)P?MAPE=0.1852)和LSTM實(shí)驗(yàn)?zāi)P?MAPE=0.2244)的基礎(chǔ)上,MAPE降低了2.92%和19.88%。在實(shí)驗(yàn)結(jié)果的前200個(gè)時(shí)間戳中,真實(shí)值與預(yù)測(cè)值隨著時(shí)間的變化如圖9所示,其中橫坐標(biāo)表示觀測(cè)的時(shí)間戳,縱坐標(biāo)表示該時(shí)間戳下主機(jī)CPU的利用率。從圖中可以看出,不管是CPU利用率序列的波峰還是波谷的預(yù)測(cè)情況,本文方法都能都能保持較優(yōu)的預(yù)測(cè)性能,預(yù)測(cè)值曲線與真實(shí)值曲線都能較好的匹配。與本文方法相比,基于LSTM的預(yù)測(cè)在CPU負(fù)載序列波動(dòng)性更大的點(diǎn)上存在較大的偏差,特別是對(duì)峰值的預(yù)測(cè)效果稍差。

圖9 谷歌trace實(shí)驗(yàn)中預(yù)測(cè)結(jié)果對(duì)比
綜上所述,本文提出的方法比以往的方法在主機(jī)負(fù)載預(yù)測(cè)方面性能有所改善,能夠更好地適應(yīng)主機(jī)負(fù)載這種具有非線性和突變性的數(shù)據(jù)特點(diǎn)。這主要因?yàn)榛赯oneout技術(shù)改進(jìn)的方法應(yīng)用到了LSTM的門控結(jié)構(gòu),在一定程度上保留了通過(guò)神經(jīng)元前向和后向的信息流,這有助于提高模型的泛化能力,增強(qiáng)捕獲主機(jī)負(fù)載中短期突變信息的能力。將遺傳算法和滑動(dòng)窗口結(jié)合能夠更好地表示歷史窗口的數(shù)據(jù)依賴關(guān)系,然后作為預(yù)測(cè)模型的輸入從而降低了預(yù)測(cè)誤差,進(jìn)一步優(yōu)化了預(yù)測(cè)模型。
本文對(duì)云平臺(tái)數(shù)據(jù)進(jìn)行了分析,闡述了現(xiàn)在主流云平臺(tái)需要進(jìn)行主機(jī)負(fù)載的迫切需要,并分析了云平臺(tái)主機(jī)負(fù)載CPU利用率的一些特性。為了使預(yù)測(cè)模型能夠更好地適應(yīng)主機(jī)負(fù)載數(shù)據(jù)突變性和短期波動(dòng)性的特點(diǎn),本文設(shè)計(jì)并實(shí)現(xiàn)了基于Zoneout技術(shù)的LSTM主機(jī)負(fù)載預(yù)測(cè)方法,增強(qiáng)預(yù)測(cè)模型捕獲主機(jī)負(fù)載中短期突變的能力。為了更好地學(xué)習(xí)到歷史窗口的數(shù)據(jù)依賴關(guān)系,本文基于遺傳算法,通過(guò)迭代進(jìn)化探索歷史數(shù)據(jù)窗口的權(quán)重向量,從而進(jìn)一步提高模型的預(yù)測(cè)性能。實(shí)驗(yàn)結(jié)果表明,本文提出的方法比起以往的方法在主機(jī)負(fù)載預(yù)測(cè)性能方面有所改善。
隨著深度學(xué)習(xí)模型提取特征能力的不斷增強(qiáng),多源數(shù)據(jù)的挖掘與研究可作為下一步的研究工作。遺傳算法的搜索空間還可以考慮應(yīng)用在神經(jīng)網(wǎng)絡(luò)的超參數(shù)上,由于迭代次數(shù)和種群大小限制了遺傳算法的時(shí)間性能,在考慮基于遺傳算法改進(jìn)預(yù)測(cè)模型時(shí),應(yīng)該要基于預(yù)測(cè)的實(shí)際情況進(jìn)行。