tsfm-onnx / README.md
Siddharth899's picture
Add model card
a8bb1db verified
|
Raw
History Blame Contribute Delete
4.86 kB
---
license: apache-2.0
base_model: theforecastingcompany/t0-alpha
pipeline_tag: time-series-forecasting
tags:
- time-series
- forecasting
- foundation-models
- onnx
- onnxruntime
- onnxruntime-web
- int8
- browser
---
# tsfm-onnx: t0-alpha for the browser
Browser-ready ONNX exports of [t0-alpha](https://huggingface.co/theforecastingcompany/t0-alpha),
the zero-shot time-series foundation model by
[The Forecasting Company](https://theforecastingcompany.com). These graphs run
a full probabilistic forecast in about 100 ms under
[onnxruntime-web](https://onnxruntime.ai/docs/tutorials/web/) (WASM), with no
server and no Python.
This is an unofficial conversion, not affiliated with or endorsed by The
Forecasting Company. The conversion pipeline, a browser app using these
files, an export guide, and a debugging logbook live at
[github.com/siddharth7113/tsfm-onnx](https://github.com/siddharth7113/tsfm-onnx).
## Files
| File | Size | Graph | Precision |
|---|---|---|---|
| `t0-alpha-ctx512-h64.onnx` | 411 MB | univariate | fp32 |
| `t0-alpha-ctx512-h64-int8.onnx` | 108 MB | univariate | int8 (dynamic, per-channel) |
| `t0-alpha-ctx512-h64-mv.onnx` | 411 MB | grouped (multivariate) | fp32 |
| `t0-alpha-ctx512-h64-mv-int8.onnx` | 108 MB | grouped (multivariate) | int8 (dynamic, per-channel) |
## Graph contract
Univariate graph:
```
input context float32 [batch, 512] NaN marks missing values
output quantiles float32 [batch, 64, 5] levels [0.1, 0.25, 0.5, 0.75, 0.9]
```
Grouped (multivariate) graph adds one input:
```
input group_ids int64 [rows]
```
Rows that share a group id are forecast jointly as variates of one system
(they inform each other through the model's group attention); rows with
distinct ids are independent series. Flatten `[B, V, T]` to `[B*V, T]` and
pass ids like `[0, 0, 0, 1, 1, 1]`.
Practical notes:
- Series shorter than 512 points: LEFT-pad with NaN. The model treats NaN
as "missing" and was trained on gappy data, so this is a valid input,
not an approximation. Series longer than 512: pass the most recent 512.
- The context length (512) and horizon (64) are baked into the graphs.
Other sizes require re-export (see the GitHub repo).
- Known future covariates are not exported.
## Usage
JavaScript (onnxruntime-web):
```js
const session = await ort.InferenceSession.create(modelUrl, { executionProviders: ["wasm"] });
const ctx = new Float32Array(512).fill(NaN);
ctx.set(series.slice(-512), 512 - Math.min(series.length, 512));
const out = await session.run({ context: new ort.Tensor("float32", ctx, [1, 512]) });
// out.quantiles.data is row-major [batch, step, level]; element (s, l) is at s * 5 + l
```
Python (onnxruntime):
```python
import numpy as np, onnxruntime as ort
sess = ort.InferenceSession("t0-alpha-ctx512-h64.onnx")
context = np.full((1, 512), np.nan, dtype=np.float32)
context[0, -len(series):] = series[-512:]
(quantiles,) = sess.run(None, {"context": context}) # (1, 64, 5)
```
## Fidelity
| Check | Result |
|---|---|
| fp32 ONNX vs library `model.predict()`, identical input | max abs diff 1.7e-05 |
| grouped graph vs multivariate `predict()`, both id modes | max abs diff 1.7e-05 |
| onnxruntime-web (WASM) vs native ONNX Runtime | at most 1.5e-05 |
| int8 vs fp32 forecast drift | about 1% mean of forecast spread on long series; up to 3% mean / 17% max on short NaN-padded series |
Every export is validated against the original
[tfc-t0](https://github.com/theforecastingcompany/tfc-t0) library at export
time; the numbers above are reproducible from the scripts in the GitHub
repo. Prefer fp32 when fidelity matters more than the download size.
## How these were made
Exported with the PyTorch dynamo exporter from `tfc-t0` 0.2.3 (torch 2.8),
wrapping the library's single-forward-pass inference path with branch-free
equivalents of its data-dependent Python. Quantization is ONNX Runtime
dynamic int8 with per-channel weights. The full worked case study
(including every failure and fix) is in the repo's
[export guide](https://github.com/siddharth7113/tsfm-onnx/blob/main/docs/ONNX_EXPORT_GUIDE.md)
and [logbook](https://github.com/siddharth7113/tsfm-onnx/blob/main/docs/LOGBOOK.md).
## License and attribution
The t0-alpha weights are released by The Forecasting Company under
Apache-2.0 (with gated access on the original repository); these files are
a converted redistribution of those weights under the same license, with
attribution. Per the tfc-t0 source headers, parts of the architecture
derive from [Toto](https://github.com/DataDog/toto) (Datadog) and
[Chronos](https://github.com/amazon-science/chronos-forecasting) (Amazon
Science), both Apache-2.0. If you use these files, please credit
The Forecasting Company and consider citing their
[model card](https://huggingface.co/theforecastingcompany/t0-alpha).