冬
gcw_IDzXRVNw/timer-base-84m-ascend
模型介绍
文件和版本
Pull Requests
讨论
分析

Timer-Base-84M 昇腾 NPU 适配部署文档

1. 模型简介

Timer 是来自论文 Timer: Generative Pre-trained Transformers Are Large Time Series Models 的时间序列基础模型。

本模型是 84M 参数版本,在 260B 时间点上预训练得到,是一个轻量级的生成式 Transformer,用于零样本点预测。

模型架构

属性值
模型类型TimerForPrediction (Causal Transformer)
参数量84.14M
隐藏层维度1024
Transformer 层数8
Attention 头数8
Context Lengthup to 2880
Patch Length96
预测长度96
权重精度float32

模型特点

  • 生成式预测: 基于 Causal LM 的时间序列生成
  • 零样本预测: 无需微调即可预测多种时间序列
  • Patch 化: 输入被分成 96 长度的 patch 进行处理
  • 无 Tokenizer: 直接操作原始浮点时间序列
  • 多数据集预训练: 在 UTSD 和 Salesforce 数据集上预训练

输入输出格式

  • 输入: 形状 (batch_size, lookback_length) 的时间序列(浮点数)
  • 输出: 形状 (batch_size, forecast_length) 的预测序列

2. 环境依赖清单

2.1 硬件要求

  • 华为昇腾系列 AI 处理器(Ascend 910B/310P 等)
  • 建议 ≥ 1 GB NPU 显存(Timer-base-84M 推理峰值约 404 MB)
  • 本次实测使用 910B2(单卡 64 GB)

2.2 软件依赖

依赖项版本要求说明
操作系统CentOS 7.6+ / Ubuntu 18.04+支持主流 Linux 发行版
CANN5.0.RC2+华为昇腾计算架构
Python3.10 / 3.12推荐 3.10+
PyTorch2.0.0+推荐 2.10
torch_npu与 PyTorch 版本匹配昇腾 PyTorch 扩展
transformers4.40.1模型加载(必须此版本)
accelerate0.20+device_map 需要

2.3 安装方式

# 1) 激活已预装 torch / torch_npu 的 conda 环境
conda activate pt2100

# 2) 安装模型依赖(使用华为云源)
pip install --index-url https://repo.huaweicloud.com/repository/pypi/simple \
    transformers==4.40.1 accelerate

# 3) 验证环境
python -c "
import torch, torch_npu
print('torch:', torch.__version__)
print('torch_npu:', torch_npu.__version__)
print('NPU 可用:', torch.npu.is_available())
"

3. 分步推理操作流程

步骤 1:准备工作目录

# 进入适配目录
cd /workspace/agent/timer-base-84m-ascend

# 确认上游权重存在
ls -la /workspace/agent/timer-base-84m/

# 期望输出:config.json model.safetensors (~321MB) modeling_timer.py ...

步骤 2:检查 NPU 环境

# 检查 NPU 设备状态
npu-smi info

# 验证 torch_npu 安装
python -c "import torch; import torch_npu; print('NPU 可用:', torch.npu.is_available())"

步骤 3:运行推理脚本

# 基本用法:默认参数 (lookback=2880, forecast=96)
python inference.py --device npu:0

# 查看 NPU 显存使用
python inference.py --device npu:0 --show_npu_memory

# 自定义参数
python inference.py --device npu:0 --lookback 2880 --forecast 192

# 指定其他 NPU 卡
python inference.py --device npu:1

# CPU 模式(仅在 NPU 不可用时使用)
python inference.py --device cpu

4. 完整测试用例

测试用例 1:标准预测(NPU:0, forecast=96)

conda activate pt2100
cd /workspace/agent/timer-base-84m-ascend
python inference.py --device npu:0 --show_npu_memory --lookback 2880 --forecast 96

实际输出:

[W819 02:20:38.558097590 FunctionLoader.cpp:48] Warning: LD_PRELOAD detected...
[W819 02:20:44.298203430 NPUCachingAllocator.cpp:198] Warning: The current CANN and Soc Version require processing for 32 padding size...
[设备] npu:0
NPU设备数量: 1
  设备 0: Ascend910B2
