granite-timeseries-ttm-r2:轻量级预训练模型,高效多变量时间序列预测,支持零样本与少样本学习

IBM开源的TinyTimeMixers轻量级预训练模型,参数仅1M起,在零样本和少样本预测基准中超越数十亿参数模型,支持分钟至小时分辨率,r2版本性能提升15%,可在单GPU或笔记本运行。【此简介由AI生成】

分支1Tags0

license: apache-2.0 pipeline_tag: time-series-forecasting tags:

  • time series
  • forecasting
  • pretrained models
  • foundation models
  • time series foundation models
  • time-series library_name: granite-tsfm

Granite-TimeSeries-TTM-R2 模型卡片

TinyTimeMixers(TTMs)是由 IBM Research 开源的紧凑型多元时间序列预测预训练模型。 TTM 的模型规模从 100 万参数起步,开创了时间序列预测领域首个“微型”预训练模型的概念。描述 TTM 的论文已被 NeurIPS 24 接收。

在多个主流的零样本和少样本预测基准测试中,TTM 的性能超越了其他需要数十亿参数的模型。TTM 是轻量级预测器,通过多种数据增强技术在公开可用的时间序列数据上进行预训练。TTM 能够提供最先进的零样本预测,并且只需 5% 的训练数据进行微调,就能在多元预测任务中具备竞争力。值得注意的是,使用 TTM 进行零样本预测、微调及推理任务,仅需单块 GPU 甚至普通笔记本电脑即可轻松完成。

TTM r2 包含在更大规模预训练数据集(约 7 亿样本)上训练的 TTM 变体。TTM r2.1 版本进一步将预训练数据集规模扩大到约 10 亿样本。早期发布的 TTM r1 模型是在约 2.5 亿样本上训练的,可通过 此处 获取。通常而言,TTM r2 模型由于训练数据量更大,性能优于 TTM r1 模型。在标准基准测试中,TTM r2 比 TTM r1 的性能提升超过 15%。不过,r1 和 r2 的选择取决于目标数据分布,因此建议用户尝试两种变体,并为自己的数据选择最佳模型。 TTM r2 版本专门支持从分钟级到小时级分辨率的点预测用例(例如,10 分钟、15 分钟、1 小时)。在 TTM r2.1 版本中,我们新增了对日级和周级分辨率的支持。

链接

模型描述

TTM 属于“聚焦型预训练模型”类别,其中每个预训练 TTM 都是针对特定预测场景(由上下文长度和预测长度决定)量身定制的。我们没有构建一个支持所有预测场景的大型模型,而是选择构建更小的预训练模型,每个模型专注于特定的预测场景,从而获得更准确的结果。此外,这种方法确保我们的模型体积极小且速度极快,便于轻松部署,无需大量资源。

因此,在此模型卡片中,我们发布了多个预训练 TTM,可满足实践中许多常见的预测场景。每个预训练模型将在此模型卡片的不同分支名称下发布。鉴于所包含的模型种类繁多,我们建议使用 get_model() 工具,根据您的输入上下文长度、预测长度和其他要求自动选择所需模型。您也可以使用我们的入门 notebook 并指定分支名称来直接访问特定模型。

模型发布

此模型卡片的不同分支中提供了多个模型。命名方案遵循以下格式: <context length>-<prediction length>-<frequency prefix tuning indicator>-<pretraining metric>-<release number>

  • context length:用作 TTM 模型输入的历史数据。

  • prediction length:模型预测的时间点数(即预测长度)

  • frequency tuning indicator(“ft”或省略):“ft”用于表示使用频率前缀调优。启用后,会向模型输入添加一个指示数据频率的额外嵌入向量。如果省略,则模型仅使用上下文窗口。

  • pretraining metric(“mae”或省略):MAE 表示使用平均绝对误差损失进行预训练,省略则表示使用均方误差。

  • release number(“r2”或“r2.1”):指示模型版本;该版本指示用于训练模型的数据。有关特定训练数据集中包含的数据的更多详细信息,请参见下文的“训练数据”。

示例配方和笔记本

