w
gcw_uQ09W7jl/mldi-lab-Kairos_50m-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

Kairos-50M (NPU)

#NPU — Kairos-50M time-series foundation model (T5-based encoder-decoder with DRoPE + mixture-of-experts dynamic patching) running real zero-shot forecasting inference on an Ascend 910 NPU (npu:0).

模型简介

Kairos-50M 是约 5000 万参数的时间序列基座模型,支持零样本 (zero-shot) 多域预测。它采用动态分块 tokenizer、mixture-of-size 编码与 Dynamic Rotary Position Embedding (DRoPE) 处理异构时间序列。本仓库将其真实权重迁移到昇腾 NPU 完成端到端推理验证。

  • 模型: mldi-lab/Kairos_50m(revision b788434d)
  • 架构: KairosModel(kairos model_type)
  • 任务: 时间序列概率预测(9 个分位数 quantiles: 0.1–0.9)
  • 参数: 50,128,384
  • 上下文: 2048,预测长度: 64

数据契约

  • 数据: ETTh1 公开电力负荷时间序列(Target 列,单变量)。
  • 数据来源: 官方 Kairos quickstart 样例 ETTh1_sample.csv(2768 行)或 ETDataset 的 ETTh1.csv。
  • 输入: [1, 2048] float32 一维时间序列切片(past_target)。
  • 输出: [1, 9, 64] float32,维度为 [batch, quantile, horizon],已逆缩放(inverse transform)。
  • 预处理: 使用模型内置 InstanceNorm 实例归一化(log 缩放),推理后自动逆缩放,无需外部预处理器。
  • 未提供标签,故不做监督指标;以 CPU-NPU 输出数值一致性验证正确性。

环境

  • 昇腾 NPU: Ascend 910 (Ascend910_9362)
  • CANN: 8.5.1
  • Python: 3.11
  • torch: 2.9.0 + torch_npu 2.9.0

安装

pip install -r requirements.txt

模型权重(config.json + model.safetensors,约 200 MB)需放置于本地 ./model 目录。因 trust_remote_code 代码已内嵌于 inference.py,无需外部联网下载模型代码。

NPU 推理

python inference.py --model-dir ./model
# 可选数据文件:
python inference.py --model-dir ./model --data-csv ETTh1_sample.csv
# 性能基准(预热 3 次 + 测试 10 次):
python inference.py --model-dir ./model --data-csv ETTh1_sample.csv --benchmark

脚本将模型与所有参与计算的 Tensor 显式迁移到 npu:0,通过 torch.npu.synchronize() 计时,首轮编译与稳定推理分开报告。

真实结果

真实 NPU 推理(context=2048, horizon=64, ETTh1):

output shape: (1, 9, 64) | device: npu:0 | dtype: torch.float32
quantiles: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
median forecast (first 8): [11.875, 9.731, 9.574, 8.986, 7.701, 7.081, 7.036, 7.124]
STATUS: SUCCESS

一致性验证

CPU 与 NPU 使用相同权重、输入、预处理、dtype 与随机种子对比,比较原始 forecast 张量:

forecast shape CPU/NPU: (1, 9, 64) (1, 9, 64)
max_abs_error: 0.00000668
mean_abs_error: 0.00000185
consistency: PASS (atol=1e-4, rtol=1e-3)

FP32 阈值 atol=1e-4, rtol=1e-3,最大绝对误差 ~6.7e-6,远低于阈值,CPU-NPU 输出一致。

性能

单样本(window)预测,稳定阶段(预热 3 次、测试 10 次):

指标数值
首轮编译时间0.56 s
平均推理70.54 ms
最小 / 最大70.18 / 71.13 ms
p50 / p90 / p9570.46 / 70.76 / 70.95 ms
吞吐量~14 windows/s

batch size=1,context=2048,horizon=64,dtype=float32。

证据图

以下三张图由 xterm.js 根据本次真实日志生成(非手工构造,仅作展示标签,不证明服务器身份):

  • agent_workflow — 侦察、下载、CPU 基线、NPU 推理、一致性、性能全流程
  • npu_device_call — npu-smi 与 NPU 设备可用性、设备名
  • model_result — 默认 python inference.py 真实完整输出

适配说明与限制

  • 唯一代码级修改: 将 torch.fft.rfft 的复数 torch.abs 替换为等价的 sqrt(re^2+im^2)(基于 torch.view_as_real),以规避昇腾 aclnnAbs 对 complex64 的支持缺失;数值与 torch.abs 一致(已用 allclose 验证)。其余为纯环境适配,未做任何算子级改写,无 CPU fallback。
  • 模型权重为 fp32;未做量化。
  • 本仓库不提交权重、数据集、日志、缓存或凭据。
  • 单样本一致性为 smoke consistency,非完整 benchmark 排名。