【异常检测第二篇】异常检测与诊断模型之AutoPerf
一、 Address
来自于nips2019, Intel的一篇 面向于Performance Regression的anormaly detection and diagonsis的一篇paper
A Zero-Positive Learning Approach for Diagnosing Software Performance Regressions
地址:https://arxiv.org/pdf/1709.07536v4.pdf
二、 Introduction
2.1 software performance
2.2 存在的一些Challenges
异常的样本不容易获得,比较少,正常的更多(大多数异常检测问题都存在这个challenge)
通过code instrumentation的方式可能会对正在跑的program造成一些扰乱
2.3 两个很典型的Performance Regressions的例子
文中所说的 true sharing and false sharing大概的理解可以看图
其中false sharing会领导很大的performance degradation
三、 AutoPerf
本文提出了这样一个自动化的方法。
3.1 overview
三个主要的优势
3.2 数据收集
用PAPI去读取HWPCs值(都是和性能相关的一些硬件指标)
对应的一个sample是一个func执行得到的,包括HWPC值以及thread count,还有个差分以及归一化的过程,毕竟后面要做Deep learning,肯定是要normalize的
3.3 Diagnosing Performance Regressions
3.3.1 Autoencoder-based Training and Inference
这里对Zero-positive learning进行的说明,这里的positive指的就是anomalous主要就是用AE去学习non-anomalous的表征分布,之后看新的sample是否发生偏离,发生偏离的就是anomalous
具体输入为一个func的profiling, loss func为mse之后输入新的sample,经过AE得到对应的reconstruction error,大于某个阈值则为anomalous
3.3.2 Reconstruction Error 阈值机制
这个阈值影响很大,太大或者太小都不行的。
太大会少检测到很多的anomalous, 太小的话可能会把很多non-anomalous检测为anomalous
之后定义了这样的一个方式(写的很清楚,就是正态分布那一套的设计)
3.3.3 通过k-means扩展到更多的func
把训练集聚类成k个cluster
每个cluster里面包含的某个func大于其他的cluster,那这个 cluster代表的就是这个func
对于每个cluster都用一个AE进行训练build
对于一个new sample,找到对应于func属于的cluster训练的AE进行预测算reconstruction error即可
四、Experiments
实验做了三部分
诊断性能退化的能力 对比另外两个ML的方法
分析了聚类方法
做了一下量化分析、训练开销的实验说明
4.1 Setup
使用了三个公开的programs
4.2 诊断能力
进行对比,有7个benchmark programs 和三个真实的应用, 并且FP, FN的计算方式也做了具体说明
table中也说明了AutoPerf方法的优势,除了Boost和MySQL再FP有微小的值以外,其他都没有False的情况出现
并对 这两个real world存在FP值的programs作进一步的分析,画出ROC曲线, 可以看出依旧是该方法更好
4.3 聚类方法
图a中只用到了七个func, k=1时,为只用一个AE来对所有的func进行training, F1降至0.31, 之后用聚类方法进行聚类,并且每个cluster都用一个AE,F1升到(2->4)
图b,c主要展示的为:深色的为聚类之前的情况,每个func都用一个AE去训练,也就是有多少个func,就有多少个AE,浅色为聚类之后的情况,b和c主要想展示,再聚类之后f1只是微弱的降低,但是时间花费大大减少,主要体现高效。
4.4 error的阈值
对比了一下基本方法和UBL
4.5 训练开销
还有个对比图,总体百分比,除了个别其他都很低
更多精彩内容(请点击图片进行阅读)
公众号:AI蜗牛车
保持谦逊、保持自律、保持进步
个人微信
备注:昵称+学校/公司+方向
如果没有备注不拉群!
拉你进AI蜗牛车交流群