以下脚本可用于上述任何 TTM 模型。请在 from_pretrained 调用中适当更新 HF 模型 URL 和分支名称,以选择您所需的模型。请注意,部分笔记本直接使用 get_model() 工具来选择模型。

  • 快速入门 [配方] [colab]
  • 使用 IBM watsonx 快速入门 [配方]
  • 零样本多变量预测 [示例]
  • 微调多变量预测:
  • TTM r2 版本(2024 年 10 月发布的扩展功能):
    • 使用外部/控制变量进行微调和预测 [配方 1] [配方 2]
    • 使用静态分类特征进行微调和预测 [示例:即将添加]
    • 滚动预测 - 通过滚动功能扩展预测长度。不建议滚动超过 2 倍预测长度。[示例]
    • 用于微调的最佳学习率建议的辅助脚本 [示例]
  • TTM r2.1 版本:

使用指南

  1. 用户在将数据输入模型之前,必须针对每个通道独立地对数据进行外部标准化缩放(请参考我们的数据处理工具 TimeSeriesPreprocessor 以进行数据缩放)。
  2. 当前开源版本仅支持分钟级和小时级分辨率(例如,10 分钟、15 分钟、1 小时)。其他较低分辨率(如月度或年度)在当前版本中暂不支持,因为模型需要至少 512 或 1024 的上下文长度。在 r2.1 版本中,我们现已支持日度和周度分辨率。
  3. 不建议对较短长度的数据集启用任何上采样或前置零以虚拟增加上下文长度,这会影响模型性能。

自动模型选择

可通过使用 get_model() 函数,根据上下文长度、预测长度和其他要求进行自动模型选择。作为参考,下面提供了该函数的签名:

def get_model(
    model_path: str,
    model_name: str = "ttm",
    context_length: Optional[int] = None,
    prediction_length: Optional[int] = None,
    freq_prefix_tuning: bool = False,
    freq: Optional[str] = None,
    prefer_l1_loss: bool = False,
    prefer_longer_context: bool = True,
    force_return: Optional[str] = None,
    return_model_key: bool = False,
    **kwargs,
) -> Union[str, PreTrainedModel]:
    """TTM Model card offers a suite of models with varying `context_length` and `prediction_length` combinations.
    This wrapper automatically selects the right model based on the given input `context_length` and
    `prediction_length` abstracting away the internal complexity.

    Args:
        model_path (str): HuggingFace model card path or local model path (Ex. ibm-granite/granite-timeseries-ttm-r2)
        model_name (str, optional): Model name to use. Current allowed values: [ttm]. Defaults to "ttm".
        context_length (int, optional): Input Context length or history. Defaults to None.
        prediction_length (int, optional): Length of the forecast horizon. Defaults to None.
        freq_prefix_tuning (bool, optional): If true, it will prefer TTM models that are trained with frequency prefix
            tuning configuration. Defaults to None.
        freq (str, optional): Resolution or frequency of the data. Defaults to None. Allowed values are as
            per the `DEFAULT_FREQUENCY_MAPPING`.
        prefer_l1_loss (bool, optional): If True, it will prefer choosing models that were trained with L1 loss or
            mean absolute error loss. Defaults to False.
        prefer_longer_context (bool, optional): If True, it will prefer selecting model with longer context/history
            Defaults to True.
        force_return (str, optional): This is used to force the get_model() to return a TTM model even when the provided
            configurations don't match with the existing TTMs. It gets the closest TTM possible. Allowed values are
            ["zeropad"/"rolling"/"random_init_small"/"random_init_medium"/"random_init_large"/`None`].
            "zeropad" = Returns a pre-trained TTM that has a context length higher than the input context length, hence,
            the user must apply zero-padding to use the returned model.
            "rolling" = Returns a pre-trained TTM that has a prediction length lower than the requested prediction length,
            hence, the user must apply rolling technique to use the returned model to forecast to the desired length.
            The `RecursivePredictor` class can be utilized in this scenario.
            "random_init_small" = Returns a randomly initialized small TTM which must be trained before performing inference.
            "random_init_medium" = Returns a randomly initialized medium TTM which must be trained before performing inference.
            "random_init_large" = Returns a randomly initialized large TTM which must be trained before performing inference.
            `None` = `force_return` is disable. Raises an error if no suitable model is found.
            Defaults to None.
        return_model_key (bool, optional): If True, only the TTM model name will be returned, instead of the actual model.
            This does not downlaod the model, and only returns the name of the suitable model. Defaults to False.

    Returns:
        Union[str, PreTrainedModel]: Returns the Model, or the model name.
    """

