开源项目

timesfm

Google Research开发的时间序列基础模型,基于decoder-only架构预训练,专攻时间序列预测。最新2.5版参数降至200M,支持16k上下文和连续分位数预测,提供PyTorch/Flax双后端,并集成了LoRA微调示例。适合金融、气象等场景的时序预测,代码和权重完全开源。

README

TimesFM

TimesFM(Time Series Foundation Model,时间序列基础模型)是由 Google Research 开发的预训练时间序列基础模型,专用于时间序列预测。

此开放版本并非 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 月发布以来,已完成以下改进:

  1. ✅ 模型 Flax 版本,实现更快的推理。
  2. ✅ 通过 XReg 支持协变量(参见 2025 年 10 月更新)。
  3. ✅ 文档、示例和智能体技能(参见 timesfm-forecasting/)。
  4. ✅ 通过 HuggingFace Transformers + PEFT 使用 LoRA 进行微调的示例(参见 timesfm-forecasting/examples/finetuning/)。
  5. ✅ 针对核心层、配置和工具函数的单元测试(参见 tests/)。

安装

从 PyPI 安装
# 安装包含 torch 的包
pip install timesfm[torch]
# 或者包含 Flax
pip install timesfm[flax]
# 当需要 XReg 时
pip install timesfm[xreg]
本地安装
  1. 克隆仓库:

    git clone https://github.com/google-research/timesfm.git
    cd timesfm
    
  2. 使用 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]
    
  3. [可选] 根据你的操作系统和加速器(CPU、GPU、TPU 或 Apple Silicon)安装偏好的 torch / jax 后端:

代码示例

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分位数。
开源项目google-research2026-06-17原文

相关内容