m
mengsihan/ibm-granite-granite-timeseries-patchtsmixer-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

Granite PatchTSMixer(granite-timeseries-patchtsmixer)昇腾 NPU 适配

#NPU #Ascend #Ascend910

模型:ibm-granite/granite-timeseries-patchtsmixer(revision 90dc5a88d45f032b7dceefb5d814ca2af54f2ff9)

任务:多变量时间序列预测(time-series-forecasting),ETTh1 数据集,context=512 小时 → prediction=96 小时。

架构:PatchTSMixerForPrediction(transformers 内置实现,MLP-Mixer 轻量时序预测模型)。权重约 0.75MB,可轻松运行于单卡昇腾 910B。

简介

PatchTSMixer 是一种基于 MLP-Mixer 的轻量多变量时间序列预测模型(KDD 2023)。本仓库在单卡昇腾 NPU(Ascend 910B)上完成了该模型的真实推理适配:使用 ETTh1 测试集真实序列,基于官方 TSFM 预处理契约(per-channel StandardScaler,在训练集前 8640 行上拟合),在 npu:0 上完成 512→96 步多通道点预测,并完成 CPU-NPU 数值一致性验证与性能测试。

数据契约

  • 数据来源:ETTh1.csv(官方 ETT 数据集,Apache-2.0 许可的公开电力变压器数据)。
  • 文件 SHA-256:f18de3ad269cef59bb07b5438d79bb3042d3be49bdeecf01c1cd6d29695ee066,共 17420 行 + 表头。
  • 列:date, HUFL, HULL, MUFL, MULL, LUFL, LULL, OT(7 个通道,按此固定顺序,不改变列序)。
  • 划分(与 IBM TSFM 官方示例一致):训练 [0, 8640)、验证 [8640-512, 11520)、测试 [11008, 14400)。
  • 预处理:对 7 个通道分别用 StandardScaler(z-score)在训练集上拟合;测试窗口先标准化再输入模型。
  • 输入张量:past_values 形状 [1, 512, 7],dtype float32;模型内部自带 MeanScaler(scaling: true),输出为已逆缩放的点预测。
  • 推理窗口:测试集内以固定随机种子 42 采样一个真实窗口(起始行 11256),前 512 步为 context,后 96 步为 ground truth。

环境

  • 硬件:单卡昇腾 Ascend 910B(npu:0),实测 2 卡环境,每卡 64GB HBM。
  • 操作系统 / CANN:Linux aarch64,CANN 8.5.1,torch 2.9.0 + torch_npu 2.9.0.post1。
  • 依赖:见 requirements.txt。

安装

pip install -r requirements.txt
# 昇腾 NPU 需先安装对应 CANN Toolkit + torch_npu,并验证:
python -c "import torch, torch_npu; print(torch.npu.is_available())"

NPU 推理

python inference.py                     # 自动下载模型权重与 ETTh1 数据,在 npu:0 推理
python inference.py --device npu:0 --seed 42
# 也可使用本地权重/数据:
python inference.py --model-dir /path/to/model --data-csv /path/to/ETTh1.csv

默认输出到 outputs/:forecast.npy(原始尺度预测 [96,7])、forecast_scaled.npy(标准化尺度模型输出 [1,96,7])、ground_truth.npy。退出码 0 表示成功。

真实结果(npu:0,seed=42,窗口起始行 11256)

模型输出 [1, 96, 7],指标基于原始尺度对比真实标签(ETTh1 测试集):

指标值
MAE(原始尺度)1.53418
RMSE(原始尺度)2.49243
MSE(标准化尺度)0.26028
稳定推理时延(均值)1.70 ms
峰值显存1.34 MB
首轮编译时延0.17 s

OT 通道前 5 步预测:[11.987, 11.993, 12.038, 12.377, 12.754]。

CPU-NPU 一致性

相同权重、相同数据窗口、相同预处理、相同 dtype(float32)、相同随机种子下:

指标值
max_abs_error3.33e-05
mean_abs_error1.02e-05
atol / rtol1e-4 / 1e-3
结论通过(passed=true)

未发生 CPU fallback;模型全部参数与输入张量位于 npu:0。

性能

预热 3 次后正式测试 12 次(每轮前后 torch.npu.synchronize()):

指标值
首轮(含编译)0.173 s
avg / min / max1.698 / 1.638 / 1.941 ms
p50 / p90 / p951.684 / 1.698 / 1.808 ms
峰值显存1.34 MB
吞吐(约)588 windows/s

batch=1,context=512,prediction=96,channels=7,dtype=float32。计时不含 CSV 读取与数据预处理。

证据图

以下图片由 xterm.js 根据本次真实运行日志渲染,非手工绘制:

  • assets/agent_workflow.png:完整适配流程(侦察 → 数据检查 → 下载 → 加载 → NPU 推理 → 一致性 → benchmark → 提交校验)。
  • assets/npu_device_call.png:NPU 设备调用证据(npu-smi、torch.npu.is_available()、模型参数 device/dtype、输入输出 Tensor device)。
  • assets/model_result.png:默认 python inference.py 的真实完整输出(schema、真实预测、同步耗时、状态)。

限制

  • 本模型为在 ETTh1 上预训练的轻量模型(约 0.75MB),仅适合使用相同 7 通道(HUFL/HULL/MUFL/MULL/LUFL/LULL/OT)的电力变压器时序数据;换数据集需重新微调。
  • config.loss="mse" 使模型为确定性点预测(distribution_output=None),因此使用 forward() 而非 generate()。
  • 单样本窗口一致性属于 smoke consistency,不代表完整测试集精度评测;完整测试集 MSE 见模型卡(约 0.37,标准化尺度)。
  • 数据标准化使用训练集拟合的 scaler;推理脚本默认自动下载模型与数据(需网络),也可指定本地路径离线运行。