RUAD:HPC系统中无监督的异常检测
# 摘要
现代高性能计算(HPC)系统的复杂性日益增加,需要引入自动化和数据驱动的方法,以支持系统管理员为增加系统可用性的努力。异常检测是改善可用性不可或缺的一部分,因为它减轻了系统管理员的负担,并减少了异常和解决方案之间的时间。但是,对当前的最新(SOA)检测方法进行了监督和半监督,因此它们需要具有异常的人体标签数据集 - 在生产 HPC 系统中收集通常是不切实际的。基于聚类的无监督异常检测方法,旨在减轻准确的异常数据的需求,到目前为止的性能差。在这项工作中,我们通过提出 RUAD 来克服这些局限性,RUAD 是一种新型的无监督异常检测模型。 Ruad 比当前的半监督和无监督的 SOA 方法取得了更好的结果。这是通过考虑数据中的时间依赖性以及在模型体系结构中包括长期术语记忆单元的实现。对拟议的方法进行了评估,以完整的 tier-0 系统历史记录(来自 Cineca,带有 980 个节点的 Marconi100)。 RUAD 在半监督训练中达到曲线(AUC)下的面积为 0.763,在无监督的训练中达到了 0.767 的 AUC,这改善了 SOA 方法,在半监督训练中达到 0.747 的 AUC,在无训练的训练中,AUC 的 AUC 为 0.747。它也大大胜过基于聚类的当前 SOA 无监督的异常检测方法,其 AUC 为 0.548。
# 1. 导语
高性能计算(HPC)系统(例如异质体系结构和更高功率集成密度)的最新趋势增加了其管理和维护的复杂性 [1]。一个典型的当代 HPC 系统由数千个相互连接的节点组成;每个节点通常包含多个不同的加速器,例如图形处理器,FPGA 和张量芯 [2]。监视所有这些子系统的健康是系统管理员的越来越艰巨的任务。为了简化此监视任务,并减少了管理员的异常叛乱和响应之间的时间,近年来已经引入了自动异常检测系统 [3]。
导致停机时间或系统不可用的异常是昂贵的事件。它们的成本主要与 HPC 系统无法接受新的计算作业的时间有关。由于 HPC 系统的成本高昂并且服务寿命有限 [4],因此减少无法获得时间符合该系统的运营商的利益。与故障节点的手动报告相比,系统管理员的故障和响应之间的时间可以大大减少这方面的异常检测 [5]。现代超级计算机具有监视系统,使系统管理员对系统的整体视图 [3]。这些监视系统收集的数据和描述系统可用性的历史数据是机器学习异常检测方法 [6,7,8,9,10] 的基础,该方法构建了超级计算机及其计算节点的数据驱动模型。在这项工作中,我们专注于 Cineca Tier0 HPC 系统(Marconi100 [11,12] 在 2020 年 6 月的 Top500 列表中排名第 9 位 [13]),该列表采用了一个称为 Excon [14] 的整体监控系统。
生产 HPC 系统是可靠的机器,通常很少有停机事件 - 例如,在 Cineca 的 Marconi100 中,与事件故障事件相对应的时间戳平均代表了所有数据的 0.035%。但是,尽管异常是罕见的事件,但它们仍然显着影响该系统的总体可用性 - 在观察期间,至少有一个主动异常(不可用的节点)的时间为 14.4%。在 HPC 系统上进行异常检测的最新方法(SOA)基于深度学习(DL)领域的监督和半佩斯的方法 [5];因此,这些方法需要具有准确注释的停机时间(或异常)的训练集。 反过来,这需要监视基础架构来跟踪停机时间事件;在某些情况下,这可以使用特定的软件工具(例如 Nagios [15])来完成,但是正确配置这些工具是系统管理员的复杂且耗时的任务。
到目前为止,通过以有监督或半监督的方式训练模型来训练模型,通过部署异常报告工具来应对 HPC 系统的异常检测挑战。对准确标记的训练集的需求是当前方法在实践中应用的主要局限,因为它在系统管理员的时间和精力方面很昂贵。停机时间跟踪还必须能够记录与其他监控服务相同的粒度失败。生产 HPC 系统中的某些方法仅按日期 [1、2、3] 记录停机事件。在大多数生产 HPC 系统中,准确的异常检测是不容易实现的。因此,文献中的大多数方法都经过历史或合成数据或超级计算机的测试,这些超级计算机以经过精心控制的方式注入故障 [18]。对异常数据集进行异常标注的另一个局限性在于,大多数 HPC 系统的短生命周期。在 HPC 领域,一个计算节点和系统的生命周期为三到五年。在实践中,短生命周期意味着,在系统被部署到客户站点之前,供应商没有时间创建一个数据集来训练一个异常检测系统。
一个完全无监督的异常检测方法可以新节点甚至在全新的 HPC 系统上部署。然后,它将在无需与系统管理员进行任何互动的情况下在线学习。此外,这样的系统将更容易部署,因为它不需要额外的框架来报告和记录异常事件(除了构建目标超级计算机的数据驱动模型所需的监视基础架构之外,这种基础架构是一种基础架构,一种在当前 HPC 设施中越来越广泛的基础设施 [3])。
当前的无监督的 HPC 系统的异常检测方法,例如 [19,20,21]。它们要么工作在日志数据上,要么工作在传感器数据上。基于日志数据 [ 19、21 ] 的方法虽然有用,但只能提供超级计算机状态的事后和受限视图。用于传感器数据异常检测的 SoA [ 20 ] 是基于聚类的,需要系统管理员进行一定程度的人工分析,与半监督方法相比性能较差。基于稠密自编码器的半监督方法 [ 5、6、22] 可以以无监督的方式进行训练,该方法通过训练来重现它们的输入。然而,目前的工作都没有探讨过这种可能性。根据 SoA,由于密集自编码器也能够学习异常 [ 5、6、22] 的特征,模型的表现会更差
这项工作的主要动机是提出一种新的方法,该方法仅依赖于异常是罕见的事件,并且当以无监督方式训练时,至少与以半监督方式训练时一样工作良好 - - 这在当前的 SoA 中并非如此。在这项工作中,我们提出了一种无监督方法:RUAD (循环无监督异常检测),它适用于传感器数据,并优于所有其他方法,包括目前的 So A 半监督方法 [ 5 ] 和 So A 无监督方法 [ 20 ]。RUAD 通过考虑数据中的时间依赖关系来实现。我们通过在所提出的神经网络模型结构中使用长短期记忆 ( LSTM ) 单元来实现,该模型显式地考虑了观测现象的时间维度。由 LSTM 层组成的 RUAD 模型能够学习正常运行的特征,即使测试集中存在异常数据,我们也展示了即使测试集中存在异常数据,由 LSTM 层组成的 RUAD 模型也能够学习正常运行的特征 - - RUAD 模型能够以无监督的方式进行训练。RUAD 针对单个 HPC 计算节点:每个计算节点都有不同的异常检测模型。这背后的动机是可扩展性:通过这种方式,每个节点可以用最小的开销来训练自己的模型 - 而且,这种策略也可以在更大的超级计算机中工作,就像节点数量增加一样,我们只需要添加新的检测模型。
# 1.1 本文贡献
总之,在本文中,我们提出了一个异常检测框架,可以处理复杂的系统监控数据,扩展到大规模的 HPC 系统,并且即使没有可用的标记数据集也可以进行训练。本文的主要贡献在于:
我们提出了一种完全无监督的异常检测方法 (RUAD),该方法利用异常很少的事实,并通过使用自编码器网络中的 LSTM 单元显式地考虑数据中的时间依赖关系。由此产生的深度学习模型优于先前最先进的半监督方法 [ 5 ],基于时间不感知的自动编码器网络。在本文提出和分析的数据集 (采集自 Marconi100 超级计算机) 上,前一种方法取得了 0.7470 的曲线下面积 ( ACU ) 测试集得分。相比之下,我们的无监督方法取得了最好的测试集 AUC 得分为 0.7672。据我们所知,这项工作是首次将这种方法应用于 HPC 系统监控和异常检测领域
我们对我们的方法进行了非常大规模的实验评估。我们对 Marconi100 的 980 + 个节点分别训练了 4 种不同的深度学习模型。据我们所知,这是在 HPC 系统中有关异常检测的最大规模的实验,无论是考虑的节点数还是时间长度。先前的工作仅在观测时间 (以文献为例,仅对 HPC 系统的 20 个节点进行了两个月的分析) 较短的节点子集上评估模型。模型的逐节点训练也证明了面向大型 HPC 系统的逐节点模型的可行性。在单个 NVIDIA Volta V100 GPU 上,单个模型的训练时间小于 30 分钟。
# 1.2 本文的结构
我们在第二节中介绍了当前的技术状态和我们的论文的位置。第 3 节描述了用于异常检测的机器学习方法,包括我们的新方法。我们的结果的经验验证的实验设置在第 4.1 节中详细介绍,我们的结果在第 4 节的其余部分中讨论。最后,第五节给出了一些结束语。
# 2. 相关工作
检测偏离 (即操作异常) 规范的事件或实例的驱动存在于许多工业应用中。异常检测模型最早的应用之一是金融行业 [ 23、24 ] 中的信用卡欺诈检测。最近,异常检测 (和相关的预测性维护) 在制造业 [ 25、26 ],物联网 [ 27、28、29 ],能源部门 [ 30 ],医疗诊断 [ 31、32 ],IT 安全 [ 33 ],甚至在复杂物理实验 [ 34 ] 中变得相关。
通常,HPC 系统中的异常是指 (并导致) 次优运行模式的周期,导致作业失败或错误完成的故障,或节点和其他组件硬件故障。虽然 HPC 系统有几种可能的故障缓解策略 [ 35 ] 和容错策略 [ 36 ],但这种类型的异常仍然会显著减少用户可用的计算时间 [ 37 ]。向百亿亿次的过渡和硬件组件异质性的增加只会加剧因故障引起的问题,以及已经困扰 HPC 机器 [ 1、3、38] 的异常状况。一项 DARPA 研究估计,未来的超大规模 HPC 系统的故障可能每 35 - 39 分钟就会发生一次 [ 39 ],从而严重影响超级计算的可用性和系统管理员的负荷。
然而,当查看特定组件而不是整个 HPC 系统 (例如,考虑单个计算节点) 时,故障仍然是非常罕见的事件,因此属于异常检测领域,这可以看作是监督学习在不平衡类上的一个极端情况 [ 40 ]。由于与正常操作有关的数据远远超过与异常有关的数据,经典的监督学习方法倾向于过度拟合正常数据,并在异常数据上给出次优的性能 [ 41 ]。为了缓解类别不平衡问题,通常从两个角度来处理异常检测问题。在最新技术 ( SoA ) 中发现的解决类不平衡的方法要么修改数据 [ 42 ],要么使用专门的技术,这些技术在异常检测问题上效果很好 [ 5 ]。数据操纵方法通过减少属于正常操作 (在多数类抽样下) 的数据或者通过过采样甚至生成异常数据 (对少数类进行过度抽样) 来解决数据集不平衡问题 [ 42 ]。HPC 系统中用于异常检测的数据操作尚未得到深入研究。相反,大多数现有的方法依赖于合成数据生成,例如,在真实 (非生产) 超级计算机或 HPC 模拟器中注入异常 [ 5 ]。
另一种研究方法是使用不同的学习策略,即半监督 ML 模型,从 HPC 系统中利用大量的正常数据。半监督模型不是在包含多个类的数据集上学习 - - 从而学习所有类的特征 - - 而是只在正常数据上训练。因此,他们被训练来学习正常类 (数据集中的多数类) 的特征。然后将异常识别为与正常类 [ 40、6、43、22、44] 学习到的特征不对应的任何事物。
关于用于开发和部署异常检测系统的数据类型,我们可以识别两个宏类:整体监控系统 (即:考) 收集的系统监控数据和日志数据。然后用系统或节点级可用性的信息对这些数据进行标注,从而创建与数据点相关的标签。标签编码系统是否正常运行或发生异常。由于获取带标签的系统监控数据是昂贵且耗时的,因此可以通过向 HPC 系统中 "注入" 异常来获得用于监督学习的带标签数据集 (如 [ 18 ] )。标签对于有监督、半监督和无监督方法都很重要。在第一种情况下,它们用于计算损失,在第二种情况下用于识别训练数据集和验证,而在第三种情况下,只用于验证。这些数据可以直接用于监督学习任务,也可以在处理新特征 (特征构建) 后使用。该方法的实例是 [ 45、17、46 ],其中作者使用有监督的 ML 方法来分类 HPC 系统中的性能变化和作业级故障。在故障检测方面,[ 8、18 ] 提出了一种基于随机森林 (一种基于决策树的集成方法) 的监督方法来对 HPC 系统中的故障进行分类。所有提到的方法都使用注入到 HPC 系统中的合成异常来训练监督分类模型。方法 [ 5 ] 和 [ 16 ] 是利用从生产 HPC 系统 (与注入异常相反) 收集的真实异常的少数方法之一。在本文中,我们感兴趣的是真实的异常,因此,在我们的定量比较中,我们将不包括使用合成 / 模拟数据或注入异常的方法。
所有提到的方法都没有考虑到数据 (模型不是在时间序列上训练的,而是在不包含时间信息的表格数据上训练的) 的时间依赖性。系统监测数据方法 [ 47 ] 是第一个通过计算时间维度 (聚合、滑动窗口统计、滞后特征) 上的统计特征来考虑数据中的时间依赖关系。大多数处理时间序列异常检测的方法都是针对系统日志数据的。标记的异常要么使用日志解析器进行分析 [ 48 ],要么使用深度学习方法进行检测。深度学习用于异常检测的方法是基于 LSTM 神经网络的,因为它们是其他文本处理领域的一种行之有效的方法。
与有标记的训练集相比,在无标记数据集上所做的工作要少得多 - - 尽管这种情况在实际中更为常见。到目前为止,所有关于无标签数据集的研究都集中在系统日志数据上。文献 [19] 提出了一种基于 k - means 的无监督学习方法,该方法不考虑日志数据的时间动态性。文献 [ 20 ] 提出了一种基于传感器数据的聚类方法。该方法将作为实验部分 (因为它是传感器上唯一的无监督方法,而不是在日志数据上) 的基线之一。一种方法 [ 21 ] 以无监督的方式处理时间序列数据。它使用基于 LSTM 的自编码器,并在现有的日志数据集上进行训练。本文提出的异常检测器取得了 0.59 的 AUC (受试者 - 操作者特征曲线下面积)。尽管它工作在一个完全不同类型的数据集 (日志数据相对于系统监控数据) 上,这是与本文提出的研究范围最接近的现有工作。正如我们在论文后面所展示的那样,通过在每个节点上部署系统监测数据的无监督异常检测方法,我们可以取得比日志数据模型 [ 21 ] 报告的要好得多的结果。表 1 总结了本节描述的最相关的方法,重点介绍了训练集和时间依赖。
本文的新颖之处在于,相对于现有的著作而言,具有三方面的意义:
- 提出了一种基于无监督时间序列的异常检测模型 RUAD;
- 提出了一种捕获时间依赖关系的深度学习架构;
- 该方法在具有真实异常的大规模生产数据集上进行了评估 - - 据我们所知,这是迄今为止对这类问题进行的最大规模的评估。
# 3. 方法
在这一部分中,我们描述了所提出的无监督异常检测方法。我们不直接介绍所提出的方法 (LSTM 自编码器深度网络),因为我们想说明它是如何对当前最先进的方法进行重要扩展的;因此,我们首先介绍了三种基线方法,i ) 指数平滑 (作为最基本的比较方法),ii ) 无监督聚类和 iii ) 文献 [ 5 ] 中使用的密集自编码器。然后,我们详细描述了我们的方法,并强调了它的关键优势 (无监督的训练机制和时间维度的明确包含)。
# 3. 1 节点异常标记
我们的目标是识别一个节点的严重故障,使其无法执行常规的计算任务。正如 Nagios 报告的那样,这种故障并不一定与移除生产节点一致。在与 CINECA 系统管理员的讨论中,我们得出结论,节点可用性的最佳代理是最关键的状态,正如 Nagios 所报告的那样。为此,我们创建了一个新的标签,称为节点异常,如果 Nagios 报告的任何子系统都报告了临界状态,则该标签的值为 1。从这些事件 (报告的异常) 中,我们然后根据 Jira [ 50 ] 中的报告测试或配置来过滤已知的假阳性事件。吉拉原木由 CINECA 提供。我们以前的工作 [ 5 ] 中使用的标签不适用于 M100,因为它们被广泛用于表示从生产中移除的节点,用于测试和校准。在这项工作中,我们研究了 HPC 机器生命周期的早期阶段,当进行了几轮重新配置,从而部分地破坏了系统的正常生产流程。Jira 日志由 CINECA 提供。我们以前的工作 [ 5 ] 中使用的标签不适用于 M100,因为它们被广泛用于表示从生产中移除的节点,用于测试和校准。在这项工作中,我们研究了 HPC 机器生命周期的早期阶段,当进行了几轮重新配置,从而部分地破坏了系统的正常生产流程。对比表 2 中的两种标注策略,可以看出两者的重合度最小。此外,由于 M100 在运行的前 10 个月中经历了大量的测试阶段,节点被标记为从生产中移除,但仍然正常运行,因此节点异常报告的数量远远少于其他异常。在论文的其余部分,第 0 类或第 1 类将始终指节点异常值分别为 0 或 1。正常数据是所有节点异常取值为 0 的数据,异常数据是节点异常取值为 1 的数据。
# 3. 2 重建误差及结果评价
异常检测问题可以形式化地表述为训练模型 $$M$$ 的问题,该模型估计在 $$t_0$$ 时刻结束的长度为 $$W$$ 的向量序列代表 $$t_0$$ 时刻的异常的概率 $$P$$:
向量 $$\vec {X}_{t_0-W+1}$$ 收集 $$t$$ 时刻的所有特征值;特征为从计算节点采集的传感器测量值。$$W$$ 是模型 $$M$$ 作为输入的过去窗口的大小。如果模型不考虑过去的值 -- 就像作为基线实现的稠密模型一样 [ 5 ] -- 并且窗口大小 W 为 1,问题可以简化为估计:
在自编码器的情况下,模型 $$M$$ 由两部分组成:自编码器 $$A$$ (一个神经网络) 和异常分数,异常分数由自编码器的重构误差计算。通过比较自编码器模型 A 的输出与真实值向量 $$\vec {X}_{t_0}$$,计算重构误差。模型 $$A$$ 的任务是重构其输入序列的最后一个元素:
向量 $$\hat\vec {X}_{t_0}}$$( t0 为向量 $$\vec {X}_{t_0}$$ 的重构。同上式 2,窗口大小 $$W$$ 可取 1。模型 $$M$$ 输出归一化后的数据。重建误差计算为绝对误差之和模型 $$A$$ 的输出与每个特征的归一化输入值之间的差值:$$\text {Error}(t_0) = \sum {} - x_i|}$$,其中 $$N$$ 是特征的个数,$$\hat {\vec {x_i}}$$ 是模型 A 的输出。然后将误差除以训练集上的最大误差进行归一化:$$\text {Normalized error}(t_0) = \frac {\text {Error}(t_0)}{max (\text {Error}(t))}$$。我们估计第 1 类 (异常) 的概率为
基于概率 $$P (\vec {x}{t_0} \text {是异常})$$ ,分类器对序列 $$\vec {x}, ... , \vec {x}_{t_0}$$ 是否属于第 0 类 (正常运行) 中的第 1 类 (异常) 进行预测。这个预测依赖于一个阈值 $$T$$,它是一个可调参数:
为了避免选择特定的阈值 $$T$$,我们引入了接收者 - 操作者特征曲线 (Receiver- operator characteristic curve,ROC 曲线) 作为性能指标。它允许我们评估所有可能的决策阈值的分类方法的性能 [ 51 ]。接受者 - 操作者特征曲线绘制了真阳性率与假阳性率的关系。随机决策表示两者之间的线性关系 - - 对于一个分类器来说要有意义,ROC 曲线需要在对角线上方。对于曲线上的每个特定点,ROC 曲线位于另一曲线上方的分类器为较好的分类器。分类器的整体性能可以用 ROC 曲线下的面积 ( Area Under the ROC Curve,AUC ) 来定量计算;一个做出随机决策的分类器的 AUC 等于 0.5。AUC 得分低于 0.5 的指定分类器比随机选择差。最好可能的 AUC 分数是 1,这是通过一个分类器实现的,它将实现真阳性率等于 1,同时具有 0 (从广义上讲,这只能在微不足道的数据集或非常简单的学习任务上实现) 的假阳性率。
# 3.3 小基线:指数平滑法
指数平滑作为一个平凡的基线比较来实现。它是一种简单且计算廉价的方法,可以检测数值中的快速变化 (跳跃)。如果异常只是简单的数值快速变化,特征之间不存在相关性,那么简单的指数平滑方法就可以将其区分开来。因此,我们选择指数平滑作为第一个基线,因为它在计算上是廉价的,并且不需要训练集。此外,如果指数平滑表现不佳,这强调我们确实在解决一个非平凡的异常检测问题,为此需要更强大的模型。
对于基线,我们选择独立地实现每个特征的指数平滑。特征 i 在 t 时刻的指数平滑计算为:
其中 x (i) 是 t 时刻 xi 的估计,α 是方法的参数。我们对集合 F 中的所有特征都这样做,观测开始时的估计值等于 t0 时刻的实际值:x ( i t0 = xi t0 )。
# 3.4 无监督基线:聚类
一种可能的无监督异常检测方法是使用标准的无监督机器学习技术,如文献 [20] 提出的 k - means 聚类。簇的确定是在训练集上进行的;属于测试集的每个新实例都与其中一个预训练的簇相关联。我们选择这种特殊的无监督技术进行比较,因为它是文献 (就我们所掌握的知识而言) 中发现的唯一一种使用传感器数据而不是日志的无监督方法,因此我们保证了公平的比较。然而,需要指出的是,聚类虽然属于无监督机器学习领域,但无法以无监督的方式检测异常 - - 对于在训练集上确定的每个聚类,必须计算异常的概率。这个概率只能通过标签来计算。
本文采用文献 [20] 中的聚类方法来证明所得结果的有效性。我们使用了 K - means 聚类 [ 19 ],就像在 [ 20 ] 中提出的那样。我们在训练集上对聚类进行了训练。根据训练集上的轮廓得分 1,我们确定了每个节点的最佳聚类数 2。对于每个确定的簇,计算属于第 1 类的实例的百分比。我们用这个异常实例的百分比作为每个实例分配到特定集群的异常概率。训练集和测试集的划分与所有其他评价方法相同。
# 3.5 半监督基线:稠密自编码器
竞争基线方法是基于当前最先进的稠密自编码器模型 [5] 提出的。自编码器是一种神经网络 ( NN ),它的训练目的是重现它们的输入。该网络分为两个 (通常是对称的) 部分:编码器和解码器。编码器的作用是将输入压缩为更浓缩的表示。这种表示被称为潜在层。为了防止网络学习简单的身份函数,我们选择隐层小于原始输入大小 (输入特征数量) [ 6 ]。解码器的作用是利用潜在表示对原始输入进行重构。
稠密自编码器是异常检测的常用选择,因为我们可以通过作用于隐层的大小来限制其表达能力。压缩潜在维度迫使编码器从输入数据中提取最显著的特征;除非输入数据是高度冗余的,否则自动编码器不能正确地学习以重新创建它经过一定的潜在尺寸缩减后的输入。在当前生产超级计算机的异常检测技术中 ([ 5] ),稠密自编码器以半监督的方式使用,这意味着网络仅使用与超级计算机节点正常运行对应的数据点 ( 0 类) 进行训练。半监督训练是可行的,因为正常点占绝大多数,因此很容易获得;然而,这需要有标记的数据,或者至少有一定的确定性,HPC 系统在正常条件下运行足够长的时间。一旦自动编码器仅使用正常数据进行训练,它将能够识别相似但先前未见过的点。相反,它将努力重建新的不遵循学习到的正常行为的点,即我们正在寻找的异常;因此,重建误差会更高。自编码器模型的结构如图 1a 所示。稠密自编码器没有考虑数据的时间动态性,其输入和目标输出是相同的向量:
# 3.6 循环无监督异常检测:RUAD
在超越现有模型的基础上,我们提出了一种不同的方法,RUAD。它将一个向量序列作为输入,然后尝试只重构该序列中的最后一个向量:
输入序列长度是一个可调参数,它指定了观察窗口 $$$$ 的大小。所提出的方法的思想在原理上类似于密集自编码器,但有两个重要的扩展:1 ) 我们将输入序列编码成更有效的表示 (隐层),2 ) 我们以无监督的方式 (从而消除了对标记数据的要求) 训练自编码器。第一个创新点的关键见解是,虽然描述超级计算节点的数据是由多元时间序列组成的,但最先进的方法并没有明确地考虑时间维度 -- 密集自编码器既没有时间的概念,也没有数据点序列的概念。为了克服这个限制,我们的方法通过对导致异常的值序列进行编码来实现。编码器网络由长短期记忆 ( LSTM ) 层组成,这些层经常被证明非常适合时间维度相关的上下文 [ 53 ]。LSTM 层由递归细胞组成,这些细胞有来自上一个时间戳的输入和来自长期记忆的输入。
为了解决当前的近百亿亿次和未来的百亿亿次 HPC 系统规模将由数千个节点组成的问题 [3],我们需要一种可扩展的异常检测方法。目前在整个超级计算机上进行异常检测的最可扩展的方法是节点特定的方法,因为每个计算节点都可以训练自己的模型。尽管如此,我们希望通过最小程度地影响 HPC 系统的正常运行来实现这一目标。这就是为什么所提出的解决方案具有较小的开销是很重要的。此外,由于我们想训练一个每一个节点的模型,我们希望该方法具有数据有效性。为了满足这些要求,我们选择不使解码器对称于编码器。因此,本文提出的方法由一个 Dense 解码器和一个 LSTM 编码器组成。LSTM 编码器的输出被传递到一个密集解码器中,该解码器通过在输入序列中重新生成最终的向量来训练。因此,解码器网络由全连接的密集层组成。所提出的方法的体系结构与最先进的方法在图 1 中进行了比较。
训练复杂度的降低使得我们可以为每个计算节点训练一个单独的模型。正如之前所示 ([ 54] ),节点特定的模型提供了比在所有数据上训练的单个模型更好的结果。经过初步的实证分析,在没有显著的精度损失的情况下,我们决定采用这种方案 (每个节点有一个模型),而训练时间大大减少了 (约 50 %);这在我们的案例中是非常重要的,因为我们为 Marconi 100 ( 980+) 的每个节点训练了一个 DL 模型,这无疑是一个不可忽略的计算努力。
# 3.7 数据预处理
正如第 3.6 节所介绍的那样,我们提出的方法包括为每个节点训练一个模型。因此,每个节点的数据首先被分割成训练集和测试集。训练集包含 80 % 的数据,测试集包含最后 20 % 的数据 (大致上最近两个月的数据)。需要强调的是,我们选择了两个不重叠的数据集进行训练和测试。这就避免了处理测序时信息的交叉传递。此外,检验的因果性得以保留。(没有使用未来的数据来训练模型)。这使得研究结果对实际使用是有效的。
对于半监督训练,通过去除异常事件 (异常事件由节点异常标签识别,如 3.1 节所述) 对训练集进行筛选。我们将该滤波器命名为半监督滤波器,如图 2 所示。对于无监督学习,不对训练集进行筛选。对于两种情况 (无监督和半监督学习),均使用标签对结果进行评估。滤波后,一个定标器被拟合到训练数据中。定标器是将数据缩放到 [ 0、1 ] 区间的转换器。在实验部分,在每个特征上使用 min /max 定标器 [ 55 ]。在对训练数据进行拟合后,将定标器应用于测试数据 - - 为了对测试集进行重新定标,训练集的 min 和 max 值使用 (因为这是 DL 方法的标准做法)。缩放后,训练集和测试集都被过滤掉,以确保时间一致性:数据被分割成没有缺失块 (缺失的组块是半监督过滤的结果) 的序列。小于 $$W$$ 的序列被删除。最后,将序列转化为长度为 $$W$$ 的批量序列。图 2 描述了整个数据预处理流程。
# 3.8 评价方法的总结
我们将我们提出的方法 RUAD 与已建立的半监督和无监督基线进行了比较。预处理过滤器的总结如表 3 所示。半监督滤波器适用于所有的半监督方法。时间一致性滤波器应用于明确考虑数据时间维度的方法:指数平滑和 RUAD。在半监督和无监督版本中对 RUAD 和当前基于稠密自编码器的 SoA 异常检测方法 ([ 5] ) 进行了评估。
我们希望强调的是,与无监督学习基线 [20] 不同,我们提出的方法 RUAD 在模型训练后不需要额外的动作。本文提出的方法 RUAD 在无标记数据集上工作,不需要额外的训练后分析。与训练集需求相关的方法总结如表 4 所示。

















