☰
PaddleX 3.0 时间序列异常检测 Pipeline 实战:设备节点异常识别从训练到部署
2026/10/10 2:34:31 网站建设 项目流程
  • 人工智能
  • 大模型
  • 低代码
  • 计算机视觉
  • 深度学习
  • 模型推理服务

【免费下载链接】PaddleX

All-in-One Development Tool based on PaddlePaddle

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleX
点击查看免费下载

PaddleX 3.0 的时间序列异常检测 Pipeline 提供了一条从数据校验、模型训练、超参调优到集成部署的完整链路,适用于应用服务器节点、航天器遥测等场景中的异常行为识别。本文以 NASA PSM(Planetary Science Mission)数据集为例,从零演示如何使用 PatchTST_ad 等模型完成设备异常检测,并给出可复制的命令行、Python API 与配置文件。读完本文,你将掌握 PaddleX 时间序列异常检测 Pipeline 的选型、数据准备、训练评估、推理测试与生产部署全流程。

前置说明:使用前需先完成 PaddleX 安装,安装步骤参见 PaddleX 本地安装教程。本文所有命令基于当前仓库(gh_mirrors/pa/PaddleX)中的实现与配置文件,时间序列模型仅支持单卡训练。

1. 任务场景与 Pipeline 选型

时间序列异常检测的目标是识别并标记设备节点中的异常行为或状态,帮助企业和组织及时发现并解决应用服务器节点上的问题,从而提升系统可靠性与可用性。该任务属于典型的时间序列异常检测(Time Series Anomaly Detection, TSAD)范畴,因此选用 PaddleX 的Time Series Anomaly Detection Pipeline。

如果对任务与 Pipeline 的对应关系不确定,可参考 PaddleX Pipeline 列表(CPU/GPU) 概览各 Pipeline 能力。从仓库配置 ts_anomaly_detection.yaml 可以看到,该 Pipeline 由单一子模块TSAnomalyDetection组成,默认挂载DLinear_ad模型,整体结构简单直接:

pipeline_name: ts_anomaly_detection SubModules: TSAnomalyDetection: module_name: ts_anomaly_detection model_name: DLinear_ad model_dir: null batch_size: 1

对应的 Pipeline 实现类为 TSAnomalyDetPipeline,其predict方法直接委托给内部创建的时间序列异常检测模型实例,输入支持str路径、pd.DataFrame或其列表。

2. 快速体验

PaddleX 提供两种体验方式:本机运行与百度 AIStudio 社区。

本机体验:使用 Python API 一键创建模型并预测,示例代码如下:

from paddlex import create_model model = create_model("PatchTST_ad") output = model.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/ts/demo_ts/ts_ad.csv", batch_size=1) for res in output: res.print(json_format=False) res.save_to_csv("./output/")

AIStudio 社区体验:可访问官方时间序列异常检测应用在线体验该任务能力。

注意:由于时间序列数据与场景紧密相关,官方模型在线体验针对特定场景定制,并非通用方案,因此体验模式不支持使用任意文件评估官方模型效果。但使用自身场景数据训练模型后,可选择训练好的模型并配合对应场景的数据进行在线体验。

3. 模型选型与基准

PaddleX 提供 4 个端到端时间序列异常检测模型(仓库 model_list.py 中还注册了TimesNet_ad,可作为扩展候选)。下表为官方文档给出的基准,精度指标在 PSM 数据集 上、时间序列长度为 100 的条件下测得:

模型名称PrecisionRecallF1-Score模型存储大小 (MB)说明
DLinear_ad0.98980.39 / 0.160.69 / 0.080.1简单、高效、易用的时间序列异常检测模型
Nonstationary_ad0.98551.94 / 1.165.31 / 1.661.5面向非平稳时间序列优化、基于 Transformer 的模型
AutoEncoder_ad0.99360.24 / 0.130.41 / 0.050.052经典的自动编码器模型,高效易用
PatchTST_ad0.98782.10 / 0.556.98 / 0.630.164兼顾局部模式与全局依赖的高精度模型

注:以上指标为官方文档提供的参考值,实际效果会随数据集与超参数变化,请以自身数据集上的验证结果为准。

各模型的配置存放于 paddlex/configs/modules/ts_anomaly_detection/ 目录,每个模型一个.yaml文件,训练、评估、导出与预测的参数均可通过对应配置统一管理。

4. 数据准备与校验

4.1 数据准备

本教程使用公开的 MSL(Mars Science Laboratory)数据集演示完整的异常检测流程。该教程正文实际采用的 PSM 数据集源自 NASA,包含 55 个维度,记录了航天器监控系统上报的意外事件异常(ISA)遥测数据,具备实际应用背景,能更好地反映真实异常场景,常用于时间序列异常检测模型的测试与验证。

