使用 TFX 如何检测国际空间站遥测数据的异常
2020 年 4 月 9 日
来自空中客车的 Philipp Grashorn、Jonas Hansen 和 Marcel Rummens 的客座文章

国际空间站及其不同的模块。空中客车于 2008 年设计并建造了哥伦布舱。
空中客车为 哥伦布舱 及其在 国际空间站 (ISS) 上的有效载荷的运行提供多种服务。哥伦布舱于 2008 年发射,是国际空间站的主要实验室之一。为了确保机组人员以及哥伦布舱上的数百个系统的健康,工程师必须跟踪许多遥测数据流,这些数据流不断地被传送到地球。

哥伦布控制中心的运营团队与空中客车合作,跟踪数千个参数,并以 24/7 轮班的方式进行监控。如果操作员检测到异常,他或她会创建一个异常报告,由空中客车的系统专家解决。空中客车的团队创建了 ISS Analytics 项目,以自动化部分异常检测工作流程。
以前的手动工作流程

检测异常

哥伦布舱由几个子系统组成,每个子系统又由多个组件组成,总共有约 17,000 个独特的遥测参数。由于每个子系统都高度专业化,因此为每个子系统训练一个单独的模型是有意义的。

Lambda 架构

为了在实时遥测数据流中检测异常,这些模型是在大约 10 年的历史数据上训练的,这些数据不断地被传送到地球并存储在一个专门的数据库中。平均而言,数据以每秒一次的频率传输。仅仅查看过去 10 年的数据就会产生超过 5 万亿个数据点(10 年 * 365 天 * 24 小时 * 60 分钟 * 60 秒 * 17,000 个参数)。

如此大规模的问题需要大数据技术以及通常只有在云中才能找到的计算能力。目前已经采用了公有云,但是随着未来更多敏感系统的集成,为了安全起见,该项目必须迁移到空中客车的私有云。

为了解决这个异常检测问题,设计了一个 lambda 架构,它由两个部分组成:速度层和批处理层。
ISS Analytics 的高级架构
批处理层仅由学习管道组成,它由从内部数据库中查询的历史时间序列数据提供。使用内部 Spark 集群,对数据进行清理并准备上传到 GCP。 Kubeflow 上的 TFX 用于训练 LSTM 自动编码器(下一节中详细介绍),并使用 TF-Serving 部署它。

速度层负责监控实时遥测流,该流是使用地球上的多个地面站接收的。监控过程使用已部署的 TensorFlow 模型来检测异常并将其与先前检测到的异常数据库进行比较,从而简化了根本原因分析并缩短了解决时间。如果神经网络检测到异常,则会触发一个报告服务,该服务会整合与潜在异常相关的所有重要信息。然后,通知服务会创建一个摘要并通知相应的专家。

训练自动编码器以检测异常

如上所述,每个模型都针对遥测参数的子集进行训练。该模型的目标是表示子系统的标称状态。如果模型能够以高精度重建标称状态的观测值,则它将难以重建偏离标称状态的观测值。因此,模型的重建误差在推理过程中用作异常指示器,并且在训练过程中用作成本函数的一部分。有关此做法的详细信息可以在 这里这里 找到。

上面概述的异常检测方法使用了一种称为 自动编码器 的特殊类型的人工神经网络。自动编码器可以分为两个部分:编码器和解码器。编码器是从输入空间到更低维潜在空间的映射。解码器是从潜在空间到重建空间的映射,其维数等于输入空间。

编码器生成输入的压缩表示,而解码器使用来自编码器的潜在向量生成尽可能接近原始输入的表示。降维充当漏斗,使自动编码器能够忽略信号噪声。

输入和重建之间的差异称为重建误差,并计算为均方根误差。如上所述,重建误差在训练步骤中被最小化,并在推理过程中充当异常指示器(例如,异常将具有高重建误差)。
自动编码器的示例架构

用于序列的 LSTM

