IBM Granite Timeseries Ensemble: Four Forecasting Models in One Recipe
IBM bundles four open Granite time series models into an ensemble that delivers median and quantile forecasts with no retraining. The goal is to spare you the model choice. On the GIFT-Eval benchmark, the lead over the best single model is small. The real advantage is robustness.

What it's about
IBM Research has released the "Granite Timeseries Ensemble R1" on Hugging Face. It isn't a new model with its own weights. It's a recipe that combines four pretrained Granite time series models. Pretrained time series models can forecast new data without any training of your own ("zero-shot"), but you have to pick one. The ensemble aims to replace exactly that choice: it delivers median and quantile forecasts from a single call, with no retraining and no fitted weights.
The four members
The idea comes from weather forecasting, where several models together cover a range of possible outcomes. The members differ in architecture, so their errors shouldn't coincide:
| Model | Architecture |
|---|---|
| Granite PatchTST-FM-r1 | Patched Transformer |
| Granite PatchTST-FM-r2 | Patched Conformer |
| Granite FlowState-r1.1 | State-space model |
| Granite TTM-r3 | Tiny Time Mixers (MLP-Mixer) |
The repository contains only the ensemble configuration. The four checkpoints are loaded from their own Hugging Face repos on the first call, which takes time and disk space.
Two ways to combine
Probabilistic Ensemble (default, linear_pool): Every member has equal influence. The quantile values from all members (with nine quantiles from 0.1 to 0.9, that's 36 values) are merged into one pool, from which the desired quantiles are drawn. There's nothing to fit. This rests on the "forecast combination puzzle": simple equal weighting often beats estimated weights. Disagreement among members feeds into the forecast width. Calibration isn't guaranteed, and forecasts can end up too wide.
IQR Ensemble (iqr_weighted): Members with narrower intervals get more weight, computed per sample, target and horizon step, again without fitting to historical errors. Isotonic regression prevents quantiles from crossing. A narrow interval doesn't automatically mean higher accuracy, and overconfident members may be favored. You can tune the temperature (higher = more even weights), a maximum weight and prior weights.
Results on GIFT-Eval
The evaluation covered 97 GIFT-Eval configurations without fine-tuning. Test data wasn't used to choose the method. Leaderboard figures are as of October 20, 2026. MASE (point forecast) and CRPS/MWQL (probabilistic) are normalized to Seasonal Naive. Lower is better.
| Forecast | MASE | MASE rank | CRPS | CRPS rank |
|---|---|---|---|---|
| Ensemble Prob | 0.683 | 47.175 | 0.471 | 50.948 |
| Ensemble IQR | 0.684 | 48.773 | 0.471 | 47.619 |
| PatchTST-FM-r2 | 0.685 | 51.371 | 0.467 | 48.918 |
| FlowState-r1.1 | 0.701 | 66.474 | 0.490 | 69.485 |
| PatchTST-FM-r1 | 0.717 | 74.794 | 0.488 | 68.134 |
| TTM-r3 | 0.724 | 83.062 | 0.520 | 88.959 |
Both ensembles beat all four individual models on MASE and MASE rank. The MASE lead over PatchTST-FM-r2 is small. According to IBM, the benefit lies in robustness. PatchTST-FM-r2 has the best CRPS value, while the IQR Ensemble has the best CRPS rank. Among eligible systems, the ensemble ranks third on MASE and CRPS rank. Some systems, such as fine-tuned or non-permissively licensed ones, do better.
Extensibility and licenses
The shared Forecaster interface also accepts external compatible models (supported types: patchtst, flowstate, ttm). There are also "expanded" recipes with IBM Research checkpoints. These carry their own licenses, some non-commercial, so check them first.
What you need to try it
Install with pip install "granite-tsfm>=0.3.11". The source gives no specific hardware requirements. The models are considered relatively small (TTM is a lightweight model), so running on an ordinary computer is plausible, but that isn't confirmed. Plan for the time and disk space to download four checkpoints. Runtime and memory use are higher than with a single model. A sample notebook is linked.
Our take
The ensemble is a pragmatic default for teams that forecast time series and don't want to pick a model. It doesn't win the leaderboard, and the gain over the best single model is small. Open concerns: independent treatment of multiple channels with no cross-channel information, higher latency, and no guarantee of calibration or robustness under distribution shift. IBM recommends backtesting against PatchTST-FM-r2, checking interval coverage (nominally 80% for 0.1–0.9), and measuring runtime and memory. The figures are vendor claims from official leaderboard submissions.
Sources
- Hugging Face Blog huggingface.co
Try it yourself: Granite Timeseries Ensemble r1
Explained step by step, no prior knowledge needed – on your own computer or free in your browser.
What can I do with it?
You feed in a time series, such as sensor, sales or energy data, and get a point forecast plus quantiles (0.1 to 0.9) for the future. You don't have to choose a single model, and you don't have to retrain anything.
Who is it worth it for?
Worth it for analysts and developers who need a solid forecasting baseline fast. Less suitable if channels depend on each other or if latency and memory are tight.
What your computer needs
Values estimated from the model size – the Model Card may have more precise figures.
Start with the default recipe (Probabilistic Ensemble, repo root). Then compare `recipes/granite-iqr` and PatchTST-FM-r2 on your own data. Use the expanded recipes for research only, because of license restrictions.
- On the first run, four member checkpoints are downloaded: plan for time and disk space.
- Four models increase runtime and memory compared with a single model.
- The source gives no specific VRAM figures.
- Check the logs for member failures, otherwise the recipe is silently altered.
How do I find out what my computer has?
- Windows: Press Ctrl + Shift + Esc → Task Manager → Performance tab → click GPU on the left. At the bottom you'll see Dedicated GPU memory (that's your VRAM). You'll find system memory under Memory.
- Mac: Apple menu at the top left → About This Mac. You'll see your chip (e.g. M2) and memory (e.g. 16 GB). On Apple chips, graphics and processor share this memory.
- Linux: Type
nvidia-smiin the terminal (shows your graphics card and its memory) andfree -hfor system memory.
Guide
This model runs with its developers' own program (ibm-granite/granite-tsfm on GitHub). The commands below come from the Model Card and the developers' instructions.
Windows 10 / 11
Windows 10 / 11: not officially tested. The source says nothing about Windows. The steps are adapted from the Linux instructions (PowerShell syntax). If you run into trouble, you can use WSL2 or Google Colab.
- Check the prerequisites. You need Python 3.10, 3.11, 3.12 or 3.13 and an internet connection. A graphics card isn't required. Expect to use some disk space, because four member models are downloaded on first launch.
python --version - Create a working folder. We create a new, empty folder and move into it.
mkdir granite-ensemble cd granite-ensemble - Create a virtual environment. A virtual environment (venv) keeps the packages separate from the rest of your PC. Then you activate it.
python -m venv .venv .venv\Scripts\Activate.ps1 - Install the package. The granite-tsfm package contains the ensemble code. Installation can take a few minutes.
pip install "granite-tsfm>=0.3.11" - Save the sample program. Save this code as demo.py in this folder. It downloads sample data (a transformer's oil temperature) from the internet.
import pandas as pd from tsfm_public.models.ensemble.modeling_ensemble import QuantileEnsembleForecaster df = pd.read_csv( "https://raw.githubusercontent.com/zhouhaoyi/ETDataset/main/ETT-small/ETTh1.csv", parse_dates=["date"], ) ensemble = QuantileEnsembleForecaster.from_pretrained( "ibm-granite/granite-timeseries-ensemble-r1", ) result = ensemble( df.tail(1024), timestamp_column="date", target_columns=["OT"], context_length=1024, prediction_length=24, ) print(result.prediction_outputs) print(result.quantile_outputs) - Run the program. On first launch, the program downloads the four member models. This takes longer. Check the output for error messages about individual models.
python demo.py - Result. The terminal shows the point forecast and the quantiles (uncertainty ranges) for the next 24 hours of oil temperature.
macOS
macOS: not officially tested. The source says nothing about macOS. The steps are adapted from the Linux instructions. Whether it runs fast on Apple chips hasn't been tested. Alternative: Google Colab.
- Check the prerequisites. You need Python 3.10, 3.11, 3.12 or 3.13. If necessary, install the Xcode command line tools. A graphics card isn't required. Expect to use some disk space for four member models.
python3 --version xcode-select --install - Create a working folder. We create a new, empty folder and move into it.
mkdir granite-ensemble cd granite-ensemble - Create a virtual environment. A virtual environment (venv) keeps the packages separate from the rest of your Mac. Then you activate it.
python3 -m venv .venv source .venv/bin/activate - Install the package. The granite-tsfm package contains the ensemble code. This can take a few minutes.
pip install "granite-tsfm>=0.3.11" - Save the sample program. Save this code as demo.py in this folder. It downloads sample data (a transformer's oil temperature) from the internet.
import pandas as pd from tsfm_public.models.ensemble.modeling_ensemble import QuantileEnsembleForecaster df = pd.read_csv( "https://raw.githubusercontent.com/zhouhaoyi/ETDataset/main/ETT-small/ETTh1.csv", parse_dates=["date"], ) ensemble = QuantileEnsembleForecaster.from_pretrained( "ibm-granite/granite-timeseries-ensemble-r1", ) result = ensemble( df.tail(1024), timestamp_column="date", target_columns=["OT"], context_length=1024, prediction_length=24, ) print(result.prediction_outputs) print(result.quantile_outputs) - Run the program. On first launch, the program downloads the four member models. This takes longer. Check the output for error messages about individual models.
python3 demo.py - Result. The terminal shows the point forecast and the quantiles (uncertainty ranges) for the next 24 hours of oil temperature.
Linux
Linux: supported. The source's instructions are a single pip command and apply generally, without a graphics card. No specific Linux version or GPU is mentioned.
- Check the prerequisites. You need Python 3.10, 3.11, 3.12 or 3.13 and an internet connection. A graphics card isn't required. Expect to use some disk space, because four member models are downloaded on first launch.
python3 --version - Create a working folder. We create a new, empty folder and move into it.
mkdir granite-ensemble cd granite-ensemble - Create a virtual environment. A virtual environment (venv) keeps the packages separate from the rest of your system. Then you activate it.
python3 -m venv .venv source .venv/bin/activate - Install the package. The granite-tsfm package contains the ensemble code. This can take a few minutes.
pip install "granite-tsfm>=0.3.11" - Save the sample program. Save this code as demo.py in this folder. It downloads sample data (a transformer's oil temperature) from the internet.
import pandas as pd from tsfm_public.models.ensemble.modeling_ensemble import QuantileEnsembleForecaster df = pd.read_csv( "https://raw.githubusercontent.com/zhouhaoyi/ETDataset/main/ETT-small/ETTh1.csv", parse_dates=["date"], ) ensemble = QuantileEnsembleForecaster.from_pretrained( "ibm-granite/granite-timeseries-ensemble-r1", ) result = ensemble( df.tail(1024), timestamp_column="date", target_columns=["OT"], context_length=1024, prediction_length=24, ) print(result.prediction_outputs) print(result.quantile_outputs) - Run the program. On first launch, the program downloads the four member models. This takes longer. Check the output for error messages about individual models.
python3 demo.py - Result. The terminal shows the point forecast and the quantiles (uncertainty ranges) for the next 24 hours of oil temperature.
Try it
Forecast the next 24 hours of oil temperature (OT) from the ETTh1 dataset with context_length=1024.Load the IQR recipe (recipes/granite-iqr) and compare its 80% interval with the default recipe on my sales data.Set the quantiles to 0.1/0.25/0.5/0.75/0.9 and temperature=0.8 for the IQR weighting.
If something goes wrong
Check the version: granite-tsfm must be at least 0.3.11.
The first load takes a while because four checkpoints are downloaded.
If a member fails, the ensemble keeps running with the remaining ones, and results are no longer reproducible.
Check the licenses of the expanded recipes (IBM Research) before commercial use.
“out of memory,” a crash, or your computer freezes
The model is too big for your VRAM (video memory). Pick a smaller variant from the table above and close other programs, especially games and browsers with lots of tabs.
It runs, but extremely slowly
Your CPU is probably doing the work instead of your graphics card. In Ollama, the PROCESSOR column of ollama ps shows how much runs on the GPU. If it says "100% CPU", update your graphics driver or pick a smaller variant that fits entirely into VRAM (video memory).
“ollama” or “python” is not found
Close the terminal window and open it again so it recognizes the newly installed program. For Python on Windows: reinstall it and check Add python.exe to PATH.
Windows: "Running scripts is disabled on this system"
Run the script with exactly the command above: powershell -ExecutionPolicy Bypass -File try_windows.ps1. This allows execution for this one time only.
Error message when loading the model (version, "trust_remote_code", unknown architecture)
Brand-new models often need the latest software version. With Ollama: update Ollama. With Python: pip install -U transformers in the activated environment. The Model Card usually lists the exact version.
Tokenstrom generates the scripts and notebook automatically. Please take a quick look before running them – they're plain, readable text. Mind the model's license: apache-2.0.
Ask the AI assistant
Questions about this article, installation or background? Our assistant knows this page and runs on our own machine, not in someone else's cloud.
The Assistant is an AI (Gemma 4) and can make mistakes – please check important details against the source. Questions are used only to generate an answer and are deleted after one hour. Please don't enter any personal data.
Comments
What do you think? Already tried it? Write it here, no sign-up needed.
Comments are public. Links aren't allowed, and we delete abusive posts. You can delete your own comment at any time in this browser. Learn more in the Privacy Policy.