HPC系统中基于粗粒度聚类和细粒度模型共享的有效节点级异常检测
# 摘要
高性能计算 (HPC) 系统对于科学进步和工程突破至关重要。意外的性能下降或系统故障可能会严重影响这些工作。本文介绍了 NodeSentry,这是一种为大规模 HPC 系统的计算节点量身定制的新型无监督异常检测框架。NodeSentry 利用粗粒度聚类和细粒度模型共享的组合方法,有效应对现代 HPC 部署特有的大规模节点规模、频繁的作业转换和复杂模式所带来的挑战。对两个真实世界 HPC 数据集的评估表明 NodeSentry 具有卓越的性能,实现了超过 0.876 的 F1 分数。这比现有的最佳基线方法平均提高了 0.560,同时将训练开销平均降低了 45.69%。此外,为了提高可重复性并为更广泛的研究社区做出贡献,我们开源了 NodeSentry 的代码库,并引入了专为 HPC 系统设计的新型聚类调整和异常标记工具。
# 1. 导语
高性能计算 (HPC) 系统在社会和科学领域的各种数据密集型应用中发挥着至关重要的作用,例如天气预报、特效渲染和航空航天 [4]。这些系统通常由大量计算节点组成,这些节点通过高带宽、低延迟网络互连,形成集群或超级计算机 [8]。每个节点(在本文中我们使用 “node” 作为 “compute node” 的简写)都配备了多个处理器内核和大量的内存容量 [24],许多节点通常会集中他们的资源来处理单个的大规模计算工作。错综复杂、广阔的架构和高度动态的工作调度大大放大了系统故障的可能性 [4, 14, 50],例如,世界排名第一的超级计算机 Frontier 最初的平均故障间隔时间只有几个小时 [44]。因此,实时识别性能异常至关重要,尤其是在它们升级为系统故障之前。表 1 [11, 28, 33] 提供了 HPC 系统中节点异常的详细信息。实现这一目标的一种普遍方法是实时监控节点并检测异常 [34]。
为了检测节点的异常情况,运维人员会密切监控和收集这些节点的大规模性能指标,例如核心利用率和内存使用百分比 [20]。这些指标以多变量时间序列 (MTS) 的形式按预定义的时间间隔聚合。图 1 说明了来自三个节点的这些指标的子集。我们观察到 HPC 系统的 MTS 与其他应用场景中观察到的 MTS 之间存在根本差异。具体来说,与云数据中心 [18, 38]、微服务系统 [39, 49] 和蜂窝基站 [27, 39] 相比,HPC 系统表现出三个独特的 MTS 特性:
1) 高节点规模和度量维度:HPC 系统通常由数万个节点组成。由于每个节点有大量的内核、内存、网络接口和其他组件,每个节点都会生成大量的指标,即在我们的场景中有 3,014 个指标(图 1 中只显示了几个)。相比之下,一个节点的 MTS 在典型的数据中心中仅包含数十个指标 [18, 38]。
2) 动态作业转换和作业模式关联:众所周知,HPC 中的作业通常很复杂,需要跨多个节点进行分布式协作执行,例如,(a) 在节点 1 中,(f) 在节点 3 中。而从单个节点的角度来看,作业是不断切换的,例如,Node-3 中的 (f)、(g)、(h) 和 (i) 都是不同的作业,其中 (h) 代表空闲等待状态,可以看作是一种特殊类型的作业。可以观察到,执行相同作业的节点通常具有相似的模式,即 (a) 和 (f)。但是,不同的作业也可能表现出类似的模式,例如 (e) 和 (i)。此外,这种相关性意味着,即使没有重复的作业信息,其他节点上的作业模式也可以为了解目标节点上的作业行为提供有价值的见解。
3) 同一作业中子模式之间的差异:尽管不同的 MTS 段可能表现出相似的模式,但单个段(对应于单个作业)中的细粒度模式并不是静态的。例如,段 (e) 和 (i) 的最后一部分和前半部分显示出显著差异,我们分别称为子模式 1 和子模式 2。这是因为连续作业段中的特定任务可能会随时间而变化。
多年来,HPC 系统中的自动异常检测引起了人们的极大兴趣 [3–5, 10, 30, 32, 37, 42]。然而,现有的方法假设 MTS 具有稳定的模式和强大的周期性,无法有效解决表现出这些特征的节点的异常检测问题。对于特性 1,一些方法 [10, 22, 30] 为每个节点训练一个模型,随着节点规模和度量维度的增长,训练成本呈指数级增长。对于特性 2,无法积累稳定、长期连续的模式数据导致某些方法的训练和检测性能明显不佳 [5, 10, 30, 32, 42]。尽管一些方法 [3, 4, 37] 考虑了这些特征,但它们没有考虑特性 3 的影响,未能有效地模拟子模式之间的变化。
幸运的是,在我们的场景中,我们可以使用 Slurm(HPC 系统广泛采用的作业调度工具)的 sacct 命令 [1] 轻松地从管理系统中获取每个作业的开始时间、结束时间和执行节点。通过使用作业的开始和结束时间,我们可以将节点上收集的连续时间序列分割成多个段,每个段代表一个特定作业的时间序列模式(将在 § 3.2 中详细说明)。因此,我们可以放弃为每个节点或每个作业单独训练模型的方法。相反,我们采用以下策略:首先,我们根据作业将所有节点分段为 MTS 分段。然后,我们将这些区段聚类。之后,我们为每个簇训练一个模型,该模型能够同时关注各种子模式。当要检测到新作业时,只需要有限数量的数据来匹配最合适的模式,从而通过相应的模型实现有效的异常检测。然而,实施这种有针对性的异常检测策略面临两个主要挑战(将在 § 2.1 中详细说明)。
1) 对不同长度的 segment 进行粗粒度模式的聚类:由于计算复杂性巨大,对 MTS 的数千个维度进行聚类是不切实际的,需要降维。另一方面,基于作业的细分会产生不同长度的细分,其聚类构成了主要挑战。此外,考虑不同长度的自适应聚类方法通常会导致很高的计算复杂性 [26, 49]。这些限制阻碍了现有方法有效执行模式聚类。
2) 细粒度子模式的识别和模型共享:虽然聚类方法可以成功地对表现出相似全局趋势的分段进行分组,但同一簇中的细分可能仍包含仍未充分识别的复杂子模式。另一个重大挑战在于有效地识别和适应这些细粒度的子模式,以训练一个共享模型,以确保准确的异常检测和模型泛化。
为了应对上述挑战,我们提出了 NodeSentry,这是一个针对 HPC 系统中节点的无监督异常检测框架。NodeSentry 首先提取全面的特征,并利用分层凝聚聚类 (HAC) [31, 49] 进行粗粒度模式聚类,旨在快速分类和识别主要趋势。然后,NodeSentry 采用 Transformer 和 Mix of Experts (MoE) [17, 36] 的组合来实现更细粒度的模型共享和优化,从而可以处理簇内的子模式,并增强模型的泛化和检测能力。本文的主要贡献总结如下:
1) 我们首次总结了 HPC 系统中计算节点的独特特性。受其启发,我们提出了一种通过粗粒度聚类和细粒度模型共享的新型异常检测框架 NodeSentry,该框架显着增强了 HPC 系统的可靠性和稳定性。
2) 我们提取全面的统计、时间和光谱特征,并利用 HAC 将不同长度的片段表示为固定宽度向量以进行模式聚类,从而解决挑战 1。随后,我们整合了 Transformer 的自注意力机制和 MoE 的模型共享优势,以增强检测性能和泛化能力,解决了挑战 2。
3) 我们对从生产系统中收集的两个不同的数据集进行了广泛的实验。结果表明,NodeSentry 的平均 F1 分数分别为 0.876 和 0.891,比最佳基线方法高出 0.562 和 0.558,同时与最快的深度学习基线方法相比,训练开销分别降低了 77.93% 和 13.45%。
4) 为了确保更好的可重复性,我们已公开提供样本数据集和代码 1。我们还为 HPC 系统中的 MTS 发布了聚类调整和异常标记工具 2。
# 2. 挑战和技术
在本节中,我们将详细讨论这些挑战,并介绍一些将用于应对这些挑战的技术。此外,我们还定义了异常检测的具体问题。
# 2.1 挑战
挑战 1:对粗粒度模式的不同长度的 segment 进行聚类。
如图 1 所示,有不同的 job,它们都记录在 job 管理系统中。但是,由于训练数据不足且计算成本高,直接为每个作业训练单个模型是不切实际的。因此,我们需要将相似的作业聚在一起训练共享模型,这需要根据每个节点内的不同作业对数据进行分割,并有效地将这些 MTS 段进行聚类,这是一个难题。
高度量维度使得直接在原始 MTS 上执行聚类变得不可行。首先,维度的绝对数量会导致维度的诅咒。随着维度数量的增加,不同数据点的距离之间的对比度会减小,从而难以区分聚类簇。此外,聚类算法的计算复杂性会随着维度数量的增加而呈指数级增长,这对于大规模节点来说可能不切实际。
HPC 系统中不同的作业持续时间会导致 MTS 段的长度不相等,这给聚类带来了很大的困难。针对不同长度的线段的现有聚类方法大致可分为两种类型:基于形状的方法和基于深度学习的方法。动态时间扭曲 (DTW) [26] 是最典型的基于形状的聚类方法,计算量大且效率低下。使用这种方法对一周的数据进行聚类需要 3.8 个月,这对于实际应用来说是不可接受的。另一方面,基于深度学习的方法需要大量的数据来学习有效的表示 [38,46–49]。但是,在 HPC 系统中,作业的生存期可能非常短暂,并且 MTS 分段的长度有限可能无法提供足够的信息来支持深度学习模型的训练。
综上所述,降低维度并提取指标的统计、时间和光谱特征进行聚类成为一种合适的方法 [9, 15, 25, 37]。降维方法通过将数据转换为低维空间同时保留重要信息来帮助减轻降维的诅咒。另一方面,特征提取方法旨在通过分析数据的统计、时间和光谱特征来识别最相关和最具鉴别性的特征。通过提取有意义的特征并压缩时间维度,我们可以提高聚类效率并实现更好的性能。
挑战 2:细粒度子模式的识别和模型共享。
从图 3 中可以明显看出,在 HPC 系统中,即使在同一作业中,MTS 也可以表现出不同的子模式。在将相似模式聚类到不同的簇之后,接下来的挑战在于为每个聚类簇训练一个共享模型,同时有效地解决子模式的固有多样性。
传统的共享策略,包括使用簇质心进行模型训练 [49] 和基于度量维度 [18] 的数据共享,都有局限性。具体来说,使用簇质心进行模型训练 [49] 涉及将相似的模式分组到聚类簇中,并根据每个簇的质心训练模型。这种方法假设簇内的同质性,这可能会破坏模型有效泛化到复杂子模式的能力。同时,基于度量维度的数据共享 [18] 捕获了 MTS 中的跨度量相关性,将每个度量视为处理跨模式的不同数据的位置,这忽略了时间依赖性,并损害了模型适应子模式细微变化的能力。这些策略经常与数据的代表性不足作斗争,导致模型的泛化能力下降。
相比之下,将集成学习整合到共享策略中提供了一个新颖的视角 [12, 54]。通过利用多个个体学习者的优势,集成学习可以有效地解决簇中子模式的固有多样性。这种方法不仅增强了模型跨相似模式进行泛化的能力,还提高了其对不同子模式的适应性。具体来说,集成方法可以聚合针对同一簇内不同数据子集进行训练的单个学习者的结果,从而提供更全面、更稳健的基础模式表示。因此,此策略为 HPC 系统中的训练共享模型提供了更有效的解决方案。MoE 是实现此策略的极好方法 [23],而 Transformer 非常适合集成专注于不同细微子模式的专家 [16, 21]。
# 2.2 技术
通过严格的分析,我们确定了一组有效解决核心问题的针对性技术。本节深入探讨了我们选择的技术,概述了理论基础。
分层凝聚聚类。HAC 是一种基于树状图的自下而上的聚类技术,为选择策略提供了灵活性,并提供了对聚类结构的清晰解释。HAC 允许多级聚类结果,这对于发现模式非常有用。HAC 可以处理不同大小和形状的簇,这与基于质心的聚类算法(例如 k-means)不同,后者采用圆形或球形聚类。
Transformer 神经网络。Transformer 利用自我注意机制实现全局上下文建模,从而更好地捕获 MTS 中的长距离依赖关系 [40, 53]。它的并行计算能力在训练和推理过程中提供了更高的速度和可扩展性。此外,前馈网络 (FFN) 的加入有助于提高模型的训练稳定性和表达能力。这些特性使 Transformer 成为当前自然语言处理和 MTS 建模任务中的主流模型。
专家混合。MoE 结合了多个专家的优势和不同的知识表示,提供了丰富的数据特征和强大的模式捕获能力 [45, 51]。与密集模型相比,MoE 可以在保持相对较低的计算成本的同时享受其优势 [21]。此外,这些特征还可以促进模型共享,降低每个专家模型的训练数据要求并允许模型从 MTS 的有限时间范围内学习更多知识。Transformer 中 MoE 的组合在模型训练任务中得到了广泛的关注和应用。
# 2.3 问题定义
运维人员需要对实时采集的 MTS 进行分析。考虑一个具有 $$N$$ 个节点的大型 HPC 系统,其中采集的 MTS $$M$$ 与每个节点相关联。在 $$T$$ 长度带时间戳的观察序列中,$$X \in R^N×M×T}$$ 表示所有节点在连续时间戳下的 MTS。对于每个节点 $$n \in \{1, ..., N \}$$,作业调度列表中记录的信息可以处理为 $$S_n = { (start _{n, j}, end_{n, j}) }_{J_n}$$,其中 $$J_n$$ 是作业总数,$$start_{n,j}$$ 和 $$end_{n,j}$$ 是第 j 个作业的开始和结束时间戳。
基于上述定义,异常检测问题表述如下:给定一个训练输入 $$X$$,对于要测试的长度为 $$\hat$$ 的 $$\hatX}$$,我们需要确定 $$Y \in \{0, 1\}$$ ,其中 $$Y$$ 表示测试时间戳处的每个节点是否异常(1 表示异常)。
# 3. 方法
# 3.1 设计概述
该框架的总体结构如图 2 所示,它包含两个主要阶段:离线模型训练阶段和在线异常检测阶段。
在离线模型训练阶段,NodeSentry 首先对原始 MTS 进行预处理,以消除不同节点之间的格式、范围和模式差异。随后,为了识别作业的模式并减少模型训练开销,NodeSentry 对处理后的 MTS 分段执行粗粒度聚类。这种方法使模型能够在聚类簇上进行训练,而不是在单个 MTS 分段上进行训练。为了有效地识别和适应同一簇中的子模式,NodeSentry 将专家网络分配给簇内的不同 Segment 以进行模型共享。每个专家网络都可以专注于处理特定的子模式,从而提高性能和泛化能力。在线异常检测阶段,NodeSentry 从预处理的 MTS 提取特征用于匹配聚类库中的模式。随后,动态分配适当的模型以识别目标节点中的异常。
# 3.2 MTS 预处理
出于以下三个原因,我们需要进行预处理作:1) 为了确保数据的干净和有代表性,我们对缺失值应用线性插值。2) 为了在保留关键信息的同时降低复杂性,我们对核心指标进行节点级聚合,从而获得稳定的节点状态洞察。3) 为了捕获有意义的模式并减少连续度量的歧义,我们在转换点实施了基于作业的细分,隔离了节点行为以进行特定的作业分析。这些构成了我们标准化的四步预处理管道的核心组件:
清理:在实际生产环境中,数据收集和传输过程中可能会出现数据丢失 [43]。当值缺失时,我们使用附近的观测值线性填充这些位置。
降维:正如挑战 1 中强调的那样,由于 MTS 的高维性,降维是必不可少的。我们采用一种组合方法,利用两种技术来实现显著的降维,同时最大限度地减少信息损失:基于度量语义的降维和相似性分析。
(1) 基于度量语义的降维:为了降低数据复杂性并保留基本的节点状态信息,我们在节点级别聚合了相似的指标,仅组合语义相同的指标以保持数据完整性。这种方法涉及聚合具有相同物理含义的指标(例如,CPU 使用率、内存消耗)[4, 37]。
(2) 基于相似性分析的降维:在此步骤中,我们使用以下公式计算每对节点级指标之间的 Pearson 相关系数:
$$X$$ 和 $$X^\prime$$ 是需要计算相关系数的两个指标。对于 r ≥ 0.99 的量度对,这些量度对通常表现出几乎相同的量度曲线,并且往往会遇到类似的异常。我们消除了极其相似的指标,只保留一个指标,因此不会牺牲准确异常检测所需的关键模式。
在聚合每个内核的指标并过滤掉高度相似的冗余指标后,我们最终得到了几个维度,大约是原始维度的十分之一。
标准化:不同的指标具有不同的单位和范围,这可能会导致异常检测期间的贡献不同。为了处理具有不同单位和范围的指标之间的维度差异,我们应用了数据标准化。在计算每个节点 - 指标对的训练数据的平均值 $$\mu_{i,j}$$ 和标准差 $$\sigma_{i,j}$$ 时,我们排除了每个指标的前 5% 和后 5% 的极端异常值,以避免数据分布偏斜 [35]。这些极端异常值被定义为明显偏离正态数据分布的数据点,通常是由于测量误差、数据输入错误或自然变化造成的。
在标准化数据时,任何超出 -5 到 +5 范围的剩余值都将剪切到这些边界。这可确保标准化数据保持在合理范围内,从而防止残差异常值的不当影响。
分段:由于节点在作业期间表现出不同的模式,直接分析连续 MTS 可能会引入模糊的关键信息。我们采用基于作业的分割方法来划分 MTS。具体来说,我们首先确定作业过渡点(从 Slurm [1] 获取的作业的开始和结束时间)。然后,我们将每个任务转换点之间的 MTS 视为一个独立的分段,表示节点在特定任务中的连续模式。
# 3.3 粗粒度聚类
在 HPC 系统中,不同作业的计算需求和持续时间表现出高度的不确定性,导致节点中动态且频繁的作业转换。为了简化 HPC 系统中异常检测的问题空间并降低模型训练的复杂性,我们在宏观层面对已处理的 MTS 分段执行粗粒度聚类。这种方法通过将相似的细分分组在一起来帮助捕获代表性模式,从而使模型能够在训练期间专注于这些关键簇。粗粒度聚类过程涉及特征提取和分段聚类,以有效降低数据复杂度并提高训练效率。
特征提取:特征提取是数据分析过程中获取关键信息的关键步骤。该过程通常涉及将 MTS 转换为一组描述信号本质的描述性参数。具体来说,我们使用时间序列特征提取库 (TSFEL) [6] 为每个指标提取 134 个可解释的特征索引。这些功能涵盖统计、时间和频谱域,包括但不限于中位数、绝对能量和最大功率谱。
分段聚类:NodeSentry 使用 HAC 和欧几里得距离进行分段聚类。值得注意的是,运算符不需要迭代尝试来确定最佳聚类数。我们使用轮廓系数来衡量聚类性能,它结合了内聚和分离 [2]。较高的轮廓系数表示簇之间的距离越远,而簇内的距离越短,从而实现了高簇内聚和低簇间耦合。
# 3.4 细粒度模型共享
在通过粗粒度聚类对表现出相似模式的 分段(segment )进行分组后,同一簇中的 分段(segment )可能会仍然包含尚未完全识别的复杂子模式。为了捕获细粒度的复杂子模式,NodeSentry 利用 Transformer 来增强时间上下文信息,而无需固定大小的窗口输入,从而提高检测性能 [29, 41]。此外,NodeSentry 将 MoE 结合在一起,通过将专家网络分配给簇内的不同段来实现模型共享。每个专家网络都可以专注于处理特定的子模式,从而提高性能和泛化能力 [52]。
对子模式进行建模的整体架构如图 3 所示。输入 MTS 是 Token 化的,每个标记都是一个向量,由每个时间点的指标值组成。然后,通过位置编码处理这些标记。NodeSentry 将 Transformer 中的密集 FFN 层替换为稀疏 MoE 层。该层由 N 个 FFN 组成,表示为 experts,并独立在 Token 上运行。MoE 层接收 Token $$x$$ 作为输入,并通过门控网络将其路由到一组 $$N$$ 个专家 $$E_i (x)}$$,路由变量 $$W_r$$ 计算结果 $$h(x) = W_r \cdot x$$. 专家 $$i$$ 的门限值 $$p_i$$ 是根据 $$h (x)_i$$ 计算得出的,由层中 $$B$$ 个 专家的 softmax 进行归一化,并表示每个专家与此输入的相关性。具有最高门限值的 top-k 专家,被认为是最适合处理这些数据的,将形成专家集 $$n$$,这些专家的加权结果将决定 MoE 层的输出 [16]:
每个 token 都分配给相应的专家,其结果 $$y$$ 将被送入解码器中以重建数据。在训练期间,根据专家的损失,将更新 MOE 层中的路由变量 $$W_r$$。门限网络学习如何更有效地为不同的数据子图案选择专家,而专家则专注于学习特定子图案。该模型是通过最小化输入数据和重建数据之间的差异来训练的,该数据由加 ** 权平方误差(WMSE)** 计算得出:
其中 $$M$$ 为度量元个数,$$W_i$$ 为权重,$$X_i$$ 和 $$X_i^\prime$$ 分别表示待检测节点第 $$i$$ 个度量元的原始数据和重构数据。为了衡量数据的稳定性,我们使用了平均绝对变化 (MAC):
其中 $$M$$ 是数据点的个数,$$x_t$$ 是第 $$t$$ 个观测值。我们根据每个簇的训练数据计算每个度量的 MAC,以获得 $$W$$。
值得注意的是,利用最接近聚类质心的 $$K$$ 段来训练共享模型构成了一种数据增强形式。结果,我们增强了 transformer 中的位置编码,以在不同的内部和之间合并位置信息分段。通过这种设计,Nodesentry 自然可以为每个聚类簇训练共享模型,而无需大量的训练数据和高训练开销。
# 3.5 在线异常检测
完成离线模型训练阶段后,我们为每个簇保存共享模型。在运行时,Nodesentry 执行与离线阶段相同的预处理步骤。然后,Nodesentry 在节点的工作过渡之后,在短时间内使用 MTS(例如 1 小时)来提取功能。 Nodesentry 计算这些特征与现有簇质心之间的距离,以匹配最相似的模式。最后,Nodesentry 采用相应的共享模型进行检测。
来自每个节点的 MTS 被馈入共享模型,该模型生成重建数据。输入和重建数据之间的重建误差表明输入 MTS 接近正常行为的概率,也称为异常得分。在阈值选择中,我们动态设置了异常得分的阈值。具体来说,我们沿时间轴定义了一个滑动窗口。当异常得分超过 K-Sigma 的上限时,数据点被认为是异常 [7]。在实践中,操作员经常设置 3 个 sigma 阈值。
鉴于数据的动态性质并且提前捕获所有可能的模式是不可能的,Nodesentry 的驱动需要通过识别最相似的数据来利用现有数据来检测未见过的模式。具体而言,当新模式可以与聚类库中的任何现有聚类匹配时,我们对现有模型进行增量微调以使其适应新模式的更改。对于无法匹配的模式,我们在这些新模式上执行聚类并相应地训练新模型。与具有大量数据的重新训练模型相比,该策略不仅显着提高了增量和转移学习的效率,而且还可以有效地解决节点中频繁的工作转变问题。
# 4. 评估
在本节中,我们评估了 Nodesentry 的性能,旨在回答以下研究问题:
・RQ1:Nodesentry 可以通过两阶段策略实现出色的异常检测性能吗?
・RQ2:Nodesentry 的每个模块是否对其性能产生重大贡献?
・RQ3:在有限的数据集使用有限的数据集后,Nodesentry 对 Nodesentry 产生了什么影响?
・RQ4:不同的超参数如何影响 Nodesentry?
# 4.1 实验设置
4.1.1 数据集。为了解决 RQ1-4,我们对从顶级全球 HPC 服务供应商的环境的生产中收集的两个数据集进行了广泛的实验。我们认为,对大型超级计算机系统的评估足以代表性。它们源自以各种节点硬件设计为特征的阵列。
为了防止数据泄漏,我们通过考虑它们各自的开始时间来将数据分为不同的培训和测试集。具体来说,我们将最初 60%的时间从训练集作为训练集使用,而从以后的时间为测试集的数据。表 2 列出了这些数据集的详细信息。此外,我们组织了专家使用我们的工具(请参阅第 4.2 节)标记测试集,结合工作调度列表和手动验证。通过将标记的异常样品的数量除以测试集中的总样本来得出异常比率。值得注意的是,这些性能异常不一定是故障,但可能表明潜在的效率低下或瞬态问题。
D1:我们从聚类中的一个数组中收集数据,其中包括 1,294 个节点和 13,379 个分配的作业,一周内,以 15 秒的间隔进行了采样。如图 4 所示,我们进行了一个现实世界的统计实验,即这些工作段中约有 94.9%的持续时间少于一天。一周的数据收集期被认为足以进行模型训练和验证。每个计算节点均可以 3,014 个指标进行监视,涵盖节点性能的多个维度。详细信息在表 3 中列出。如第 3.2 节所述,我们对每核指标进行清洗和降维,最终总共获得了 82 个指标。
D2:我们收集 30 个节点和 1,430 个分配的工作,在 8 天内以 15 秒的间隔采样。最初总共收集了 773 个相应的监视指标,并最终确定了 116 个指标。
我们之所以选择不使用公开可用的数据集,是因为它们缺乏工作调度列表的集成和节点的监视指标,这对于我们的目标至关重要。 Antarex3 数据集仅提供系统级的性能指标。虽然 Prodigy4 数据集涵盖节点,但它仅提供由模型而不是原始数据处理的中间文件。
4.1.2 基线方法。为了评估 Nodesentry 的有效性,我们将其与四种高级基线方法进行了比较:Prodigy [4],Ruad [30],examon [10] 和 ISC’20 [32]。我们不尝试监督的学习方法。 TPDS’18 [42] 和 Albadross [3] 采用机器学习分类器,这些分类器引入了模型复杂性和监督类型中的差异。重要的是,DeepHYDRA [37],Proctor [5] 和 examon [10] 利用半监督方法。 DeepHydra [37] 和 Proctor [5] 在很大程度上依赖其监督组件,而 ExaMon [10] 源自一项全面的分析,该分析既整合受监督和无监督的组件。为了确保进行公平的比较,我们专门选择了 ExaMon [10] 中使用的无监督方法进行评估。此外,我们不会选择针对非 HPC 系统(例如,微服务系统或 Web 系统)明确设计的异常检测方法,因为这些系统中的实例在运行时具有固定的任务,并展示了常规和周期性的数据模式。
我们配置所有这些方法的参数。具体来说,对于特定数据集并非特定的参数设置,我们使用相应论文中提到的相同配置。对于特定于数据集的参数设置,我们根据相应论文或数据集中提供的范围进行调整。
4.1.3 实验。所有实验均在离线验证平台上进行以下配置进行:我们使用 Python 3.8.10,Pytorch 2.0.1 和 Scikit-Learn 1.1.1 实施 Nodesentry 和基线方法,并在配备 64 × Intel (R) Xeon (R) Gold 5218 CPU @ 2.30GHz, two NVIDIA (R) Tesla (R) V100S, 和 187 GB RAM.。
4.1.4 评估指标。我们使用标准的点异常检测指标精度,召回曲线下的区域(AUC)和 F1 得分来评估所有方法的性能。此外,鉴于我们数据集中存在的多个计算节点,我们平均每个节点的精度,召回和 AUC 平均,而 F1 得分源自平均精度和召回率。考虑到运营经验的两种实际考虑,我们采用了以前的研究中广泛使用的调整策略 [3-5、10、30、32]:1)假设存在实际连续的异常时间戳,指定的方法在这些时间戳中确定了任何异常,我们将其视为准确检测。 2)我们故意从每个模式转换的初始和结束 1 分钟间隔中排除异常,其中某些指标可能会显着偏离预期值。
# 4.2 实验的标注工具
尽管该方法是一个无需标注数据的完全无监督异常检测方法,但其准确性仍然真实标注的验证。考虑到使用现有标签工具的高维标准标准的高成本、难度,缺乏明显的标注标准,以及使用现有标签工具处理高维度的挑战,我们开发了一种基于图形的用户界面工具,允许操作员调整 MTS 中的群集和标签异常。该工具在 Python 中使用 TKINTER 和 MATPLOTLIB 实现,代码库跨越约 1,600 行。图 5 描述了主要接口,包括以下功能:
1)它有助于选择显示或隐藏特定的度量尺寸,支持 MTS 的可视化,拖动和水平 / 垂直放大,并区分各种节点状态,从而为操作员提供增强的视角。
2)它使操作员能够通过指定开始时间和结束时间间隔来标记或取消异常间隔,从而将其保存为异常。为了减轻工作量,我们整合了多种异常检测方法(例如统计方法和深度学习方法),以帮助标记。
3)它结合了内置的聚类方法,并提供了数据分布的可视化。此外,它有助于簇的动态调整,并更新每个群集的质心。
我们根据工作调度列表和操作员的手动验证采用全面的方法,以避免未标注和遗漏。特别是,作业的最终失败不能完全归因于计算节点中的性能异常 [10]。它可能是由代码错误或存储资源不足引起的。此外,节点中的性能异常可能在工作失败之前表现出来 [13]。该原则也适用于闲置等待状态。因此,要确保精确标记的计算节点的实时异常检测必须变得重要。通过在执行工作期间检测异常,我们可以主动终止工作,以防止任何进一步的异常传播。当在闲置等待期间出现异常时,操作员可以实施隔离和缓解的措施。
# 4.3 总体表现(RQ1)
表 4 中显示了不同方法的性能。与所有基线方法相比,Nodesentry 获得了令人印象深刻的 0.876 和 0.891 F1 得分,相对于第二名而言,相对提高分别为 179.04%和 167.57%。通过粗粒的聚类和细粒度的模型共享捕获和学习不同作业中节点的模式特征的策略为 Nodesentry 的成功做出了贡献。其他方法 [4、10、30、32] 忽略了模式和副本的差异。在第 6 节中详细讨论了每个基线表现不佳的具体原因。相比之下,Nodesentry 量身定制的方法对节点行为的细微差别敏感,并通过实时动态和自适应选择模型来增强异常检测性能。
我们通过比较离线训练所需的时间与检测每个节点的平均时间来分析复杂性。 Nodesentry 的异常检测效率令人满意,平均时间检测每个时间点是否为异常不超过 2 毫秒。该潜伏期在可接受的异常检测范围内。值得注意的是,由于使用贝叶斯高斯混合模型(BGMM)聚类而不是深度学习模型,ISC 20 [32] 的开销最低,导致其性能最差。与其他深度学习基线方法相比,Nodesentry 证明了最佳的训练效率,相对提高了 77.93%和 13.45%的训练效率。
# 4.4 消融研究(RQ2)
为了证明 Nodesentry(即段聚类和模型共享)中关键组件的有效性,我们在两个数据集上进行消融实验,创建五个变体 C1-C5。 1)C1 去除粗粒聚类,仅使用单个模型。 2)C2 随机选择段来训练相同数量的模型,以替换由聚类过程产生的代表性分段。 3)C3 将不同长度的片段切成相等的长度。 4)C4 消除了在位置编码内区分段段的实践。 5)C5 用密集的 FFN 层代替稀疏的 MOE 层。
表 5 说明了在各种应用程序方面的 Nodesentry 的性能增强,超过了所有前面提到的替代方案的性能。这突出了每个组件在达到峰值性能方面的关键贡献。培训单独模型(C1)或采用选择随意的模型集合(C2)没收将数据分割为相干子集的能力,从而阻碍了磨练不同数据段的独特属性的能力。未能利用数据中的结构信息会导致性能下降。此外,粗粒聚类和细粒模型共享构成了异常检测的有效策略。不同长度的段包含不同量的信息,并且均匀处理这些信息会导致在工作信息表示(C3)中引起不平衡。采用这种变体可能会对模型异常检测的有效性和操作效率产生不利影响。使用模型共享模块,位置编码增强了在异质段(C4)识别位置信息的能力(C4)。相反,用致密的 FFN 层(C5)取代稀疏的 MOE 层会侵蚀适应性和多功能性。这归因于以下事实:MOE 层本质上更擅长管理数据的多样性和复杂性,这是 FFN 层通常不足的熟练程度。
# 4.5 增量训练(RQ3)
为了评估训练集大小的影响以及增量训练的有效性,我们辨别训练集大小和模型性能之间的牢固正相关。我们从最小的训练集开始进行实验,并逐步增加大小,直到达到完整的训练集。每个大小都是通过从完整数据集的分层随机采样得出的,从而确保了实验性有效性必不可少的随机性和公正性。模型训练遵循统一的参数设置,以排除外部变量的混淆影响。
如图 6(a)所示,实验发现表明,训练组尺寸较小,性能显着降低。这种现象可能是由于无法提供足够数据来培养强大模型的较小训练而产生的,因此导致 Nodesentry 对新模式的检测不足。 Nodesentry 的表演表现出明显的增强,并在训练集尺寸上升级,这证明了其精致的结构设计和明智的方法论选择。在仅可用数据有限的实际情况下,可以通过第 3.5 节中介绍的增量训练管道来优化异常检测的性能。
# 4.6 超参数灵敏度(RQ4)
我们讨论了 Nodesentry 六个超参数的影响。训练集大小的详细信息可在 §4.5 中找到。图 6 说明了不同的高参数设置对 F1 得分的影响。
1)粗粒聚类中的簇数。当 Nodesentry 的性能降至最优数值,但是一旦超过此阈值,它就会稳定。如第 3.3 节所述,Nodesentry 具有自主识别最有生产力的聚类数量的天生能力,从而在没有折衷的情况下保持了峰值性能。
2)MOE 的专家数量。数量不足的专家可能导致数据显着特征的不完整表示,而多余的可能会导致过度拟合,从而降低了普遍性。当专家的数量设置为 3 时,Nodesentry 会表现出色。
3)分配给每个令牌的专家数量。每个专家在识别子图案变化方面的专业化表明,巩固其产出可能会导致不必要的复杂性和潜在的不准确性。因此,当每个令牌都分配给一个专家时,Nodesentry 的表现最好。
4)图案匹配的时期。较短的时期不会捕获足够的上下文信息,从而降低了检测准确性。我们的实验表明,建议使用 1 小时供一般用途,并保留长期用于高智能应用。
5)选择阈值的时间窗口。 Nodesentry 在阈值选择方面表现出鲁棒性,非常适合不同的窗口长度。但是,为了确保计算效率和模型稳定性,建议使用较短的时间窗口(例如 15 分钟或 20 分钟),因为它们在不损害性能的情况下降低了计算复杂性。
# 5. 讨论
# 5.1 部署
Nodesentry 部署在配备 8 核,64 个线程处理器和 128 GB RAM 的专用节点上,旨在监视和分析生产环境群集的大小和配置与 D2 相当。在部署阶段,使用大规模原子 / 分子大规模平行模拟器(LAMMPS)[19] [19] 进行分子动力学模拟。同时,通过 Chaosblade5 Toolkit 系统地引入了故障注射方案(例如,磁盘完整,内存耗尽和 CPU 超载),以验证系统鲁棒性。在连续的一个月评估期内,Nodesentry 表现出有效的操作性绩效,平均每小时监测周期的模式匹配,并在 5.11 秒内完成,并实现每个采样点 36 毫秒的实时检测潜伏期。 Nodesentry 表现出强大的异常检测能力,在识别性能异常和注射故障时,精度和召回率分别为 0.857 和 0.923。
如图 7 所示,部署工作流都集成了离线和在线操作模式。当用户提交计算作业时,SLURM 作业调度程序会根据用户定义的参数(例如节点计数和运行时要求)动态分配 HPC 群集的资源。同时,Prometheus6 从所有节点收集粒度性能指标,将此遥测数据存储在时间序列数据库中以支持离线模型培训。在在线阶段,收集的数据将传递给实时检测 nodesentry。检测到异常后,Nodesentry 触发了对操作员的警报。
# 5.2 案例研究
在本节中,我们对 D1 进行了案例研究,以进一步证明 Nodesentry 的工作过程。如图 8 所示,节点 45 中的内存级故障导致指标中的异常。 Nodesentry 将检测到的工作模式与最相似的历史模式相匹配,并应用了学习的模型来检测异常。在每个时间点计算原始 MT 和重建的 MTS 之间的差异。 Nodesentry 在工作失败前 54 分钟检测到节点异常,使操作员能够尽早干预以防止工作失败。由于与内存相关的指标显示出显着下降,因此记忆不足被确定为工作失败的原因。与传统方法相比,Nodesentry 通过有效处理复杂的工作模式和子图案的表现出色,使其更适合 HPC 系统的动态和大规模性质。
# 5.3 限制和威胁
在在线检测过程中,Nodesentry 的局限性主要涉及节点的频繁工作过渡。及时,精确的模式匹配对于维护模型的准确性是必要的,而使用一定的时间。但是,实验表明这项时间投资被认为是可以接受的。
关于内部有效性威胁,我们进行了严格的重复实验测试,并迭代优化配置每个模块。实验结果代表了多个试验的平均值。 Nodesentry 还面临外部有效性威胁。该领域缺乏公开可用的数据集。我们使用大型超级计算机系统验证 Nodesentry。但是,这可能并不能完全代表所有 HPC 系统。但是,我们对 Nodesentry 的一般性充满信心。
# 6. 相关工作
HPC 系统中节点的各种异常检测方法可以大致分为三组:监督方法,半佩顿方法和无监督的方法。
监督方法。 TPDS 18 [42] 和 Albadross [3] 分别使用特征提取和特征选择技术。然后,他们训练机器学习分类器以检测不同的性能异常。这些方法需要使用标记的数据进行培训,其中包含正常样本和异常样本。但是,他们要求专家的广泛领域知识和标签工作,这通常是劳动密集型的。因此,对于大型 HPC 系统,这些方法几乎是不切实际的。
半监督方法。 DeepHydra [37] 将应用程序的密度空间聚类与噪声(DBSCAN)和基于学习的异常检测结合在一起,从而引入了半监督训练的基于监督的 MSE 基于 MSE 的损失功能。Proctor [5] 和 examon [10] 使用自动编码器(AE)进行异常检测。 Proctor [5] 学习隐藏的图层功能,以通过监督分类器来检测异常。另一方面,审查 [10] 结合了重建误差和分类概率的结果。与受监督的方法相比,它们仅需要相对少量的标记数据和大量未标记的数据进行培训。但是,这种限制限制了异常样品的建模能力。
无监督的方法。 Ruad [30] 利用长期记忆(LSTM)细胞,明确捕获时间依赖性。 Ruad [30] 需要为每个节点培训特定的深层模型,从而导致其他存储和调度要求。 ISC 20 [32] 采用 BGMM 和 Mahalanobis 距离来适合高斯分布,其能力仅使用机器学习有效地对 MTS 数据的复杂动态进行建模。 Prodigy [4] 是基于变异 AE(VAE)的异常检测框架。 ISC 20 [32] 着重于聚类整个段,而 Prodigy [4] 提取了以后的检测过程。最重要的是,它们俩都没有考虑在同一细分市场上可能会有很大变化的复杂子图案。
# 7. 结论
鉴于维持 HPC 系统中的操作稳定性的固有复杂性,我们提出了 Nodesentry,这是一种无监督的 MTS 异常检测框架,专门为 HPC 系统中的节点设计。 Nodesentry 将粗粒段聚类与细粒模型共享相结合,提高其可扩展性和效率,同时显着提高了异常检测准确性和概括能力。通过使用从生产 HPC 系统收集的数据进行广泛评估,我们证明了 Nodesentry 在异常检测获得高精度和高精度召回率方面的有效性。此外,为了促进可重复性,我们设有开源的 Nodesentry 代码库,并引入了专门为 HPC 系统设计的新型聚类调整和异常标签工具。



