模型简介
模型特点
模型能力
使用案例
🚀 Granite-TimeSeries-TTM-R2 模型卡片
TinyTimeMixers (TTMs) 是由 IBM Research 开源的用于多变量时间序列预测的紧凑型预训练模型。TTM 模型参数从 100 万起,开创了时间序列预测领域 “微型” 预训练模型的先河。介绍 TTM 的论文已被 NeurIPS 24 收录。
在多个流行的零样本和少样本预测基准测试中,TTM 表现优于其他需要数十亿参数的模型。TTM 是轻量级预测器,在公开可用的时间序列数据上进行预训练,并采用了各种数据增强技术。TTM 能够提供最先进的零样本预测,并且只需使用 5% 的训练数据进行微调,就能在多变量预测中具备竞争力。请注意,使用 TTM 进行零样本、微调及推理任务可轻松在 1 块 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 版本的发布,我们增加了对每日和每周分辨率的支持。
链接
- 论文:NeurIPS 2024,ArXiV
- 代码仓库:https://github.com/ibm-granite/granite-tsfm
- PyPI 项目:https://pypi.org/project/granite-tsfm/
- 模型架构:https://github.com/ibm-granite/granite-tsfm/tree/main/tsfm_public/models/tinytimemixer
- 时间序列手册:https://github.com/ibm-granite-community/granite-timeseries-cookbook
✨ 主要特性
- 轻量级高效:模型参数小,计算资源需求低,可在单 GPU 或笔记本电脑上执行零样本、微调及推理任务。
- 高性能表现:在零样本和少样本预测基准测试中,优于多个流行模型。
- 灵活可扩展:支持零样本预测和微调预测,可根据目标数据轻松微调以提升预测准确性。
- 多分辨率支持:TTM r2 支持分钟级到小时级分辨率预测,r2.1 版本新增每日和每周分辨率支持。
📚 详细文档
模型描述
TTM 属于 “聚焦预训练模型” 类别,每个预训练的 TTM 针对特定的预测设置(由上下文长度和预测长度决定)进行定制。我们没有构建一个支持所有预测设置的大型模型,而是选择构建更小的预训练模型,每个模型专注于特定的预测设置,从而获得更准确的结果。此外,这种方法确保我们的模型非常小且速度极快,便于轻松部署,无需大量资源。
因此,在这个模型卡片中,我们发布了多个预训练的 TTM,可满足实际中许多常见的预测设置。每个预训练模型将在这个模型卡片的不同分支中发布。鉴于包含多种模型,我们建议使用 get_model()
工具,根据输入的上下文长度、预测长度和其他要求自动选择所需的模型。你也可以使用我们的入门 笔记本 直接访问特定模型,并指定分支名称。
模型发布
此模型卡片的不同分支中有多个可用模型。命名方案遵循以下格式:
<上下文长度>-<预测长度>-<频率前缀调整指示符>-<预训练指标>-<版本号>
- 上下文长度:作为 TTM 模型输入的历史数据。
- 预测长度:模型预测的时间点数(即预测长度)。
- 频率调整指示符(“ft” 或无):“ft” 表示使用频率前缀调整。启用时,会向模型输入添加一个额外的嵌入向量,指示数据的频率。如果缺失,则模型仅使用上下文窗口。
- 预训练指标(“mae” 或无):“mae” 表示使用平均绝对误差损失,缺失表示使用均方误差。
- 版本号(“r2” 或 “r2.1”):表示模型版本;该版本指示用于训练模型的数据。有关特定训练数据集中包含的数据的更多详细信息,请参阅下面的 “训练数据”。
示例脚本和笔记本
以下脚本可用于上述任何 TTM 模型。请在 from_pretrained
调用中适当更新 HF 模型 URL 和分支名称,以选择你需要的模型。请注意,部分笔记本直接使用了 get_model()
工具来选择模型。
- 入门指南:脚本 Colab
- 使用 IBM watsonx 入门:脚本
- 零样本多变量预测:示例
- 微调多变量预测:
- TTM r2 版本(2024 年 10 月发布的扩展功能):
- TTM r2.1 版本:
- GIFT-Eval 基准测试:笔记本
使用指南
- 用户在将数据输入模型之前,必须为每个通道独立地对数据进行外部标准缩放(请参考
TimeSeriesPreprocessor
,这是我们用于数据缩放的数据处理工具)。 - 当前开源版本仅支持分钟级和小时级分辨率(例如 10 分钟、15 分钟、1 小时)。此版本目前不支持其他较低分辨率(如月或年),因为模型需要最小上下文长度为 512 或 1024。随着 r2.1 版本的发布,我们现在也支持每日和每周分辨率。
- 不建议对较短长度的数据集进行上采样或前置零以虚拟增加上下文长度,这会影响模型性能。
自动模型选择
可以通过使用 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_path (str): HuggingFace 模型卡片路径或本地模型路径(例如 ibm-granite/granite-timeseries-ttm-r2)
model_name (str, 可选): 要使用的模型名称。当前允许的值: [ttm]。默认为 "ttm"。
context_length (int, 可选): 输入上下文长度或历史数据。默认为 None。
prediction_length (int, 可选): 预测范围的长度。默认为 None。
freq_prefix_tuning (bool, 可选): 如果为 True,将优先选择使用频率前缀调整配置训练的 TTM 模型。默认为 False。
freq (str, 可选): 数据的分辨率或频率。默认为 None。允许的值根据 `DEFAULT_FREQUENCY_MAPPING`。
prefer_l1_loss (bool, 可选): 如果为 True,将优先选择使用 L1 损失或平均绝对误差损失训练的模型。默认为 False。
prefer_longer_context (bool, 可选): 如果为 True,将优先选择具有较长上下文/历史数据的模型。默认为 True。
force_return (str, 可选): 用于强制 `get_model()` 返回一个 TTM 模型,即使提供的配置与现有的 TTM 不匹配。它会获取最接近的 TTM。允许的值为 ["zeropad"/"rolling"/"random_init_small"/"random_init_medium"/"random_init_large"/`None`]。
"zeropad" = 返回一个预训练的 TTM,其上下文长度高于输入的上下文长度,因此用户必须应用零填充才能使用返回的模型。
"rolling" = 返回一个预训练的 TTM,其预测长度低于请求的预测长度,因此用户必须应用滚动技术才能使用返回的模型进行所需长度的预测。在这种情况下可以使用 `RecursivePredictor` 类。
"random_init_small" = 返回一个随机初始化的小 TTM,在进行推理之前必须进行训练。
"random_init_medium" = 返回一个随机初始化的中等 TTM,在进行推理之前必须进行训练。
"random_init_large" = 返回一个随机初始化的大 TTM,在进行推理之前必须进行训练。
`None` = 禁用 `force_return`。如果未找到合适的模型,则引发错误。默认为 None。
return_model_key (bool, 可选): 如果为 True,仅返回 TTM 模型名称,而不是实际模型。这不会下载模型,仅返回合适模型的名称。默认为 False。
返回:
Union[str, PreTrainedModel]: 返回模型或模型名称。
"""
基准测试
在零样本/少样本预测中,TTM 优于 TimesFM、Moirai、Chronos、Lag-Llama、Moment、GPT4TS、TimeLLM、LLMTime 等流行基准测试模型,同时显著降低了计算需求。此外,TTM 是轻量级的,甚至可以在仅使用 CPU 的机器上运行,提高了可用性,并促进了在资源受限环境中的更广泛采用。更多详细信息,请参考我们的 论文。
- 论文中提到的 TTM-B 对应 512 上下文模型。
- 论文中提到的 TTM-E 对应 1024 上下文模型。
- 论文中提到的 TTM-A 对应 1536 上下文模型。
此版本中使用的预训练数据集与研究论文中使用的数据集略有不同,与发表的结果相比,这可能会导致模型性能出现微小差异。更多详细信息请参考我们的论文。基准测试脚本可在 此处 找到。
模型详情
有关 TTM 架构和基准测试的更多详细信息,请参考我们的 论文。
TTM 目前支持两种模式:
- 零样本预测:直接将预训练模型应用于目标数据,以获得初始预测(无需训练)。
- 微调预测:使用目标数据的子集对预训练模型进行微调,以进一步提高预测效果。
由于 TTM 模型非常小且速度快,实际上可以在几分钟内使用可用的目标数据对模型进行微调,以获得更准确的预测。
当前版本通过通道独立和通道混合方法支持多变量预测。在微调期间可以启用解码器通道混合,以捕获时间序列变量之间的强通道相关模式,这是现有同类模型所缺乏的关键能力。此外,TTM 还支持外生变量注入和静态分类数据注入。
r2.1 版本在此基础上,提高了较短上下文长度的准确性,支持每日/每周分辨率,并使用了更大的预训练数据集。
训练数据
TTM r2 模型在以下数据集集合上进行训练:
- 澳大利亚电力需求:https://zenodo.org/records/4659727
- 澳大利亚天气:https://zenodo.org/records/4654822
- 比特币:https://zenodo.org/records/5122101
- KDD Cup 2018:https://zenodo.org/records/4656756
- 伦敦智能电表:https://zenodo.org/records/4656091
- 索吉恩河流量:https://zenodo.org/records/4656058
- 太阳能发电:https://zenodo.org/records/4656027
- 太阳黑子:https://zenodo.org/records/4654722
- 太阳能:https://zenodo.org/records/4656144
- 美国出生人数:https://zenodo.org/records/4656049
- 风电场发电量:https://zenodo.org/records/4654858
- 风能发电:https://zenodo.org/records/4656032
- PEMSD3、PEMSD4、PEMSD7、PEMSD8、PEMS_BAY:https://drive.google.com/drive/folders/1g5v2Gq1tkOq8XO0HDCZ9nOTtRpB6-gPe
- LOS_LOOP:https://drive.google.com/drive/folders/1g5v2Gq1tkOq8XO0HDCZ9nOTtRpB6-gPe
TTM r2.1 模型(后缀为 r2.1 的分支表示)在上述数据集基础上,还使用了以下数据集进行训练:
- 天气:https://zenodo.org/records/4654822
- 新冠死亡人数:https://zenodo.org/records/4656009
- 新冠流动性:https://zenodo.org/records/4663809
- 扩展维基百科网络流量:https://zenodo.org/records/7371038
- NN5:https://zenodo.org/records/4656117,https://zenodo.org/records/4656125
- 温度降雨:https://zenodo.org/records/5129091
- 车辆出行:https://zenodo.org/records/5122537
- Kaggle 网络流量:https://zenodo.org/records/4656075,https://zenodo.org/records/4656664
- 分层销售:https://huggingface.co/datasets/Salesforce/lotsa_data/tree/main/hierarchical_sales
- 项目 Tycho:https://huggingface.co/datasets/Salesforce/lotsa_data/tree/main/project_tycho
- 次季节:https://huggingface.co/datasets/Salesforce/lotsa_data/tree/main/subseasonal
- 次季节降水:https://huggingface.co/datasets/Salesforce/lotsa_data/tree/main/subseasonal_precip
- 优步 TLC:https://huggingface.co/datasets/Salesforce/lotsa_data/tree/main/uber_tlc_daily
- 维基滚动:https://github.com/awslabs/gluonts/blob/1553651ca1fca63a16e012b8927bd9ce72b8e79e/datasets/wiki-rolling_nips.tar.gz
- CDC FluView ILINet:https://huggingface.co/datasets/Salesforce/lotsa_data/tree/main/cdc_fluview_ilinet
- CDC FluView WHO/NREVSS:https://huggingface.co/datasets/Salesforce/lotsa_data/tree/main/cdc_fluview_who_nrevss
引用
如果您打算在工作中使用我们的模型或其相关架构/方法,请引用以下论文。
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 不对质量和安全性水平做出任何声明,并且不会继续维护此代码。
📄 许可证
本项目采用 Apache-2.0 许可证。




