喬旭坤,李 順,李 君,吳 鑫,茅智慧
(浙江萬里學(xué)院,浙江 寧波 315100)
隨著云計算和大數(shù)據(jù)時代的來臨,數(shù)據(jù)量劇增,存儲系統(tǒng)的重要性更為凸顯。磁盤是云存儲和數(shù)據(jù)中心等存儲系統(tǒng)的核心,超過90%的數(shù)據(jù)存儲在磁盤,磁盤故障是最頻繁出現(xiàn)(約占80%[1]),也是最為嚴(yán)重的硬件故障[2]。雖然單個磁盤故障發(fā)生概率較低,但對于磁盤基數(shù)大的存儲系統(tǒng)則帶來很大影響。騰訊公司報告磁盤月故障率約為0.21%,超過5年服務(wù)期的磁盤月故障率達到0.7%;Google數(shù)據(jù)中心4~6年期的數(shù)據(jù)統(tǒng)計表明有20%~57%的磁盤至少有一個扇區(qū)損壞[3]。磁盤故障不僅造成其上運行的業(yè)務(wù)中斷從而降低用戶滿意度,而且存儲在磁盤上的大量數(shù)據(jù)將隨著磁盤損壞而永久丟失,給企業(yè)和個人帶來不可估量的損失,阻礙了大數(shù)據(jù)、云計算技術(shù)的廣泛推廣和應(yīng)用。若能對磁盤故障和磁盤壽命進行有效及時的預(yù)測,適時做好磁盤的更換或者維護,將會在保障數(shù)據(jù)安全、防止數(shù)據(jù)丟失、挽救重大數(shù)據(jù)損失帶來的負(fù)面效應(yīng)以及降低數(shù)據(jù)中心等存儲系統(tǒng)運營成本等方面起到積極的作用。因此,磁盤故障預(yù)測具有非常重要的應(yīng)用價值和理論研究價值,成為存儲系統(tǒng)的研究熱點。
目前檢測磁盤的健康狀態(tài)主要有三種方法。一是利用加速度傳感器和聲發(fā)射傳感器等外部傳感器來監(jiān)測磁盤運行中振動信號的演變[4],但把傳感器安在磁盤外部無法有效得到磁盤退化信息,而安裝在內(nèi)部則會破壞磁盤結(jié)構(gòu)并增加物理尺寸。二是利用存儲系統(tǒng)的日志文件,由存儲系統(tǒng)中軟硬件的錯誤事件來判定磁盤健康狀態(tài),但由于缺乏閉環(huán)監(jiān)測無法提供磁盤性能的全面信息[5]。三是利用SMART(self-monitoring,analysis and reporting technology,自檢測、分析和報告技術(shù))提供的磁盤特征參數(shù),如磁盤加載/卸載周期數(shù)、磁盤啟動平均時間、磁頭尋道出錯率等,通過閾值檢測法實現(xiàn)無損的磁盤健康狀態(tài)監(jiān)測,并當(dāng)任意一個屬性值超過預(yù)設(shè)閾值時發(fā)出警報。該方法是目前磁盤廠商普遍采用的磁盤故障預(yù)測方法。但SMART閾值檢測法僅能實現(xiàn)簡單的磁盤故障評測,在達到0.1%誤判率FAR(false alarm rate,好盤被誤報為壞盤的比例)時,其故障檢測率FDR(failure detection rate,故障磁盤中被準(zhǔn)確檢出的比例)只有3%~10%[6],無法滿足用戶實際需求。
統(tǒng)計學(xué)和機器學(xué)習(xí)的方法廣泛應(yīng)用在磁盤SMART數(shù)據(jù)集上進行故障預(yù)測。Hughes等[7]最早提出兩種統(tǒng)計方法以提高預(yù)測性能,在嚴(yán)重不均衡的數(shù)據(jù)集上取得60%的FDR和0.5%的FAR。Wang Yu等[8]基于異常檢測提出了一種基于滑動窗口的廣義似然比檢驗方法跟蹤磁盤異常,在均衡的小數(shù)據(jù)集上達到68%的FDR。除了統(tǒng)計方法,機器學(xué)習(xí)方法也大量應(yīng)用到磁盤故障預(yù)測中。Murray等[6]比較了多種機器學(xué)習(xí)方法,其中支持向量機(support vector machine,SVM)在FAR為零時獲得50.6%的FDR,相對于樸素貝葉斯等算法具有較好的預(yù)測性能。樹型樸素貝葉斯算法TAN[9]和隱馬爾可夫模型[10]被相繼提出以進一步提升FDR。早期的故障預(yù)測方法總體上預(yù)測精度不高。
隨著機器學(xué)習(xí)技術(shù)的引入,磁盤故障預(yù)測準(zhǔn)確性持續(xù)提升。Zhu Bingpeng等[11]采用反向傳播神經(jīng)網(wǎng)絡(luò)與改進SVM,取得了0.03%的故障誤報率和高達95%的故障檢測率,并且可提前15天預(yù)測出硬盤故障。Nicolas Aussel等[12]采用梯度提升決策樹算法模型,達到了94%的準(zhǔn)確度和67%的召回率,該方法誤報少,但是漏報占比大,而故障磁盤的漏報會帶來嚴(yán)重的后果。Yang Wenjun等[13]采用邏輯回歸(logistic regression,LR)算法建立硬盤故障預(yù)測模型,獲得0.3%的FAR和97.82%的FDR。Shen Jing等[14]在硬盤SMART數(shù)據(jù)上建立隨機森林(random forest,RF)算法模型,取得了97.67%的FDR和 0.017%的FAR。上述研究大部分都能在較低的誤報率前提下達到較好的磁盤故障檢測率,在檢測精度上有很大的進步,極大地提高了存儲系統(tǒng)的可靠性和可用性。國內(nèi)研究人員段茹[15]和謝偉睿[16]在磁盤故障預(yù)測方面也進行了積極的探索和研究。
為了對不同算法模型預(yù)測效果有統(tǒng)一的比較,該文搭建了基于機器學(xué)習(xí)的硬盤預(yù)測實驗平臺,并采用常用算法模型進行比較,這些算法模型都是基于機器學(xué)習(xí)Scikit-learn框架,均在Anaconda上運行,使用相同的數(shù)據(jù)集和性能評估指標(biāo)。
實驗采用公開數(shù)據(jù)集S.M.A.R.T.dataset,是希捷(Seagate)公司制造的型號為ST31000524NS的硬盤(記為B1數(shù)據(jù)集)。B1數(shù)據(jù)集包括23 395塊硬盤,其中22 962塊健康盤和433塊故障盤。健康盤數(shù)是故障盤的50多倍。每隔一小時采集一次,健康盤采集時長為一周,故障盤采集時長為20天,得到健康盤3 857 616條樣本數(shù),故障盤156 312條樣本數(shù)。從B1中抽出一份較小的數(shù)據(jù)集(記為B2數(shù)據(jù)集)以此來對比模型在不同數(shù)量級別樣本下的性能,B2數(shù)據(jù)共包含5 750塊硬盤,其中包括433塊故障盤和5 317塊健康盤,健康盤是故障盤的12倍多。故障盤有156 312條樣本,健康盤有892 264條樣本。數(shù)據(jù)集在公開的時候就已經(jīng)清洗、處理過,健康盤被標(biāo)記為“+1”,故障盤被標(biāo)記為“-1”,所有的屬性值經(jīng)過歸一化映射到區(qū)間[-1,+1]上。該文選取了11個特征屬性,加_raw標(biāo)記的特征為屬性的原始值,如表1所示。由于SMART技術(shù)提供的數(shù)據(jù)屬性值值域范圍大,采用公式(1)進行數(shù)據(jù)集歸一化,以避免偏向具有較大參數(shù)值的特征而影響預(yù)測精度:
(1)
其中,X是歸一化后的值,x是屬性的當(dāng)前值,xmax和xmin分別是數(shù)據(jù)集所對應(yīng)特征屬性的最大值和最小值。
把處理好的數(shù)據(jù)集按7∶3的比例隨機劃分為訓(xùn)練集和測試集。訓(xùn)練集和測試集是互斥的,測試集的樣本在訓(xùn)練集上未出現(xiàn)過。在訓(xùn)練集上訓(xùn)練出多種預(yù)測模型,用測試集作為新樣本來測試已經(jīng)訓(xùn)練好的預(yù)測模型。
表1 數(shù)據(jù)集對應(yīng)的屬性值
該硬盤故障預(yù)測模型都是基于機器學(xué)習(xí)算法,包括隨機森林(random forest,RF)、邏輯回歸(logistic regression,LR)、多層感知神經(jīng)網(wǎng)絡(luò)(multilayer perceptron - artificial neutral network,MLP-ANN)、決策樹(decision tree,DT)、樸素貝葉斯(naive Bayes,NB)、極端梯度提升樹(extreme gradient boosting,XGBoost)、梯度提升決策樹(gradient boosting decision tree,GBDT)以及AdaBoost算法。其中集成學(xué)習(xí)算法XGBoost、GBDT以及AdaBoost均采用CART(classification and regression tree)作為基學(xué)習(xí)器來建立模型,CART學(xué)習(xí)器屬于弱學(xué)習(xí)器,這三種集成學(xué)習(xí)算法分別對CART進行集成,集成后的模型在文中稱為XGBoost模型、GBDT模型和AdaBoost模型。
實驗平臺采用Windows7系統(tǒng),12 GB的RAM內(nèi)存,Intel(R)core(TM)i3-4160CPU@3.60 GHz的處理器。編程環(huán)境為Anaconda Navigator(spyder version 3.0.0)version 4.2.0,編程語言為Python語言,基于機器學(xué)習(xí)框架Scikit-learn version 0.19.0。
實驗中random_state均設(shè)為12,以便于后續(xù)驗證實驗結(jié)果,對于其他參數(shù)是采用經(jīng)驗調(diào)參的方式。同一個參數(shù)在不同算法模型中設(shè)置的不一定相同,如學(xué)習(xí)率在XGBoost模型中設(shè)置為0.01,而在AdaBoost模型中設(shè)為0.1。在GBDT模型和AdaBoost模型中n_estimators都設(shè)置為了200。具體的模型調(diào)參流程如圖1所示。
圖1 模型調(diào)參流程
為了進行合理的實驗結(jié)果對比,該文選擇統(tǒng)一的模型性能度量指標(biāo)即查準(zhǔn)率(precision)、查全率(recall)、故障檢測率(failure detection rate,F(xiàn)DR)、故障誤報率(false alarm rate,F(xiàn)AR)和ROC曲線(receiver operating characteristic curve)。
查準(zhǔn)率(precision)也叫準(zhǔn)確率,簡稱P,表示預(yù)測出的健康盤(故障盤)中實際為健康盤(故障盤)占所用測試健康盤(故障盤)的比例,具體定義見公式(2):
(2)
其中,真正例(true,positive,TP)表示真實為健康盤(故障盤)預(yù)測也為健康盤(故障盤),假正例(false,positive,F(xiàn)P)表示真實為健康盤(故障盤)預(yù)測為故障盤(健康盤)。
查全率(recall)也叫召回率,簡稱R,具體定義見公式(3):
(3)
其中,假反例(false,negative,F(xiàn)N)表示實際故障盤(健康盤)預(yù)測為健康盤(故障盤)。
故障檢測率(FDR)為故障盤的召回率,表示成功預(yù)測的故障盤占所用測試故障盤總數(shù)的比例。
故障誤報率(FAR)是把健康盤預(yù)測為故障盤的比例,如公式(4)所示:
(4)
其中,真反例(true,negative,TN)表示真實為健康盤預(yù)測仍為健康盤。
在樣本數(shù)較少的B2數(shù)據(jù)集上,各種算法模型的預(yù)測結(jié)果如表2所示,其中“+1”表示健康盤,“-1”表示故障盤。
表2 在B2數(shù)據(jù)下各種算法模型預(yù)測結(jié)果
P和R是precision和recall的簡稱,(-1)R和FDR相同,只是保留小數(shù)位不同。為了更直觀地對比預(yù)測效果,把上述各算法模型的預(yù)測結(jié)果以條形圖的形式呈現(xiàn)出來,如圖2和圖3所示。故障盤的查準(zhǔn)率和召回率如圖4所示。值得一提的是在P、R條形圖中,隨機森林算法模型的P、R指標(biāo)趨于“1”,但并沒有達到“1”。上述各算法模型的ROC曲線如圖5所示,可見在2%的誤報率情況下,所有算法模型的故障檢測率都達到了80%以上。
圖2 在B2數(shù)據(jù)下各種算法模型的FDR
圖3 在B2數(shù)據(jù)下各種算法模型的FAR
圖4 在B2數(shù)據(jù)下故障盤P和R
圖5 在B2數(shù)據(jù)下各種算法模型的ROC曲線
從上述結(jié)果可以看出,在數(shù)據(jù)集較小的情況下,RF算法模型預(yù)測精度最高,GBDT模型次之,DT模型預(yù)測效果略好于XGBoost模型,而XGBoost模型優(yōu)于AdaBoost模型,AdaBoost模型好于MLP-ANN模型。雖然MLP-ANN模型故障檢測率高于AdaBoost模型,但是故障誤報率也高很多,AdaBoost模型要優(yōu)于LR算法模型。NB算法模型故障檢測率最低,故障誤報率最高,是最差的算法模型。
各模型性能差異的原因主要是:RF算法是在集成學(xué)習(xí)算法Bagging基礎(chǔ)上的改進,Bagging算法是一種集成式并行運算算法,RF算法從所有屬性中隨機選擇m個屬性,選擇最佳分割屬性作為節(jié)點建立決策樹,從而有很好的分類性能。GBDT和AdaBoost算法是Boosting族的代表算法,AdaBoost算法在上一個基學(xué)習(xí)器的基礎(chǔ)上來學(xué)習(xí)優(yōu)化下一個基學(xué)習(xí)器的參數(shù),然后對這n個基學(xué)習(xí)器進行串行加權(quán)求和。GBDT算法集成了多棵CART回歸樹作為基學(xué)習(xí)器,隨著訓(xùn)練的輪數(shù)更新殘差并使殘差減少,從而提高預(yù)測的精度。XGBoost算法是對GBDT算法的改進,具有很好的預(yù)測性能。集成算法模型GBDT的預(yù)測效果優(yōu)于DT模型,而DT模型的預(yù)測結(jié)果要略好于XGBoost和Adaboost模型,這說明在某些條件下集成模型不一定比單個學(xué)習(xí)器預(yù)測效果好。DT算法利用樹狀結(jié)構(gòu)將整個特征空間進行劃分,最終判斷出樣本類別,雖然原理簡單,但預(yù)測精度高。MLP-ANN算法是一種簡單的人工神經(jīng)網(wǎng)絡(luò),可以根據(jù)分類問題的難易程度添加隱含層數(shù)以及神經(jīng)元的個數(shù),也取得了較好的結(jié)果。LR模型是線性分類器,非線性表達能力不足,實驗效果相對比較差。NB算法假設(shè)屬性之間相互獨立,但是該文的特征屬性之間具有一定的相關(guān)性,所以NB算法模型的預(yù)測效果不佳。
表3 在B1數(shù)據(jù)下各種算法模型預(yù)測結(jié)果
圖6 在B1和B2數(shù)據(jù)下的FDR
圖7 在B1和B2數(shù)據(jù)下的FAR
由圖6和圖7可見,各種算法模型在B1數(shù)據(jù)集和B2數(shù)據(jù)集上的預(yù)測結(jié)果走勢一致。特別地,RF和GBDT具有很高的FDR和很低的FAR,且?guī)缀醪皇軜颖緮?shù)據(jù)集大小影響。XGB算法的FAR雖然在B1和B2數(shù)據(jù)集的變化非常小,但是FDR變化較大。其他的算法模型預(yù)測結(jié)果FDR和FAR變化較大,說明模型對樣本集規(guī)模適應(yīng)性較弱。
結(jié)合RF和GBDT的特點可知以樹為基學(xué)習(xí)器的集成算法對數(shù)據(jù)的抗噪能力很強,然而以樹為基學(xué)習(xí)器并不是唯一決定因素,如XGBoost和Adaboost算法對數(shù)據(jù)適應(yīng)能力并不強,這也與算法其他因素相關(guān),如RF是以Bagging方式集成了決策樹的算法,而GBDT是以Boosting方式集成了回歸樹的算法,同時從上述在B2數(shù)據(jù)集的分析結(jié)果可知每個算法的運行原理不同,這也在一定程度上影響了算法對不同數(shù)據(jù)集的泛化能力。
通過建立比較系統(tǒng),對八種算法模型的預(yù)測效果對比可知:RF和GBDT硬盤故障預(yù)測模型相比其他算法模型具有很好的預(yù)測效果,都能在0.05%的FAR下達到93%以上的FDR,另外這兩個算法模型對不同規(guī)模樣本數(shù)據(jù)集的適應(yīng)性也很強。由于實驗只是針對同一公司的同一種型號硬盤進行測試,硬盤故障預(yù)測模型對于其他不同硬盤廠商的不同型號硬盤的預(yù)測效果尚不確定,下一步工作將會致力于研究預(yù)測精度高且具有更強泛化能力的硬盤故障預(yù)測模型。