数据集格式说明可参考 时间序列异常检测模块开发教程。通过以下命令即可将演示数据集下载到指定目录:

cd /path/to/paddlex wget https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/doc_images/practical_tutorial/timeseries_anomaly_detection/msl.tar -P ./dataset tar -xf ./dataset/msl.tar -C ./dataset/

数据注意事项:

  • 时间序列异常检测是无监督学习任务,训练数据无需标注。采集的训练样本应尽量只包含正常数据(不含异常),训练集标签列可全部设为 0,或直接省略标签列。验证集为评估精度需要标注:异常时间点的标签设为 1,正常点设为 0。
  • 缺失值处理:为保证数据质量与完整性,可依据专家知识或统计方法对缺失值进行填充。
  • 时间单调性:数据必须按行、按时间先后顺序采集,时间戳不得重复。

从仓库校验实现 TSADDatasetChecker 可以看出,PaddleX 通过查找数据集根目录下唯一的train.csv来定位数据集根目录(get_dataset_root使用**/train.csvglob 并断言唯一),并支持convert_dataset(格式转换)与split_dataset(按train_percent/val_percent重新划分)两类可选操作。

4.2 数据校验

数据校验一条命令即可完成:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/PatchTST_ad.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/msl

执行成功后,PaddleX 会校验数据集、汇总其基本信息,并在日志中打印Check dataset passed !。校验结果文件保存在./output/check_dataset_result.json,相关输出(示例时间序列数据、类别分布直方图等)保存在当前目录的./output/check_dataset目录下:

{ "done_flag": true, "check_pass": true, "attributes": { "train_samples": 58317, "train_table": [ ["timestamp", "0", "1", "2", "..."], ["..."] ] }, "analysis": { "histogram": "" }, "dataset_path": "./dataset/msl", "show_type": "csv", "dataset_type": "TSADDataset" }

上述结果省略了部分数据内容。各字段含义如下:

  • attributes.train_samples:该数据集训练集样本数为 58317。
  • attributes.val_samples:该数据集验证集样本数为 73729。
  • attributes.train_table:训练集样本数据行。
  • attributes.val_table:验证集样本数据行。

其中check_pass为 True 表示数据集格式满足要求;dataset_type为TSADDataset,show_type为csv,与仓库中get_dataset_type/get_show_type的实现一致。

注意:只有通过校验的数据集才能用于训练与评估。

4.3 数据集格式转换/数据集切分(可选)

如需转换数据集格式或重新切分数据集,可参考 时间序列异常检测模块开发教程 中的对应章节。仓库在 CheckDataset 配置 中默认关闭了convert与split(enable: False),需要时通过-o CheckDataset.convert.enable=True或-o CheckDataset.split.enable=True配合src_dataset_type、train_percent、val_percent开启。

5. 模型训练与评估

5.1 模型训练

训练前请确保已完成数据集校验。使用以下命令即可完成 PaddleX 模型训练:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/PatchTST_ad.yaml \ -o Global.mode=train \ -o Global.dataset_dir=./dataset/msl \ -o Train.epochs_iters=5 \ -o Train.batch_size=16 \ -o Train.learning_rate=0.0001 \ -o Train.time_col=timestamp \ -o Train.feature_cols=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54 \ -o Train.freq=1 \ -o Train.label_col=label \ -o Train.seq_len=96

PaddleX 支持通过修改配置文件或追加命令行参数两种方式调整训练超参数,并支持单机单卡训练(时间序列模型仅支持单卡训练)。从 TSADTrainer 的get_train_kwargs实现可见,训练设备通过get_device(using_device_number=1)固定为单卡。

每个模型均提供一份模型开发配置文件,训练相关参数通过修改配置文件的Train字段设置。核心参数说明如下:

  • Global:
    • mode:模式,支持数据集校验(check_dataset)、模型训练(train)、模型评估(evaluate)、单例测试(predict)。
    • device:训练设备,可选cpu与gpu,可参考同目录下的 PaddleX 模型列表(CPU/GPU) 查看不同设备支持的模型。示例gpu:0表示使用第一张 GPU。
  • Train:训练超参数设置;
    • epochs_iters:训练轮数。
    • learning_rate:训练学习率。
    • batch_size:单卡训练批大小。
    • time_col:时间列,根据数据设置时间序列数据集的时间列列名。
    • feature_cols:特征变量,表示与设备是否异常相关的变量(支持逗号分隔列表;从 trainer.py 可见,若传入逗号分隔字符串会被拆分为列表后写入配置)。
    • freq:时间序列数据集的频率(采样间隔)。
    • input_len:模型输入的时间序列长度。时间序列将按该长度切片,模型预测该段序列是否存在异常。推荐结合实际场景确定输入长度,本教程输入长度为 96,即希望预测 96 个时间点是否存在异常。(注意:文档正文中训练命令写为-o Train.seq_len=96,配置文件中对应字段为input_len: 96,两者指向同一含义,实际使用请以配置文件字段input_len为准。)
    • label_col:时间序列中某时间点是否异常的数值标签列。异常点标记为 1,正常点标记为 0。

