(四川幼兒師范高等??茖W校,四川 江油 621700)
在云計算環(huán)境下,彈性計算[1]能力使用戶按需使用計算資源成為了可能。按需分配計算資源可以有效提高計算資源的使用效率,降低用戶的使用成本。然而,應用的計算需求是處于不斷變化之中的,當低估應用未來的系統負載時,會因為計算能力欠缺無法保證可靠服務,乃至因為系統負載過大而造成宕機事故[2];當高估未來系統負載時,申請過多的計算資源往往會造成計算資源的浪費,增加企業(yè)運行成本[3]。準確預測出應用在未來一段時間內的系統負載成為彈性計算的重要一環(huán)。
時序數據[4]是應用運行過程中常見的數據形式,應用在單位時間內的執(zhí)行指令數、網絡連接數磁盤讀寫數、內存占用率、數據讀寫量等是常見時序數據,針對具體應用還可能會有在線用戶數、單位時間內交易數等指標。這些時序數據描述了應用在運行過程中的負載波動情況。不同應用的負載波動規(guī)律往往不是不同的,通過收集并分析應用運行時的負載時序數據可以挖掘出應用負載的波動變化規(guī)律并以此預測應用未來的負載情況。
時序預測方法有多種,比如自回歸移動平均 (autoregressive integrated moving average, ARIMA)[5]、多元線性回歸(multiple linear regression, MLR)[6]和BP神經網絡(back propagation neural network, BPNN)[7]。其中平穩(wěn)自回歸模型在應用時需要針對具體時間序列分析其平穩(wěn)性,并根據差分后平穩(wěn)性結論給出模型參數,在應用時需要太多人工介入,可用性差。多元線性回歸模型可以挖掘出多元時序間的線性關系,無法挖掘非線性關系,擬合誤差很大。BP神經網絡的預測算法提供了非線性擬合能力并避免了ARIMA模型需要太多人工介入分析的繁瑣,但由于BP神經網絡模型沒有記憶能力,無法解決時序預測中的長跨度依賴的問題。
近年來,深度學習技術的發(fā)展給時序數據預測提供了新的解決問題的思路和工具;深度學習模型借助其多層非線性映射層,能夠抽象出數據更深層次的潛在規(guī)律[8]。循環(huán)神經網絡(recurrent neural networks, RNN)引入了定向循環(huán),網絡會記憶之前的輸入信息并應用于當前的計算中,這就產生了時序的概念;長短期記憶網絡(long short-term memory, LSTM)[9]是RNN的一種,其解決了傳統RNN梯度消失、記憶跨度較短的問題;門控循環(huán)單元(gated recurrent unit, GRU)是 LSTM 的變種,其簡化了LSTM的門控方式,兩者在時序處理上不分伯仲。
本文針對彈性伸縮計算中的應用負載預測提出了使用三層LSTM隱層和一層BP層構成的神經網絡結構,使用從實驗室服務器上采集到的應用運行監(jiān)控數據訓練模型,并設計對比實驗比較其他時間序列預測模型的預測效果。實驗表明本文設計的神經網絡模型的預測誤差更小。
循環(huán)神經網絡(RNN)[12]在結構上與前饋神經網絡非常相似,但是RNN中隱藏層的反饋除了進入輸出端,還會進入到下一個時間結點的隱藏層,從而影響下一時間步的各個權重。
RNN網絡不同于BP神經網絡,其內部存在隱藏狀態(tài)h,內部狀態(tài)參與節(jié)點輸出值得計算,并根據輸入值和內部隱藏狀態(tài)更新隱藏狀態(tài)。隱藏狀態(tài)的出現使RNN具有了記憶能力,這意味著歷史輸入信息能夠影響后續(xù)的輸出結果。RNN的這種特性非常適合于處理具有前后關聯特征的時序數據。如圖1所示,左邊的圖是RNN結構的折疊圖,右邊是RNN結構展開圖。從圖中可以看出,在每個時間步t,每個神經元同時接收輸入層數據x(t)和前一個時間步隱藏層節(jié)點的輸出h(t)。
圖1 RNN結構圖
RNN在前向傳播的過程中,主要分為輸入層到隱藏層、隱藏層到輸出層兩部分。傳播過程為:
輸入層→隱藏層:
(1)
隱藏層→輸出層:
yt=f(c+Wyht)
(2)
其中:Wx和Wh分別表示輸入xt的權重和前一個時間步隱層輸出ht-1的權重;Wy是隱藏層輸出的權重。
循環(huán)神經網絡的計算過程雖然添加了上一時刻隱藏層的輸入,但是當步長過長時,后面的節(jié)點對前面時間節(jié)點的感知能力下降,即RNN存在的長期依賴問題。
長短期記憶網絡(LSTM)是RNN的一種,解決了普通RNN梯度消失的問題。LSTM神經元內部存在輸入門、忘記門、輸出門用來計算信息的重要程度,并據此對信息進行篩選。LSTM通過門限控制解決了傳統RNN的梯度消失問題[13],這樣就為構建大型LSTM網絡提供了可能。LSTM能夠挖掘時序數據中的長跨度關聯關系,是時序處理的理想模型。LSTM是建立在RNN基礎上的一種特殊類型的網絡結構,它的提出主要是未來克服RNN中存在的長期依賴導致梯度消失而設計的。LSTM 的核心是細胞(cell)的狀態(tài),而在LSTM元中內部設計了輸入門(Input gate)、輸出門(Output gate)和遺忘門(Forget gate),設計“門”的目的是清除或增加信息到細胞狀態(tài)中。LSTM的內部結構相比RNN更復雜,單個LSTM神經元的具體結構如圖2所示。
圖2 LSTM內存單元
為了更好地理解LSTM神經元的內部結構,首先對神經元內部的符號進行假設。本文假設h為LSTM單元的輸出,c為LSTM內存單元的值,x為輸入數據。LSTM單元的更新與前向傳播一樣,可以分為以下幾個步驟。
步驟1:首先,本文先計算當前時刻的輸入結點g(t),Wxg,Whg和Wcg分別是輸入數據和上一時刻LSTM 單元輸出的權值:
(3)
(4)
步驟2:計算輸入門的值i(t)。輸入門用來控制當前輸入數據對記憶單元狀態(tài)值的影響。所有門的計算受當前輸入數據x(t)和上一時刻LSTM單元輸出值h(t-1)影響。
(5)
(6)
步驟3:計算遺忘門的值f(t)。遺忘門主要用來控制歷史信息對當前記憶單元狀態(tài)值的影響,為記憶單元提供了重置的方式。
(7)
(8)
步驟4:計算當前時刻記憶單元的狀態(tài)值c(t)。記憶單元是整個LSTM神經元的核心結點。記憶單元的狀態(tài)更新主要由自身狀態(tài)c(t-1)和當前時刻的輸入結點的值g(t),并且利用乘法門通過輸入門和遺忘門分別對這兩部分因素進行調節(jié)。乘法門的目的是使LSTM存儲單元存儲和訪問時間較長的信息,從而減輕消失的梯度。
c(t)=f(t)?c(t-1)+i(t)?g(t)
(9)
其中:?表示逐點乘積。
步驟5:計算輸出門o(t)。輸出門用來控制記憶單元狀態(tài)值的輸出。
(10)
(11)
步驟6:最后計算LSTM單元的輸出。
h(t-1)=o(t)?tanh(c(t))
(12)
步驟7:更新當前序列索引預測輸出。
系統關鍵負載指標的預測模型如圖3所示。模型的輸入數據包括CPU、硬盤和網絡等負載指標數據,預測輸出的負載指標為cpu_usr, net_rcv_pkts, disk_all_tps。預測模型分為歸一化層,神經網絡層,和逆歸一化層。歸一化層將各個參數數據轉化到[0,1]區(qū)間上,逆歸一化層將預測所得數據映射到數據原有值域。提供預測功能的神經網絡層有分為兩部分,LSTM網絡層和BP全連接層;LSTM網絡層提供對時間序列的特征提取、記憶和特征組合的功能;BP全連接層將最后一層LSTM網絡輸出的特征向量轉化成為輸出結果。
圖3 關鍵負載指標預測模型示意圖
(13)
由于系統負載指標在數值上不在同一個值域,將數據進行歸一化能能夠保證訓練過程的穩(wěn)定性,更容易訓練得到最優(yōu)解。歸一化層和逆歸一化層完成參數在值域上的轉化操作。
長短期記憶網絡層接受歸一化后的時序數據并對時序數據進行特征提取并可以通過其記憶功能在內部狀態(tài)向量中保留部分和歷史輸入相關的信息并最終向全連接層提供和未來關鍵負載指標相關的特征向量。在本模型中LSTM網絡層有三層,最下層網絡接受歸一化的多元時序片段,對其進行特征變換和時序中關鍵信息的記憶功能,生成的特征向量提供給上層LSTM網絡。上層的LSTM網絡對下層生成的特征向量進行特征組合、變換、記憶、忘記生成更高一層的特征向量,上層LSTM網絡層能夠從更大維度上描述時序的特征。上層LSTM網絡輸出的向量的是下層LSTM網絡輸出特征向量的組合。由于高層神經網絡往往存在梯度消失、梯度爆炸、訓練復雜度過于復雜的問題,LSTM的層數不是越多越好,本模型根據模型訓練的實際效果使用了三層LSTM網絡。由于上層LSTM層所輸出的特征向量是下層LSTM層輸出特征向量的組合,上層所能表達的特征數多于下層,因此三層LSTM層中的神經元數目從下到上是遞增的。這樣保證了上層LSTM層能夠提取出足夠多的特征而又不會因為模型過于復雜造成難以訓練的問題。
全連接層位于預測模型的最頂層,完成把最后一層LSTM層產生的特征向量映射為輸出向量的功能。由于LSTM層也能夠提供分線性函數變換的功能,在該模型中使用單層全連接網絡已經能夠滿足需求。該層沒有選擇使用LSTM網絡層,是因為LSTM為了解決不飽和記憶的問題,門限控制的激活函數傾向于輸出0或者1,即完全忘記或者完全記住,這樣就會造成輸出結果的連續(xù)性變差;另一方面,由于最頂層的LSTM節(jié)點個數很少,所能夠提供的記憶能力十分有限;再者,LSTM網絡的結構比全連接層要復雜很多,訓練時將更加困難。
神經網絡的損失函數為均方誤差(mean-square error, MSE)[14]。神經網絡的優(yōu)化方法有很多,如SGD[15]、Adagrad[16]、AdaDelta[17]、Adam[18]等。其中Adam算法整體表現優(yōu)異,在實際應用中效果良好。
使用實際服務器中應用運行負載指標的時序序列訓練模型并分析模型的訓練和預測誤差。實驗中,首先使用不同模型參數分析擬合方均根差,找到相對合理的模型;之后對比其它時序預測模型和本論文中設計的模型的預測效果,驗證模型的優(yōu)點。
超參數選取作為設計神經網絡模型的重要一環(huán),對模型的實際輸出效果有重大的影響。神經網絡的層數、每層中的節(jié)點類型、節(jié)點個數是影響神經性能的幾個重要參數。
圖4所示的為應用在運行過程中,歸一化后的對不同硬件資源的消耗情況。觀察改圖不難發(fā)現,cpu_user和cpu_sys存在周期性波動的情況,而且兩者存在著某種“同步”變化,這就是說這兩者之間存在著數值上的關聯性。實驗中,預測cpu_user,net_rcv_ pkts, disk_all_tps三個指標的未來8個時間單位的負載需求。
圖4 關鍵負載指標時序數據
在表1中的網絡參數一欄中從左至右的數字部分表示神經網絡層從下至上各層的節(jié)點個數,數字后面的L代表該層為長短期記憶網絡層,D代表該層為全連接層。分析表中的數據可知:
1)模型最后一層用全連接層會獲得比較好的擬合效果;
2)使用三層長短期記憶網絡層取到比較好的效果;
3)當模型中的長短期記憶網絡層中的節(jié)點數從底層到上層逐漸增加效果優(yōu)于節(jié)點數逐漸減少的模型。
對比不同參數條件下的擬合方均根差、模型復雜度選擇預測模型中的網絡類型和網絡節(jié)點數量,設計了如圖3中的關鍵負載預測指標模型。
表1 不同參數的模型擬合誤差
為了進一步驗證論文中設計神經網絡預測模型對時間序列的優(yōu)勢,使用不同時序預測模型進行對比。首先從易用性的角度排除了ARIMA模型,ARIMA模型由于需要具體分析時序的平穩(wěn)性,需要太多人工干預,單一參數的適用性太差。在實驗中具體比較了多元線性回歸(MLR)、BP神經網絡,將圖3中的LSTM替換為普通RNN和GRU,不斷調整參數達到最優(yōu)后和論文介紹的模型輸出結果進行對比,驗證模型的優(yōu)越性。
表2 不同模型實驗結果對比
由于沒有備激活函數,不具備擬合非線性函數的能力,只能挖掘輸出數據和輸入數據之間的線性關聯關系,在數據集上的表現不理想,誤差較大。BP神經網絡能夠擬合非線性函數,但由于其每次輸出的結果僅僅依賴于該次輸入數據,不能挖掘非輸入時序數據和輸出的關聯關系。RNN和GRU這兩種模型雖然具備一定的記憶能力,普通RNN存在梯度消失的問題,不能挖掘時間序列中長跨度依賴關系;GRU是LSTM的簡化版本,在很多問題上兩者不相伯仲,實驗結果表明,該模型稍遜于LSTM,這是由于GRU模型在訓練過程中抖動比較嚴重,而LSTM表現穩(wěn)定,損失保持相對穩(wěn)定下降。
本文給出了基于LSTM循環(huán)神經網絡的應用運行關鍵負載指標的預測模型,并設計了相關實驗比較了其它預測模型的預測效果。實驗結果表明,本論文提出的基于LSTM的神經網絡模型的預測效果更優(yōu),精度更高。論文初步驗證了應用運行負載指標日志并在線預測未來應用關鍵負載指標的可行性,可以為彈性計算根據預測負載調整集群容量提供參考。