自动编码器使用 LSTM 来处理序列并捕获时间信息。每个观测值都表示为形状为 [特征数,每个序列的时间步数] 的张量。数据使用 TFT 的 scale_to_0_1 vocabulary 函数进行准备。编码器的每个 LSTM 层之后都跟着一个 tf.keras.layers.Dropout 实例,以提高对噪声的鲁棒性。
ISS Analytics 的模型架构(红色圆圈表示 dropout)

使用 TFX

已开发的解决方案包含 TensorFlow Extended (TFX) 的许多组件,但并非全部。然而,计划在未来研究和集成 TFX 套件中包含的其他组件。

在这个解决方案中最常用的库是 tf.Transform,它处理原始遥测数据并将其转换为与自动编码器模型兼容的格式。预处理步骤在 preprocessing_fn() 函数中定义,并在 Apache Beam 上执行。生成的转换图以封闭的方式存储在训练模型的图中。这确保了原始数据始终使用相同的函数进行处理,而与部署环境无关。这样,馈送到模型的数据就一致了。

前面部分概述的基于序列的方法提出了一些挑战。模型训练的 input_fn() 读取在前面的 tf.Transform 步骤中预处理的数据,并应用窗口函数以创建序列。此步骤是必要的,因为数据存储为时间步长,没有任何序列信息。之后,它创建大小为 序列长度 * 批次大小 的批次,并将整个数据集转换为稀疏张量以用于自动编码器的输入层(tf.contrib.feature_column.sequence_input_layer() 需要稀疏张量)。

另一方面,serving_input_fn() 从上游系统(来自 ISS 的数据流)接收已排序的数据。但这些数据尚未预处理,因此必须应用 tf.Transform 步骤。此步骤之前和之后是重塑调用,以便临时删除张量的序列维以便执行 preprocessing_fn()

机器学习管道的所有部分(转换、训练、评估)的编排是使用 Kubeflow Pipelines 完成的。该工具包简化并加速了模型训练、实验不同架构和优化超参数的过程。通过利用 GCP 上的 Kubernetes 的优势,可以非常方便地并行运行多个实验。结合 Kubeflow UI,可以以结构化的形式分析这些运行的超参数和结果。为了更详细地分析特定模型和运行,TensorBoard 用于检查学习曲线和神经网络拓扑结构。

此 TFX 用例中的最后一步是通过使用 TensorFlow Serving 部署训练后的模型来连接批处理层和速度层。事实证明,这是 TFX 最重要的组件,它实际上将整个机器学习系统投入生产。它对基本监控、标准化 API、轻松回滚和 A/B 测试等功能的支持对该项目至关重要。

借助 TFX 管道的模块化设计,可以针对哥伦布舱的许多子系统训练单独的模型,而无需进行任何重大修改。将这些模型作为独立服务在 Kubernetes 上运行,可以扩展解决方案,以便并行将异常检测应用于多个子系统。

在 Kubeflow 上使用 TFX 为该项目带来了许多好处。其灵活的特性允许在不同环境之间无缝过渡,并将帮助即将迁移到空中客车的私有云。此外,该项目完成的工作可以重新用于其他产品,而无需进行重大返工,利用通用且可重用的 TFX 组件的开发。

结合所有这些功能,该系统现在能够分析大量遥测参数,检测异常并触发必要的步骤,以实现更快、更智能的解决方法。
ISS Analytics 项目之后的部分自动化工作流程
要了解有关空中客车的更多信息,请查看 空中客车网站 或深入了解空中客车的 空间基础设施。要了解有关 TFX 的更多信息,请查看 TFX 网站,加入 TFX 讨论组,深入了解 TFX 博客 中的其他文章,或观看 YouTube 上的 TFX 播放列表

下一篇文章
How Airbus Detects Anomalies in ISS Telemetry Data Using TFX

来自空中客车的 Philipp Grashorn、Jonas Hansen 和 Marcel Rummens 的客座文章

空中客车为 哥伦布舱段 及其载荷在 国际空间站 (ISS) 上的运行提供多种服务。哥伦布舱段于 2008 年发射,是 ISS 上的主要实验室之一。为了确保机组人员以及哥伦布舱段上数百个系统的健康,工程师们 ha…