超参数更完整的说明可参考 PaddleX 时间序列任务模型配置文件参数说明。上述参数均可通过命令行参数追加设置,例如:指定模式为模型训练-o Global.mode=train;指定第一张 GPU 训练-o Global.device=gpu:0;设置训练轮数为 10-o Train.epochs_iters=10。

更多训练细节(点击展开)
  • 训练过程中,PaddleX 自动保存模型权重文件,默认目录为output,可通过配置文件中的-o Global.output字段指定其他保存路径。
  • PaddleX 对用户屏蔽了动态图权重与静态图权重的概念。训练过程中会同时产出动态图与静态图权重,默认使用静态图权重进行推理。
  • 训练其他模型时需指定对应配置文件,模型与配置文件的对应关系见 PaddleX 模型列表(CPU/GPU)。

模型训练完成后,所有输出保存在指定输出目录(默认./output/),通常包含:

  • train_result.json:训练结果记录文件,记录训练任务是否正常完成、输出权重指标及相关文件路径等。
  • train.log:训练日志文件,记录训练过程中模型指标变化、loss 值等信息。
  • config.yaml:训练配置文件,记录本次训练的超参数配置。
  • best_accuracy.pdparams.tar、scaler.pkl、.checkpoints、.inference*:模型权重相关文件,包括网络参数、优化器、静态图网络参数等。

其中best_accuracy.pdparams.tar由 TSADTrainer.make_tar_file 打包生成;scaler.pkl在推理阶段被 TSAdRunnerPredictor 读取,用于TSNormalize预处理归一化。

5.2 模型评估

训练完成后,可在验证集上评估指定模型权重文件以验证模型精度。PaddleX 模型评估只需一条命令:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/PatchTST_ad.yaml \ -o Global.mode=evaluate \ -o Global.dataset_dir=./dataset/msl

与训练类似,评估同样支持修改配置文件或追加命令行参数。评估时需指定模型权重文件路径,每个配置文件内置默认权重保存路径,如需更换可追加命令行参数,例如-o Evaluate.weight_path=./output/best_model/model.pdparams。

评估完成后会生成evaluate_result.json,记录评估任务是否成功完成,以及模型的评估指标,包括 F1、召回率(Recall)与精确率(Precision)。

5.3 模型调优

了解训练与评估后,可通过调整超参数提升模型精度。合理调整训练轮数可控制模型训练深度,避免过拟合或欠拟合;学习率的设置关系到模型收敛的速度与稳定性。因此调优时需仔细权衡这两个参数,并根据实际情况灵活调整。

基于控制变量法,时间序列异常检测可采用如下调参思路:

  1. 先将训练轮数固定为 5、批大小固定为 16、输入长度固定为 96。
  2. 基于 PatchTST_ad 模型,分别以学习率 0.0001、0.0005、0.001 启动三组实验。
  3. 结果显示实验 3 精度最高(学习率 0.001),因此固定学习率为 0.001,尝试将训练轮数增至 20。
  4. 结果显示实验 4 与实验 3 精度相同,说明无需继续增加训练轮数。

学习率探索结果:

实验Epochs学习率Batch Size输入长度训练环境验证集 F1 (%)
实验 150.000116961 GPU79.5
实验 250.000516961 GPU80.1
实验 350.00116961 GPU80.9

增加训练轮数结果:

实验Epochs学习率Batch Size输入长度训练环境验证集 F1 (%)
实验 350.00116961 GPU80.9
实验 4200.00116961 GPU80.9

以上调参结果为教程文档给出的参考实验数据,实际数值会因数据集与随机种子而异,重点是掌握“控制变量 + 单参数扫描”的调参方法。

6. Pipeline 测试

将 Pipeline 中的模型替换为微调后的模型进行测试,使用测试文件进行预测:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/PatchTST_ad.yaml \ -o Global.mode=predict \ -o Predict.model_dir="./output/inference" \ -o Predict.input="https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/doc_images/practical_tutorial/timeseries_anomaly_detection/test.csv"

预测时需指定以下内容:

  • 模型.yaml配置文件路径(此处为PatchTST_ad.yaml)。
  • 模式:-o Global.mode=predict(文档正文该处写为 evaluate,按预测场景应为predict)。
  • 微调模型目录:-o Predict.model_dir="./output/inference"。
  • 预测输入:-o Predict.input="...",支持本地 CSV 路径或可下载的 URL。