基准测试

在零样本/少样本预测任务中,TTM 的性能优于 TimesFM、Moirai、Chronos、Lag-Llama、Moment、GPT4TS、TimeLLM、LLMTime 等主流基准模型,同时显著降低了计算需求。 此外,TTM 模型轻量高效,即使在仅配备 CPU 的机器上也能运行,这增强了其易用性,并有助于在资源受限的环境中更广泛地采用。有关更多详细信息,请参阅我们的论文

  • 论文中提及的 TTM-B 对应 512 上下文长度的模型。
  • 论文中提及的 TTM-E 对应 1024 上下文长度的模型。
  • 论文中提及的 TTM-A 对应 1536 上下文长度的模型。

本版本使用的预训练数据集与研究论文中使用的数据集略有不同,这可能导致模型性能与已发表结果相比存在细微差异。更多详情请参考我们的论文。基准测试脚本可在此处找到。

模型详情

有关 TTM 的架构和基准测试的更多详情,请参阅我们的论文

TTM 当前支持两种模式:

  • 零样本预测:将预训练模型直接应用于目标数据以获得初始预测结果(无需训练)。

  • 微调预测:使用目标数据的子集微调预训练模型,以进一步提升预测效果。

由于 TTM 模型体积极小且速度极快,因此实际上可以非常轻松地使用您可用的目标数据在几分钟内完成模型微调,从而获得更准确的预测。

当前版本通过通道独立和通道混合两种方法支持多变量预测。 在微调过程中,可以启用解码器通道混合(Decoder Channel-Mixing),以捕捉时间序列变量之间的强通道相关性模式,这是现有同类模型所缺乏的关键能力。此外,TTM 还支持外部变量注入和静态分类数据注入。

r2.1 版本在上述基础上进行了改进,提高了短上下文长度、日/周分辨率下的预测准确性,并结合了更大规模的预训练数据集。

训练数据

r2 TTM 模型的训练基于以下数据集集合:

r2.1 TTM 模型(由后缀为 r2.1 的分支表示)的训练除了上述数据集集合外,还增加了以下数据集:

引用说明

如果您打算在您的研究工作中使用我们的模型或其相关架构/方法,请引用以下论文。

BibTeX格式:

@inproceedings{ekambaram2024tinytimemixersttms,
      title={Tiny Time Mixers (TTMs): Fast Pre-trained Models for Enhanced Zero/Few-Shot Forecasting of Multivariate Time Series},
      author={Vijay Ekambaram and Arindam Jati and Pankaj Dayama and Sumanta Mukherjee and Nam H. Nguyen and Wesley M. Gifford and Chandra Reddy and Jayant Kalagnanam},
      booktitle={Advances in Neural Information Processing Systems (NeurIPS 2024)},
      year={2024},
}

模型卡片作者

Vijay Ekambaram、Arindam Jati、Pankaj Dayama、Wesley M. Gifford、Tomoya Sakai、Sumanta Mukherjee、Chandra Reddy 及 Jayant Kalagnanam

IBM 公共仓库披露声明

本仓库中的所有内容(包括代码)均由 IBM 依据相关开源软件许可提供,IBM 无义务提供增强功能、更新或支持。此代码是 IBM 开发人员作为开源项目(而非 IBM 产品)开发的,IBM 不对其质量水平或安全性做出任何声明,并且未来也不会对该代码进行维护。

项目介绍

IBM开源的TinyTimeMixers轻量级预训练模型,参数仅1M起,在零样本和少样本预测基准中超越数十亿参数模型,支持分钟至小时分辨率,r2版本性能提升15%,可在单GPU或笔记本运行。【此简介由AI生成】

定制我的领域

下载使用量

0

项目总下载次数(含Clone、Pull、 zip 包及 release 下载),每日凌晨更新