#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)Target 列,单变量)。ETTh1_sample.csv(2768 行)或 ETDataset 的 ETTh1.csv。[1, 2048] float32 一维时间序列切片(past_target)。[1, 9, 64] float32,维度为 [batch, quantile, horizon],已逆缩放(inverse transform)。InstanceNorm 实例归一化(log 缩放),推理后自动逆缩放,无需外部预处理器。Ascend910_9362)pip install -r requirements.txt模型权重(config.json + model.safetensors,约 200 MB)需放置于本地 ./model 目录。因 trust_remote_code 代码已内嵌于 inference.py,无需外部联网下载模型代码。
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: SUCCESSCPU 与 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 / p95 | 70.46 / 70.76 / 70.95 ms |
| 吞吐量 | ~14 windows/s |
batch size=1,context=2048,horizon=64,dtype=float32。
以下三张图由 xterm.js 根据本次真实日志生成(非手工构造,仅作展示标签,不证明服务器身份):
— 侦察、下载、CPU 基线、NPU 推理、一致性、性能全流程
— npu-smi 与 NPU 设备可用性、设备名
— 默认 python inference.py 真实完整输出torch.fft.rfft 的复数 torch.abs 替换为等价的 sqrt(re^2+im^2)(基于 torch.view_as_real),以规避昇腾 aclnnAbs 对 complex64 的支持缺失;数值与 torch.abs 一致(已用 allclose 验证)。其余为纯环境适配,未做任何算子级改写,无 CPU fallback。