NanoForecast v0.3

6.5M-Parameter Time Series Foundation Model — Deploy Anywhere

CPU inference · Raspberry Pi · ONNX · Streaming · Quantile forecasts

Hugging Face Downloads GitHub License PyPI Live Demo

Built by Eulogik — deployable AI for the real world


What is NanoForecast v0.3?

NanoForecast v0.3 is the initial release of a 6.5M-parameter time series foundation model designed for deployment on CPUs, Raspberry Pi, edge devices, and in the browser. It performs zero-shot forecasting with quantile uncertainty bounds.

This is a reference release. For the latest improvements, see eulogik/nanoforecast-v05 (43.8% better MASE with same architecture).


Key Features

  • Zero-shot forecasting — no training needed for new time series
  • Streaming inference — feed one value at a time via stateful DeltaNet RNN
  • Quantile predictions — p10, p25, p50, p75, p90 with monotonic guarantees
  • ONNX export — 9.2MB INT8 for edge, IoT, browser deployment
  • CPU inference — 19.5ms median latency on Apple M4
  • Train from CSV — fine-tune on your data in minutes
  • Apache 2.0 license — no restrictions on commercial use

Benchmark Results

Standard protocol: context 512, horizon 48, non-overlapping test windows, MASE scaled by seasonal-naive in-sample MAE.

Dataset NanoForecast v0.3 (6.5M) TimesFM (200M) PatchTST (15M+)
ETTh1 0.681 0.705 0.781
ETTh2 1.328 1.360 1.467
ETTm1 0.288 0.545 0.488
exchange_rate 11.758 4.383 3.861
electricity 2.213 0.923 1.347
traffic 1.913 0.765 1.379
Overall MASE 3.030 1.447 1.554

v0.3 → v0.5 improvement: Overall MASE 3.030 → 1.704 (↓43.8%) with same architecture, pipeline fixes only.


Quick Start

Install

pip install nanoforecast

Zero-Shot Forecasting

import numpy as np
from nanoforecast import NanoForecast

model = NanoForecast.from_pretrained("eulogik/nanoforecast-v03")

context = np.sin(np.linspace(0, 8*np.pi, 512)) + 0.1 * np.random.randn(512)
result = model.predict(context, horizon=48, freq=1)

print(result["forecast"].shape)     # (48,) point forecast
print(result["quantiles"].shape)    # (5, 48)  p10..p90

Streaming Inference

result = model.predict(context, horizon=48, return_state=True)
state = result.pop("state")

for new_val in incoming_stream:
    result = model.predict_step(new_val, state, horizon=48)
    forecast = result["forecast"][0]

Model Files

File Size
model.safetensors 26.1 MB
config.json 343 B
model_card.json 710 B

Citation

@article{nanoforecast2026,
  title={NanoForecast: A Deployable Time Series Foundation Model},
  author={Gautam Kishore and Eulogik},
  year={2026},
  url={https://github.com/eulogik/NanoForecast},
  note={6.5M parameters, CPU inference, ONNX export, streaming RNN}
}

Links


Built by Eulogik — deployable AI for the real world

If you found this useful, please ⭐ the GitHub repo and like this model on Hugging Face!

Downloads last month
63
Safetensors
Model size
6.52M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including eulogik/nanoforecast-v03

Paper for eulogik/nanoforecast-v03

Evaluation results