g
gcw_coj3XaOd/Kairos_50m
模型介绍
文件和版本
Pull Requests
讨论
分析

Kairos-50M 昇腾NPU部署文档

1. 模型简介

模型名称: mldi-lab/Kairos_50m

模型链接: HuggingFace

模型描述: Kairos-50M 是一个 5000 万参数的时序预测基础模型,支持零样本跨域时序预测。该模型采用动态分块分词器(Dynamic Patching Tokenizer)、混合大小编码器(Mixture-of-Size Encoder)和动态旋转位置编码(DRoPE),能够处理具有不同信息密度的异构时序数据。

模型架构: Transformer Encoder-Decoder + MoE(混合专家)

参数规模: ~50M(50,128,384 参数)

训练数据: PreSTS 语料库(3000 亿+时间点)

核心特性:

  • 动态分块分词器:根据局部信息密度自适应选择分词粒度
  • 动态旋转位置编码(DRoPE):为实例级频谱特征和动态分块定制位置编码
  • 零样本预测:无需微调即可跨域泛化
  • 概率预测:输出 9 个分位数(0.1~0.9)的概率预测结果

2. 环境依赖

依赖项版本要求说明
Python>= 3.10推荐 3.11
torch2.1.0+与 torch_npu 匹配
torch_npu2.1.0+昇腾 NPU 后端
transformers>= 4.45.0HuggingFace 库
jaxtypinglatest类型标注依赖
昇腾驱动CANN 8.0.RC2+推荐最新版

安装命令:

pip install torch torch_npu transformers jaxtyping

模型代码: 本模型使用 tsfm 库,需从 GitHub 获取模型代码:

git clone https://github.com/foundation-model-research/Kairos.git

3. 推理步骤

3.1 环境准备

# 检查 NPU 设备
npu-smi info

# 确认 Python 环境
python3 -c "import torch_npu; print(torch.npu.device_count(), torch.npu.get_device_name(0))"

3.2 文件结构

将模型文件和推理脚本放在同一目录下:

Kairos_50m/
├── config.json              # 模型配置文件
├── model.safetensors         # 模型权重(从 HuggingFace 下载)
├── inference.py              # 推理脚本
├── tsfm/                     # 模型代码(从 GitHub 获取)
│   ├── __init__.py
│   └── model/
│       └── kairos/
│           ├── __init__.py
│           ├── configuration_kairos.py
│           ├── modeling_kairos.py
│           └── ...
├── requirements.txt
└── README.md

3.3 运行推理

# NPU 推理(默认 context_length=2048, prediction_length=64)
python3 inference.py --device npu:0

# CPU 推理
python3 inference.py --device cpu

# 自定义参数
python3 inference.py --device npu:0 --context_length 1024 --prediction_length 96 --seed 42

3.4 推理参数说明

参数类型默认值说明
--devicestr自动检测推理设备(npu:0 / cpu)
--model_pathstr当前目录模型路径
--context_lengthint2048输入序列长度
--prediction_lengthint64预测序列长度
--seedint42随机种子

3.5 Python API 调用

import sys
sys.path.insert(0, "/path/to/Kairos_50m")
sys.path = [p for p in sys.path if not ('/.local' in p and 'torch' in p.lower())]

import torch
from tsfm.model.kairos import AutoModel

# 加载模型
model = AutoModel.from_pretrained("/path/to/Kairos_50m", trust_remote_code=True)
model = model.to("npu").eval()

# 准备输入:时序序列 (batch, context_length)
past_target = torch.randn(1, 2048).to("npu")

# 推理
with torch.no_grad():
    forecast = model(
        past_target=past_target,
        prediction_length=64,
        generation=True,
        preserve_positivity=True,
        average_with_flipped_input=True
    )

# 输出:预测结果 (batch, num_quantiles, prediction_length)
predictions = forecast["prediction_outputs"]
print(predictions.shape)  # torch.Size([1, 9, 64])

# 提取中位数预测(第 5 个分位数 = 0.5)
median_forecast = predictions[0, 4, :]
print(median_forecast)

4. 测试样例及输出结果

样例 1:正弦波时序预测

输入: 2048 个时间点的正弦波序列

python3 inference.py --device npu:0 --seed 42

输出:

[模型] mldi-lab/Kairos_50m
[设备] Ascend910_9362 (npu:0)
[输入] 时序序列 (context_length=2048)
[输出] 预测shape=(1, 9, 64), 中位数范围=[-0.0146, 0.3856]
[耗时] 153.7ms
[状态] SUCCESS

样例 2:随机游走序列预测

输入: 2048 个时间点的随机游走序列(seed=123)

输出:

预测 shape: (1, 9, 64)
预测范围: [2.1765, 3.9982]

样例 3:常量信号预测

输入: 2048 个时间点,值恒为 5.0

输出:

中位数预测均值: 5.0020 (期望值 ~5.0)
中位数预测标准差: 0.0201

5. Agent适配截图

5.1 Agent适配全过程截图

Agent 适配流程

5.2 NPU设备调用截图

NPU 设备调用

5.3 模型适配结果截图

模型适配结果


6. 精度评测

测试数据: 合成时序数据(正弦波、随机游走、常量信号)

评测指标:

测试场景MAERMSE80%区间覆盖率
正弦波 (2048→64)0.00370.0045100.00%
常量信号--均值偏差 0.002
随机游走--范围合理

7. 注意事项

  • 模型权重文件(model.safetensors,约 191MB)需自行从 HuggingFace 下载
  • 模型代码(tsfm 库)需从 GitHub 克隆获取
  • 推理脚本通过 torch_npu 调用昇腾 NPU
  • 模型输出 9 个分位数(0.1, 0.2, ..., 0.9)的概率预测,索引 4 对应中位数(0.5)
  • sys.path 过滤需保留 .local 路径中的非 torch 依赖(如 jaxtyping)
  • 模型为 Encoder-Decoder 架构,不支持 vLLM-Ascend,请使用 torch_npu 推理