timesfm
Google Research开发的时间序列基础模型,基于decoder-only架构预训练,专攻时间序列预测。最新2.5版参数降至200M,支持16k上下文和连续分位数预测,提供PyTorch/Flax双后端,并集成了LoRA微调示例。适合金融、气象等场景的时序预测,代码和权重完全开源。
README
TimesFM
TimesFM(Time Series Foundation Model,时间序列基础模型)是由 Google Research 开发的预训练时间序列基础模型,专用于时间序列预测。
- 论文:A decoder-only foundation model for time-series forecasting(一种仅解码器的时间序列基础模型),ICML 2024。
- 所有检查点:TimesFM Hugging Face 集合。
- Google Research 博客。
- TimesFM 在 Google 1P 产品中的应用:
- BigQuery ML:面向可扩展性和可靠性的企业级 SQL 查询。
- Google Sheets:适用于你的日常电子表格。
- Vertex Model Garden:用于智能体调用的 Docker 化端点。
此开放版本并非 Google 官方支持的正式产品。
最新模型版本: TimesFM 2.5
已归档模型版本:
- 1.0 和 2.0:相关代码归档在子目录
v1中。你可以通过pip install timesfm==1.3.0安装本包的旧版本以加载它们。
更新 - 2026 年 6 月 5 日
PyPI 已更新至 timesfm=2.0.0。参见安装。
更新 - 2026 年 4 月 9 日
新增了使用 HuggingFace Transformers + PEFT(LoRA)的微调示例——参见 timesfm-forecasting/examples/finetuning/。同时还新增了单元测试(tests/),并整合了多项社区修复。
感谢 @kashif 和 @darkpowerxo。
更新 - 2026 年 3 月 19 日
特别感谢 @borealBytes 为 TimesFM 添加了 AGENTS(智能体) 支持!TimesFM SKILL.md 现已发布。
更新 - 2025 年 10 月 29 日
通过 XReg 重新为 TimesFM 2.5 添加了协变量支持。
更新 - 2025 年 9 月 15 日
TimesFM 2.5 发布!
与 TimesFM 2.0 相比,新的 2.5 模型:
- 参数从 500M 减少至 200M。
- 上下文长度上限从 2048 提升至 16k。
- 通过可选的 30M 分位数头部支持长达 1k 时间步的连续分位数预测。
- 移除了
frequency(频率)指示器。 - 新增了几个预测标志。
自 2025 年 9 月发布以来,已完成以下改进:
- ✅ 模型 Flax 版本,实现更快的推理。
- ✅ 通过 XReg 支持协变量(参见 2025 年 10 月更新)。
- ✅ 文档、示例和智能体技能(参见
timesfm-forecasting/)。 - ✅ 通过 HuggingFace Transformers + PEFT 使用 LoRA 进行微调的示例(参见
timesfm-forecasting/examples/finetuning/)。 - ✅ 针对核心层、配置和工具函数的单元测试(参见
tests/)。
安装
从 PyPI 安装
# 安装包含 torch 的包
pip install timesfm[torch]
# 或者包含 Flax
pip install timesfm[flax]
# 当需要 XReg 时
pip install timesfm[xreg]
本地安装
克隆仓库:
git clone https://github.com/google-research/timesfm.git cd timesfm使用
uv创建虚拟环境并安装依赖:# 创建虚拟环境 uv venv # 激活环境 source .venv/bin/activate # 以可编辑模式安装包含 torch 的包 uv pip install -e .[torch] # 或者包含 flax uv pip install -e .[flax] # 当需要 XReg 时 uv pip install -e .[xreg][可选] 根据你的操作系统和加速器(CPU、GPU、TPU 或 Apple Silicon)安装偏好的
torch/jax后端:
- 安装 PyTorch。
- 安装 Jax 用于 Flax。
代码示例
import torch
import numpy as np
import timesfm
torch.set_float32_matmul_precision("high")
model = timesfm.TimesFM_2p5_200M_torch.from_pretrained("google/timesfm-2.5-200m-pytorch")
model.compile(
timesfm.ForecastConfig(
max_context=1024,
max_horizon=256,
normalize_inputs=True,
use_continuous_quantile_head=True,
force_flip_invariance=True,
infer_is_positive=True,
fix_quantile_crossing=True,
)
)
point_forecast, quantile_forecast = model.forecast(
horizon=12,
inputs=[
np.linspace(0, 1, 100),
np.sin(np.linspace(0, 20, 67)),
], # 两个虚拟输入
)
point_forecast.shape # (2, 12)
quantile_forecast.shape # (2, 12, 10): 均值,然后是第10到第90分位数。