[权重信息] 文件: /workspace/agent/timer-base-84m/model.safetensors
[配置] 模型类型: timer
[配置] hidden_size: 1024
[配置] num_hidden_layers: 8
[配置] input_token_len: 96
[配置] output_token_lens: [96]
[配置] torch_dtype: float32
[参数量] 84.14M

加载模型 (使用 trust_remote_code)...

模型: Timer (时间序列预测)
  - 任务: 时间序列预测 (Generative Transformer)
  - 参数量: 84.14M
  - Lookback长度: 96 (patched)
  - 预测长度: [96]
[NPU显存 · 模型加载后] 总显存=61.0GB | 已分配=401.0MB | 缓存=482.00MB | 峰值=401.0MB

构建测试输入: 随机时间序列 (lookback=2880)
输入形状: (1, 2880)

运行推理...
  - Forecast长度: 96
[NPU显存 · 推理完成后] 总显存=61.0GB | 已分配=401.1MB | 缓存=486.00MB | 峰值=404.1MB

==============================================================================
输出摘要
==============================================================================
  模型: Timer (时间序列预测)
  输入形状: (1, 2880)
  输出形状: (1, 96)
  预测长度: 96
  总耗时: 0.27s
  输出 finite: True
  输出均值: -0.0309
  输出标准差: 0.0799
  输出范围: [-0.2603, 0.1052]

✅ 验证要点:

  • 输出形状 (1, 96): 预测长度为 96
  • NPU 推理稳定: 单次推理 0.27 秒
  • NPU 显存峰值: 约 404 MB,远低于 61GB 总显存
  • 输出有限值: 所有输出均为有限值,无 NaN/Inf
  • 输出分布: 均值接近 0,标准差约 0.08(符合标准化后的时间序列特征)

5. 常见问题解答

Q1:提示 "NPU 不可用" 怎么办?

解决方案:

  1. 确认已安装 CANN 驱动并设置环境变量(source /usr/local/Ascend/ascend-toolkit/latest/set_env.sh)
  2. 运行 npu-smi info 检查设备状态
  3. 确认 PyTorch 和 torch_npu 版本匹配

Q2:为什么使用 transformers 4.40.1?

解决方案:Timer 模型依赖 ts_generation_mixin.py 中的特定 API 兼容性,该 API 在 transformers 4.40.1 中经过验证。更高版本可能存在兼容性问题(如 DynamicCache.seen_tokens)。

Q3:Timer 和 Sundial 有什么区别?

解释:

  • Timer: 84M 参数,patch-based 生成式 Transformer
  • Sundial: 128M 参数,flow matching 生成式 Transformer
  • 两者都是时间序列基础模型,但采用不同的生成策略

Q4:输入序列长度必须是 2880 的倍数吗?

解释:Timer 的 context length 最大为 2880,但不必须是倍数。模型会自动处理任意长度的输入。

Q5:支持多变量时间序列吗?

解释:当前实现主要针对单变量时间序列预测。

6. 文件结构

timer-base-84m-ascend/
├── inference.py              # 推理脚本(torch_npu 推理)
├── README.md                 # 本文档
├── requirements.txt          # 依赖列表
└── assets/                   # 资源占位目录

上游权重目录(只读,未被修改):

/workspace/agent/timer-base-84m/
├── config.json               # TimerConfig
├── model.safetensors         # 权重(84.14M, ~321MB)
├── modeling_timer.py         # 模型实现
├── configuration_timer.py    # 配置类
├── ts_generation_mixin.py   # 生成 Mixin
├── generation_config.json    # 生成配置
└── README.md                 # 原始文档

7. requirements.txt - 依赖列表

# Timer-Base-84M 昇腾 NPU 推理环境依赖
# 注意: 需要 transformers 4.40.1 版本(与模型代码兼容)

# 核心依赖(必须)
torch>=2.0.0
torch_npu>=2.0.0
transformers==4.40.1
accelerate>=0.20.0
safetensors>=0.4.0
numpy>=1.21.0

使用方式:

# 激活环境
conda activate pt2100

# 安装依赖(华为云源)
pip install --index-url https://repo.huaweicloud.com/repository/pypi/simple -r requirements.txt

8. 参考资源

  • Timer 论文 (arXiv:2402.02368)
  • Timer GitHub 仓库 (thuml/Large-Time-Series-Model)
  • HuggingFace 模型页 (thuml/timer-base-84m)
  • 华为昇腾文档
  • torch_npu GitHub