Kairos-50M(mldi-lab/Kairos_50m)——一款自适应时间序列基础模型(arXiv:2509.25826),专为零样本预测设计,已通过 torch_npu 完成昇腾 NPU 适配。
Kairos-50M 是一个拥有 5000 万参数的时间序列基础模型,在 PreSTS 语料库(超过 3000 亿个时间点)上完成预训练。该模型采用动态分块分词器(大小混合专家 MoE)、由 FFT 频谱特征驱动的实例级动态旋转位置编码(DRoPE),以及带有 eager attention 机制的 T5 风格编码器-解码器架构。模型可针对长达 2048 个点的输入上下文,输出 9 分位数(0.1 至 0.9)预测结果。
架构信息(来自 config.json):
model_type:kairos,d_model:512,编码器 6 层,解码器 6 层(分为 2 个解码器段),num_heads:8,d_kv:64,d_ff:2048input_patch_size:128,input_patch_stride:128,levels:3,MoE n_activated_experts:3,n_null_experts:2position_embedding_type:instance_wise_rope,instance_rope_input_feature_dim:128,rope_init:exp,scale_method:logcontext_length:2048,prediction_length:每段 64(最大单次推理范围 2 × 64 = 128)[0.1, ..., 0.9],约 5013 万参数,fp32 精度Kairos 官方模型代码(来自 github.com/foundation-model-research/Kairos 的 tsfm 包)已内置到 tsfm/ 目录中。该架构对 NPU 天然友好——T5 attention 采用 eager matmul 实现(不依赖 flash-attention 或 SDPA),动态分块、MoE 路由(topk/bincount)、InstanceNorm(nanmean)以及复数旋转位置编码(torch.polar/view_as_complex)均可在 NPU 上原生运行。
唯一一处源码修改(patches/kairos_ascend_npu.diff,位于 tsfm/model/kairos/modeling_kairos.py::fft_process):NPU 不支持对 complex64 类型的 rfft 输出执行 torch.abs 操作(报错 aclnnAbs 错误码 161002),因此幅度改为手动计算为 sqrt(real^2 + imag^2)(与 torch.abs 相比最大误差 4.8e-6)。其余部分零代码改动。
vLLM-Ascend 0.18 未对自定义的 kairos 编码器-解码器架构提供注册支持,因此推理服务采用 torch_npu + FastAPI 方案部署。
python3 download_model.py # -> /data/.cache/models/mldi-lab/Kairos_50m权重文件从 GitCode HF 镜像 获取
(https://ai.gitcode.com/hf_mirrors/mldi-lab/Kairos_50m,通过 resolve API 指向 LFS CDN,
使用 12 条并行字节范围连接),并以 hf-mirror.com 作为备用源;sha256 校验值
与 HF LFS oid(c68503d9…,200,551,636 字节)比对验证。
KAIROS_DEVICE=npu:1 PORT=8057 ./start_serve.sh
# or:
python3 server.py --port 8057import json, urllib.request
payload = json.dumps({
"past_values": [[...], [...], [...]], # [C, T] (each row = one series, T >= 2048)
"prediction_length": 64, # horizon <= 128
}).encode()
req = urllib.request.Request("http://localhost:8057/v1/forecast",
data=payload, headers={"Content-Type": "application/json"})
with urllib.request.urlopen(req) as resp:
out = json.loads(resp.read())
print(out["prediction"]) # [C, 9, L] quantile forecastspython3 make_test_data.py
python3 inference.py --input-json demo_series.json --device npu:1| 上下文长度 | 预测步长 | 延迟(NPU p50) | CPU p50 | 显存占用 |
|---|---|---|---|---|
| 2048 | 64 | ~78 毫秒 | ~260 毫秒 | ~398 MB(进程) |
首次请求包含 aclnn 算子编译(约 0.5 秒);稳态阶段已实现
内核缓存。NPU 与 CPU(fp32,相同检查点)预测结果的 余弦
相似度 = 1.0000000000 / 最大绝对误差 ≤ 5.72e-6,约 3.5 倍加速 ——
详见 verify_npu_vs_cpu.py。
inference.py — KairosEngine(库 + 命令行接口)server.py — FastAPI /v1/forecast、/health 接口download_model.py — 权重下载 + sha256 校验make_test_data.py / test_server.py / verify_npu_vs_cpu.py — 演示与验证脚本tsfm/ — 内置官方 Kairos 模型代码(含 1 处 NPU 补丁)patches/kairos_ascend_npu.diff — 唯一的源码改动权重文件不包含在本仓库中;请使用
download_model.py 进行下载。