古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。

转·百度智能磁盘故障预测

大数据与AI admin 250℃ 0评论

磁盘故障预测是业界可谓是经久不衰的热门话题,其实除了百度、国内的腾讯、阿里、奇虎360、国外的IBM都做过磁盘故障预测的研究。

百度于2014年与南开大学联合发布了一篇论文《Proactive Drive Failure Prediction for Large ScaleStorage Systems》,文中分别使用了SVM和BP-神经网络的方式进行故障预测,达到了95%的检出率;后续2015年于IEEE发布了论文《Hard Drive Failure Prediction Using Big Data》,使用大数据分方法构建的HDoctor系统实现了97.82%的检出率以及0.3%的误告率。

两篇论文的Authors好像是完全无关的两拨人,而且使用的方式也大相径庭,鉴于后者的准度更高,所以本文将聚焦于后者。(两篇文章的数据源都是百度公开的生产数据,并在实验室中进行效果验证)

技术背景:

所有的磁盘监控数据都来源于SMART(Self-Monitoring, Analysis and Reporting Technology ),厂商设计每块磁盘通过SMART进行自我监控,一旦发生阈值越界就会触发告警。然而,根据文献统计到的数据,其当误告率为千分之一的时候检出率仅为3-10%,由此可见基于厂商基于设计规则制定的磁盘异常检测效果非常差(这个放到光模块领域也是一样的)。

Hdoctor采集了百度数据中心220,022块磁盘,74,477,717 条记录作为训练样本数据,其中包括5,207块坏盘数据。

问题定义:对于GOOD/bad instances的界定

在开展预测工作之前,必须对目标问题进行界定,即确认什么情况属于预测成功,什么情况下不是。

在磁盘故障领域,有多达30%的磁盘告警是根因不在磁盘本身的,如操作系统的文件系统、数据一致性、无效IO命令告警等,属于误告警false failures,这部分被排除在预测的目标问题之外。同时在百度的实际运营中,可能是为了成本考虑,不会对这部分“问题”盘进行处理,而是等到别的确定性故障发生。

如果一块盘在120小时内发生故障则视为故障(bad instances),否则为正常(good instances)。

模型设计:

HDoctor采用了逻辑回归模型(logistic regression)对预测问题进行建模,目标函数如下:

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6d8098.png

第一项为loss function,用来衡量当训练出现偏差时的损失,第二项regularization term,用来对模型空间进行限制,从而得到一个更“简单”的模型,需要最小化目标函数得出最优解。

HDoctor使用Orthant-Wise Limitedmemory Quasi-Newton (OWLQN) 算法解决该线性回归问题,感兴趣的童鞋可以深入百度/Google一下。

特征设计:

SMART提供了多达253种指标,但并非所有的指标都合适用于预测,数据(特征features)的选取/预处理是机器学习算法能够否收到良好效果的关键,HDoctor选取了22个作为模型的输入,这里不妨深入看下:

Attribute ID Attribute Name

  • 1 Raw Read Error Rate // Raw Read Error Rate(底层数据读取错误率),转为CRC 错误率,做了归一化(是根据磁盘大小做分母归一?)
  • 2 Throughput Performance //IO吞吐量,做了归一化
  • 3 Spin Up Time //主磁头的启动时间
  • 4 Start Stop Count //电机启停次数
  • 5 Reallocated Sector Ct // 重新映射扇区计数
  • 7 Seek Error Rate //自检错误率
  • 8 Seek Time Performance //寻道时间
  • 9 Power On Hours //启用时间,做了归一化
  • 10 Spin Retry Count //电机起转重试,理想情况应该为0,非0表示电机或者控制芯片可能存在问题
  • 11 Calibration Retry Count //校准重试计数
  • 12 Power Cycle Count //通电周期计数的数据值表示了硬盘通电/断电的次数,即电源开关次数的累计,新硬盘通常只有几次。
  • 184 End-to-End Error //点到点错误检测计数,(看的是大数据思想:人看不出关联性并不代表没有,需要通过算法发现。
  • 187 Reported Uncorrect // Reported_Uncorrect 无法恢复的错误,事件
  • 188 Command Timeout //指令超时计数,事件
  • 189 High Fly Writes //如果磁头的飞行高度出现偏差,写入操作就会停止,然后尝试重新写入或者换一个位置写入。这种持续的监测过程提高了写入数据的可靠性,同时也降低了读取错误率。这一项的数据值就统计了写入时磁头飞行高度出现偏差的次数。事件
  • 191 G-Sense Error Rate //这一项的数据值记录了硬盘受到机械冲击导致出错的频度。。事件
  • 192 Power-Off Retract Count //当计算机关机或意外断电时,硬盘的磁头都要返回停靠区,不能停留在盘片的数据区里。正常关机时电源会给硬盘一个通知,即Standby Immediate,就是说主机要求将缓存数据写入硬盘,然后就准备关机断电了(休眠、待机也是如此);意外断电则表示硬盘在未收到关机通知时就失电,此时磁头会自动复位,迅速离开盘片。
  • 193 Load Cycle Count //通电周期计数
  • 194 Temperature Celsius //温度
  • 195 Hardware ECC Recovered //ECC恢复计数
  • 197 Current Pending Sector //这个参数的数据表示了“不稳定的”扇区数,即等待被映射的扇区(也称“被挂起的扇区”)数量。如果不稳定的扇区随后被读写成功,该扇区就不再列入等待范围,数据值就会下降。
  • 198 Offline Uncorrectable //报告给操作系统的无法通过硬件ECC校正的错误。如果数据值不为零,就应该备份硬盘上的数据了。