其他相关参数可通过修改.yaml配置文件中的Global与Predict字段设置,详见 PaddleX 时间序列任务模型配置文件参数说明。

从源码层面看,预测过程由 TSAdRunnerPredictor 组织:依次执行ReadTS(读取时间序列)、TSCutOff(按配置size截断)、TSNormalize(若模型带scaler.pkl则按训练时的归一化参数标准化)、BuildTSDataset(构造数据集)、TimeFeature(若配置启用则生成时间特征)、TStoArray/TStoBatch(转数组并组批),送入 runner 推理后再由后处理GetAnomaly完成异常判定。

异常判定原理:模型阈值

后处理GetAnomaly(processors.py)是理解整个异常检测输出的关键:

  1. 取模型预测值pred与原始序列ts(按past_target/observed_cov_numeric/known_cov_numeric/static_cov_numeric的优先级取值);
  2. 计算逐维度均方误差anomaly_score = mean(square(pred - ts), axis=-1)作为异常分数;
  3. 将异常分数与model_threshold(模型阈值)比较,anomaly_score >= model_threshold的位置标记为异常(标签 1),否则为 0;
  4. 输出以时间列为索引、label为列的 DataFrame。

最终结果由 TSAdResult 封装,支持res.print()打印、res.save_to_csv()保存为 CSV,并依赖matplotlib生成“Time Series Anomaly Detection”可视化图(visualize函数以红色阶梯线标注异常标签)。

7. 集成与部署

若通用时间序列异常检测 Pipeline 的推理速度与精度满足需求,可直接进行开发集成/部署。PaddleX 提供两种主要方式:

7.1 使用微调模型 + Python API 集成

如需使用微调后的模型权重,可先获取 ts_anomaly_detection 生产配置文件并保存到指定目录:

paddlex --get_pipeline_config ts_anomaly_detection --save_path ./my_path

将微调模型权重的本地路径填入生产配置文件中的model_dir。若需在 Python 项目中直接应用该 Pipeline,可参考以下配置示例:

pipeline_name: ts_anomaly_detection SubModules: TSAnomalyDetection: module_name: ts_anomaly_detection model_name: PatchTST_ad model_dir: ./output/inference # Fine-tuned model path batch_size: 1

然后执行以下代码完成预测:

from paddlex import create_pipeline pipeline = create_pipeline(pipeline="my_path/ts_anomaly_detection.yaml") output = pipeline.predict("pre_ts.csv") for res in output: res.print() res.save_to_csv("./output/")

Pipeline 层面对输入的支持见 TSAnomalyDetPipeline.predict:input可为str路径、pd.DataFrame或其列表,结果以TSAdResult生成器形式返回。更多参数可参考 时间序列异常检测 Pipeline 使用教程。

7.2 Serving 服务化部署

服务化部署是实际生产环境中的常见部署形态:将推理功能封装为服务,客户端通过网络请求即可获取推理结果。PaddleX 支持用户低成本实现 Pipeline 的服务化部署,详细步骤参见 PaddleX Serving 部署指南。仓库中已内置对应的服务化应用 ts_anomaly_detection.py,可直接对接。

可根据自身需求选择合适的方式部署模型 Pipeline,并进行后续 AI 应用集成。

总结

本文围绕 PaddleX 3.0 时间序列异常检测 Pipeline 走通了完整链路:任务选型(ts_anomaly_detectionPipeline)→ 快速体验(create_modelPython API)→ 模型选型(DLinear_ad / Nonstationary_ad / AutoEncoder_ad / PatchTST_ad)→ 数据准备与校验(check_dataset,TSADDataset 格式)→ 训练与评估(train/evaluate,单卡约束)→ 超参调优(控制变量法)→ Pipeline 测试(predict)→ 集成部署(create_pipeline+ Serving)。配套配置文件位于 paddlex/configs/modules/ts_anomaly_detection/ 与 paddlex/configs/pipelines/ts_anomaly_detection.yaml,推理链路实现见 paddlex/inference/models/ts_anomaly_detection/,模块训练与数据集校验见 paddlex/modules/ts_anomaly_detection/,可作为进一步深入源码的起点。

  • 人工智能
  • 大模型
  • 低代码
  • 计算机视觉
  • 深度学习
  • 模型推理服务

【免费下载链接】PaddleX

All-in-One Development Tool based on PaddlePaddle

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleX
点击查看免费下载

相关推荐

上一篇:一次点击把号码标上地图:简单的手机号码定位工具
下一篇:FF14钓鱼计时器:120秒倒计时,咬钩不再错过

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询