1.3.0
Highlight
Chronos-Bolt⚡: a 250x faster, more accurate Chronos model
Chronos-Bolt is our latest foundation model for forecasting. It is based on the T5 encoder-decoder architecture and has been trained on nearly 100 billion time series observations. It chunks the historical time series context into patches of multiple observations, which are then input into the encoder. The decoder then uses these representations to directly generate quantile forecasts across multiple future steps—a method known as direct multi-step forecasting. Chronos-Bolt models are up to 250 times faster and 20 times more memory-efficient than the original Chronos models of the same size.
The following plot compares the inference time of Chronos-Bolt against the original Chronos models for forecasting 1024 time series with a context length of 512 observations and a prediction horizon of 64 steps.
Chronos-Bolt models are not only significantly faster but also more accurate than the original Chronos models. The following plot reports the probabilistic and point forecasting performance of Chronos-Bolt in terms of the Weighted Quantile Loss (WQL) and the Mean Absolute Scaled Error (MASE), respectively, aggregated over 27 datasets (see the Chronos paper for details on this benchmark). Remarkably, despite having no prior exposure to these datasets during training, the zero-shot Chronos-Bolt models outperform commonly used statistical models and deep learning models that have been trained on these datasets (highlighted by *). Furthermore, they also perform better than other FMs, denoted by a +, which indicates that these models were pretrained on certain datasets in our benchmark and are not entirely zero-shot. Notably, Chronos-Bolt (Base) also surpasses the original Chronos (Large) model in terms of the forecasting accuracy while being over 600 times faster.
Chronos-Bolt models are now available on HuggingFace🤗 in four sizes—Tiny (9M), Mini (21M), Small (48M), and Base (205M)—and can also be used on the CPU. Check out the example in the README to learn how to use Chronos-Bolt models. You can use Chronos-Bolt models for forecasting in just a few lines of code.
import pandas as pd # requires: pip install pandas
import torch
from chronos import BaseChronosPipeline
pipeline = BaseChronosPipeline.from_pretrained(
"amazon/chronos-bolt-base",
device_map="cuda", # use "cpu" for CPU inference
torch_dtype=torch.bfloat16,
)
df = pd.read_csv(
"https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv"
)
# context must be either a 1D tensor, a list of 1D tensors,
# or a left-padded 2D tensor with batch as the first dimension
# Chronos-Bolt models generate quantile forecasts, so forecast has shape
# [num_series, num_quantiles, prediction_length].
forecast = pipeline.predict(
context=torch.tensor(df["#Passengers"]), prediction_length=12
)
Note
We have also integrated Chronos-Bolt models into AutoGluon which is a more feature complete way of using Chronos models for production use cases. With the addition of Chronos-Bolt models and other enhancements, AutoGluon v1.2 achieves a 70%+ win rate against AutoGluon v1.1! In addition to the new Chronos-Bolt models, AutoGluon 1.2 also enables effortless fine-tuning of Chronos and Chronos-Bolt models. Check out the updated Chronos AutoGluon tutorial to learn how to use and fine-tune Chronos-Bolt models using AutoGluon.
What's Changed
- Cap transformers <4.41 by @lostella in #77
- Save training job info by @abdulfatir in #80
- Relax torch and transformers versions by @abdulfatir in #81
- Split
input_transform
intocontext_input_transform
andlabel_input_transform
by @abdulfatir in #82 - Fix citation by @abdulfatir in #86
- Enhance training script: auto tf32 detection and reorder default seed setting by @abdulfatir in #91
- Uncap transformers dependency by @lostella in #94
- Update ci.yml with schedule by @abdulfatir in #95
- Add FAQ badge to README by @lostella in #97
- Remove print statements from
train.py
by @abdulfatir in #101 - Add issue templates by @lostella in #109
- Add support for causal models by @abdulfatir in #113
- Set
drop_prob = 0
for causal models by @abdulfatir in #125 - Add evaluation script by @abdulfatir in #134
- Update README.md with dataset and evaluation details by @abdulfatir in #136
- Add datasets badge by @abdulfatir in #137
- Add generation params to eval script by @abdulfatir in #138
- Bound number of workers by number of datasets by @lostella in #157
- Simplify pretraining README snippet by @lostella in #160
- Fix number of quantisation buckets by @alvaropp in #182
- Force context scaling and quantization in float32, add assertions to tests by @lostella in #197
- Update README.md by @abdulfatir in #206
- ⚡ Add support for Chronos-Bolt models by @abdulfatir @canerturkmen @lostella in #204
- Update project information and workflows by @abdulfatir in #214
New Contributors
Full Changelog: v1.2.0...v1.3.0