注:斜体的Attributes代表使用的是SMART的原始RAW数据(15个),否则对数据都做了归一化处理(7个)。同时入选的特征数量并非越多越好,因为容易产生过拟合问题。

默认情况下Attributes是在某一时间点的快照,是一个采样点,而通过对Attributes进行细致观察,发现某些指标的前几个连续周期的值与故障有相关性,因此HDoctor也采用了一些时间序列化的Attributes,如下:

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6d890a.jpg

可见部分指标的时间序列在故障前存在必然变化。

为了提前识别状态变化啊,HDoctor用最小二乘平方估计对曲线做拟合估计,通过计算斜率,如果斜率符合陡降的特性则变化为一个和SMART 产生的一样的Attributes,能通过特征工程预测出来。定义Y为将要产生的Attributes的值,X为时间:

a0 + a1X

a1为斜率,a0为截距,可用切线微分来推导斜率:

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6d914a.jpg

据此构建了6个时间序列特征。

特征工程:处理流程

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6d9942.jpg

特征数据的处理流程如上图:

归一化Normalization:SMART产生的数据五花八门,其取值可见也不尽相同,为了后续特征模型建模后方便地识别异常(告警),必须对attributes 进行归一化处理,规划化空间为[−1, 1]。

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6da1a4.jpg

这个函数并非常见的最大最小值归一化,而应该是对数归一化方法,sign为符号函数,logθ

为取对数,对于众多归一化的Attributes,θ取值于1.071-1.078。

特征离散化Feature Discretization: SMART产生的数据通常是非线性的,非线性数据更加接近于实际,但是却不利于线性逻辑回归模型(linear logistic regression model)分析,因为无法获取较好的收敛。离散化也就是把原来的真实值分段,转化成一个取值为0或1的向量。原始值落在某个段里,向量中此段对应的元素就为1,否则为0。这里举个简单的例子帮助理解:

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6da956.jpg

特征整合Feature Combination:通过以往的文献及数据分析的验证,发现SMART的Attributes之间是有相关性的,HDoctor将22个Attributes划分为三类   ,如下:

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6dc97d.jpg

HDoctor通过Correlation达成的分类来实现指标之间制衡,比如出现同类指标之间互相矛盾的异常则不会报出预测异常的结果,而只有满足特定条件才预测将要出现故障。文中提到通过这种方式HDoctor获取了较大的准度提升。

HDoctor:整体架构

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6dd18a.jpg

HDoctor定期采集磁盘的SMART监控数据并通过特征工程处理后输入预测模型(逻辑回归)。逻辑回归模型本质上是分类模型,会根据每一项Attribute综合进行分类判定磁盘有无故障的概率,如果判定为故障盘,那么Detector会对磁盘进行自动化的深度硬件检测,如果证实为误告,HDoctor会将此磁盘的预测状态标记为正常,用于后续的预测的调优。而对于证实为故障的磁盘,则自动调用修复程序。

算法效果验证:

从下图可见,大数据的作用,数据量越大效果越好,当使用74,477,717的全部(红色)的使用1/4096(蓝色)之间的准度差异是十分巨大的。

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6dd969.jpg

时间序列Attribute的效果,interval越小越好,没有时间序列作为输入效果最差,如图:

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6de2ba.jpg

综合上述几种数据预处理方式的效果提升:

在误告率限制为0.3%的条件下,经过特征的归一化和离散化,特征的个数由1,898增加至2,182(这里也许会有疑问,SMART也就最多百个Attributes,为啥会变出数千个特征?这个可参考文中的参考文献5-9),同时检出率也从73.46%上升至91.35%。加入时间序列指标,特征的个数增加至3,692,检出率上升至95.64%。最后采用特征整合后特征的个数增加至215,224,检出率上升至97.82%。如下图:

http://image.hw3static.com/hi/staticimages/hi3msg/images/2018/0307/10/5a9f54a6debc5.jpg

后记:参看了几篇国内相关的磁盘预测的论文,有点遗憾,基本都是学术界在写的,聚焦大都是基于百度公开数据的建模评估,玩的基本是算法的选择论证和调优,而基于工业界的实战太少。之所以选取这篇论文进行解读,也部分是因为其作者是百度公司的人,但是文中也为公布实验室以外的成果,期待后续论文能够看到真实的实践结果。

其他:

  • Proactive Drive Failure Prediction for Large ScaleStorage Systems 这篇文章的数据集是很完美的,坏盘的比例很大,所以论文的效果不错,但是现实中磁盘坏盘率是很低的,backblaze公开的数据集大概1万个里只有1个坏的。
  • 百度的这个归一化貌似有问题,对数归一化怎么处理值为0的情况,取log之后就无穷大了,而实际中0值特别多。
  • SMART也就最多百个Attributes,为啥会变出数千个特征?对时间序列进行提取,可以生成更多的特征

转载请注明:北凉柿子 » 转·百度智能磁盘故障预测

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址