Instructions to use lowdown-labs/fela-power-grid with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use lowdown-labs/fela-power-grid with Transformers:
# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("lowdown-labs/fela-power-grid", trust_remote_code=True, dtype="auto") - Notebooks
- Google Colab
- Kaggle
- DISCLAIMER
- FELA Power Grid: on station probabilistic solar and wind power forecasting
- What goes in, what comes out
- Why we built it this way
- Performance
- Accuracy
- How to run it
- Training data
- Citations and licenses
- Intended use, limitations, and safety
- How to cite
- Acknowledgements and references
- Model family
- License
DISCLAIMER
This model is a research preview. GEFCom2014 is competition data with no stated reuse or commercial use grant (citation only), so respect that before any commercial use. Lowdown Labs has put together this model in the interest of advancing public science.
FELA Power Grid: on station probabilistic solar and wind power forecasting
This model forecasts how much power a solar farm or a wind farm will produce in the coming hours, and it gives a full range of outcomes (not just a single guess) so a grid operator can plan for the good case and the bad case. It is small enough to fit the envelope of a cheap microcontroller right at the station, with no cloud and no network connection, running there through an ONNX or TFLite export.
What goes in, what comes out
- Input: a short window of weather forecast numbers for the site (numerical weather prediction, or NWP, covariates such as forecast irradiance for solar or forecast wind speed and direction for wind). Solar input shape is (1, 6, 20): 6 time steps, 20 weather features. Wind input shape is (1, 12, 15): 12 time steps, 15 weather features.
- Output: 99 numbers per forecast hour, the 1 percent through 99 percent quantiles of power output, normalized to the site's rated capacity (0 to 1). A quantile is a "what if" level: the 10 percent quantile (P10) is a low estimate that power should exceed 90 percent of the time, the 90 percent quantile (P90) is a high estimate. The gap between P10 and P90 is the uncertainty band the operator plans against.
- This lets a grid or plant operator schedule reserves, bid into a market, and manage ramps with a calibrated sense of risk, using a device that sits on the station and keeps working when the network is down.
Why we built it this way
The model is a dual path Fourier Neural Operator, or FNO. The main path mixes information in the frequency domain: a fast Fourier transform, a learned filter on the frequencies, then a transform back. Weather and power move on daily and seasonal cycles, which is cheap to capture this way. Alongside it runs a small local mixer for the short range detail.
Everything is kept deliberately small: 136,780 parameters for solar, 311,554 for wind. Quantized to 8 bit integers each track is under a megabyte, and a single hourly forecast takes under a millisecond on one CPU core (measured on an x86 server CPU). That is small enough to sit on a microcontroller at the station, running through the ONNX or TFLite export. Because it runs there offline, the site's operational data never leaves the premises.
Performance
Speed and footprint, measured on CPU (AMD EPYC 9555, batch size 1, median of 20 runs).
| Track | Parameters | fp32 size | int8 size | Latency, 1 core |
|---|---|---|---|---|
| Solar, input (1, 6, 20) | 136,780 | 0.74 MB | 504 KB | 0.386 ms |
| Wind, input (1, 12, 15) | 311,554 | 1.91 MB | 1472 KB | 0.375 ms |
The int8 weights are the on device deploy size. The int8 pinball loss is essentially unchanged from fp32 (see Accuracy), so quantization is effectively lossless here.
Accuracy
The benchmark is GEFCom2014, the standard Global Energy Forecasting Competition dataset (Hong et al. 2016). The protocol is the final task (Task 15): train on all data before the held out test month and forecast that month from weather inputs only, with no test period power used (so there is no leakage).
Solar is 3 zones (test month June 2014), wind is 10 zones (test month December 2013). The metric is pinball loss averaged over the 1 to 99 percent quantiles, with power normalized to site capacity, exactly as in the competition. Lower pinball loss is better. "Skill" is the percent reduction in pinball loss against a named reference forecast.
| Benchmark | Metric | This model | Baseline (named) | Source |
|---|---|---|---|---|
| GEFCom2014 solar | pinball (norm.) | 0.01308 (int8 0.01328) | competition benchmark 0.0285 | measured (ours) |
| GEFCom2014 solar | skill vs competition benchmark | +54.1 percent | competition benchmark | measured (ours) |
| GEFCom2014 solar | skill vs diurnal persistence | +32.1 percent | diurnal persistence | measured (ours) |
| GEFCom2014 solar | pinball (norm.) | 0.01308 | our LightGBM quantile baseline 0.01232 | measured (ours) |
| GEFCom2014 solar | pinball (norm.) | 0.01308 | published LSTM/quantile NN 0.0143 | published |
| GEFCom2014 wind | pinball (norm.) | 0.04690 (int8 0.04692) | competition benchmark 0.0792 | measured (ours) |
| GEFCom2014 wind | skill vs competition benchmark | +40.8 percent | competition benchmark | measured (ours) |
| GEFCom2014 wind | skill vs diurnal persistence | +47.5 percent | diurnal persistence | measured (ours) |
| GEFCom2014 wind | pinball (norm.) | 0.04690 | our LightGBM quantile baseline 0.04547 | measured (ours) |
| GEFCom2014 wind | pinball (norm.) | 0.04690 | published GAN / normalizing flow / VAE / DDPM | published |
The model wins the official GEFCom2014 benchmark on both tracks, and it beats the competition benchmark by wide margins (skill +54.1 percent on solar, +40.8 percent on wind). What it is not is a new raw pinball record.
On the identical pipeline it ties our own LightGBM gradient boosted baseline (solar 0.01308 vs 0.01232, wind 0.04690 vs 0.04547). It beats a published LSTM/quantile NN on solar and a published GAN on wind, sits level with a published normalizing flow, and lands a few percent behind the best published diffusion model (VAE/DDPM) on wind.
So - the accuracy is competitive but with given resources, not chart topping. The real edge is where it delivers that accuracy: 136,780 and 311,554 parameters, under a megabyte in int8, sub millisecond on a CPU, running on station with the network gapped - which we feel is a great domain adaptation for our methodologies.
How to run it
See quickstart/ for a runnable example. The model loads in a few lines with the bundled
modeling.py plus config.json, from the safe safetensors weight file (no pickle):
from huggingface_hub import hf_hub_download
import modeling # bundled in this repo
path = hf_hub_download("lowdown-labs/fela-power-grid", "solar.safetensors")
model = modeling.load_model(path, track="solar")
# Preprocess a raw NWP window (shape (6, 20) for solar), then forecast.
x = modeling.preprocess_nwp(raw_window, track="solar") # validates shape, standardizes
import torch
with torch.no_grad():
quantiles = model(x) # (1, 99): the P1..P99 power quantiles for the center forecast hour
# A P10 to P90 band for the center forecast hour:
p10 = quantiles[0, 9].item()
p90 = quantiles[0, 89].item()
print("Center hour P10..P90 (fraction of capacity):", p10, p90)
The modeling.preprocess_nwp helper standardizes the weather window and validates its
shape (it fails clearly on the wrong shape or units). For an interactive playground, see
the Hugging Face Space linked in this repo.
Formats
This model is CPU native: no GPU is required to run it, in any format. The fp32 and int8 formats run on a plain CPU.
- fp32: reference and CPU.
- int8: on device deployment format (AVX512-VNNI on x86, NEON dot product on ARM). The int8 pinball loss is essentially unchanged (solar 0.01328 vs 0.01308, wind 0.04692 vs 0.04690), so on device quantization is effectively lossless here.
- bf16: an optional format for server or GPU inference, not required and not the on device format. Most commodity ARM and microcontroller CPUs lack native bf16, so use fp32 or int8 there. You never need a GPU; bf16 is only a convenience when one happens to be present.
Serving
For serving at scale, use the separate CPU native FELA server (https://github.com/Lowdown-Labs/fela_server). It runs this model on CPU, with no GPU required. The quickstart in this repo is the minimal single process path; the FELA server is the production serving path.
Training data
- GEFCom2014 (Global Energy Forecasting Competition 2014), public competition data released with the competition. Used for both training and the held out evaluation, under the GEFCom2014 Task 15 protocol described above. Solar and wind tracks. Citation: Hong, Pinson, Fan, Zareipour, Troccoli, Hyndman (2016), "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond," International Journal of Forecasting 32(3). The dataset is the public competition release; check the competition terms for the exact redistribution conditions before rehosting it.
No proprietary or customer data was used. The model takes only numerical weather prediction covariates as input.
Training data, splits and licensing
The training and held out evaluation splits are defined in train.py in this repo. A --smoke
flag rebuilds the split, asserts the audited held out window count per track, and exits before
training.
- Dataset: GEFCom2014 (Global Energy Forecasting Competition 2014), solar and wind tracks. Version: the Task 15 (final task) public release, as distributed with the paper. The solar track has 3 zones with 12 NWP predictors; the wind track has 10 zones with 4 NWP predictors.
- Source: the data was released as the appendix of the GEFCom2014 paper and mirrored by the competition General Chair at http://blog.drhongtao.com/2017/03/gefcom2014-load-forecasting-data.html (and via ScienceDirect, DOI 10.1016/j.ijforecast.2016.02.001). Citation: Hong, Pinson, Fan, Zareipour, Troccoli, Hyndman (2016), International Journal of Forecasting 32(3), 896-913.
- Split: GEFCom2014 Task 15 protocol, a fixed calendar held out month, not a random split.
Solar test month is June 2014 (2014-06-01 01:00 to 2014-07-01 00:00); wind test month is
December 2013. Training uses all prior data; the test month is forecast from NWP only (no
test period power, so no autoregressive leakage). The held out and train membership is the
is_testflag defined intrain.py, andtrain.py --smokeasserts the audited held out counts: solar 2154 windows over 3 zones, wind 7390 windows over 10 zones. A 6 percent tail of the training rows is held out as a validation set for early stopping (deterministic tail slice). - License: NO license is stated for GEFCom2014. The data is competition data delivered as an appendix to a copyrighted (all rights reserved) Elsevier / International Journal of Forecasting article; the author distribution page states only a citation requirement, with no reuse or commercial use grant. Underlying source data (e.g. ISO New England for the extended load track) may carry its own upstream terms, and the distributor warns against combining the datasets.
- Commercial verdict: UNCLEAR and UNSTATED. Competition data, no license grant, the highest risk of the family. Citation alone is not a commercial use grant. For any commercial or redistribution use, obtain written permission from the organizers (Tao Hong / International Institute of Forecasters) and verify the upstream source terms first.
Citations and licenses
This section consolidates the formal references and the direct links to the real license text for every dataset and method used, verified from source.
Datasets
- GEFCom2014 (Global Energy Forecasting Competition 2014): solar and wind tracks, the
Task 15 protocol used for both training and the held out evaluation.
- Reference: Hong, T., Pinson, P., Fan, S., Zareipour, H., Troccoli, A., & Hyndman, R. J. (2016). Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond. International Journal of Forecasting, 32(3), 896-913. DOI: 10.1016/j.ijforecast.2016.02.001
- Data and terms: released as the appendix of the paper and mirrored by the competition General Chair at blog.drhongtao.com/2017/03/gefcom2014-load-forecasting-data.html. The paper itself is (c) Elsevier / International Journal of Forecasting (all rights reserved): ScienceDirect article page.
- License: NO reuse or commercial use grant is stated, COMPETITION TERMS. The distribution page states only a citation requirement; the data is delivered as an appendix to a copyrighted Elsevier article, and underlying source data (e.g. ISO New England for the extended load track) may carry its own upstream terms. Citation is not a commercial use grant. For any commercial or redistribution use, obtain written permission from the organizers (Tao Hong / International Institute of Forecasters) and verify the upstream source terms first. See the fuller caveat under "Training data, splits and licensing" above.
Methods and code
- Fourier Neural Operator (FNO): the sequence mixer at the core of both tracks. Li, Z., Kovachki, N., Azizzadenesheli, K., Liu, B., Bhattacharya, K., Stuart, A., & Anandkumar, A. (2021). Fourier Neural Operator for Parametric Partial Differential Equations. ICLR. arXiv:2010.08895
- PyTorch: training and inference framework. Paszke, A., et al. (2019). PyTorch: An Imperative Style, High-Performance Deep Learning Library. NeurIPS. arXiv:1912.01703
- LightGBM: the reference gradient boosted quantile baseline. Ke, G., et al. (2017). LightGBM: A Highly Efficient Gradient Boosting Decision Tree. NeurIPS. proceedings
- NumPy / SciPy: used in the data preparation and evaluation pipeline; standard scientific Python stack. Harris et al. (2020), Nature 585, 357-362; Virtanen et al. (2020), Nature Methods 17, 261-272.
- ONNX Runtime / TFLite: the on device export and runtime path. onnxruntime.ai, ai.google.dev/edge/litert.
This model does not use Gated Linear Attention, Gated DeltaNet, or Landmark Attention: both
tracks are pure FNO (see modeling.py and train.py).
Intended use, limitations, and safety
What it is for:
- Short horizon probabilistic power forecasting at a solar or wind site, driven by a numerical weather prediction feed, on station or on device.
What it is not for:
- It is not a single point guarantee of output and not a replacement for a grid operator's judgment. The quantile band is a planning aid, not a control signal.
- It is not validated for direct, unsupervised use in a safety critical or protection critical control loop. Do not wire its output into automated dispatch, protection, or curtailment that affects grid stability without independent validation and a human or rule based check in the loop.
Evaluated conditions and known limits:
- Evaluated only on GEFCom2014 (3 solar zones, 10 wind zones) under the Task 15 protocol. Performance on other sites, climates, turbine types, or NWP feeds is not characterized here and should be validated before operational use.
- The model is a tie with a gradient boosted (LightGBM) baseline on raw accuracy and is a few percent behind the best published diffusion/VAE on wind. If raw pinball loss is the only thing that matters and device size does not, those baselines are reasonable alternatives. The reason to choose this model is the on station, sub megabyte, sub millisecond, network gapped deployment.
- A separate test on SDWPF (Baidu KDD Cup 2022), a harder modern wind farm benchmark, did not transfer well and is not claimed here. The genuine climate win is GEFCom2014.
- The quantile outputs are calibrated against the GEFCom2014 evaluation only. Verify calibration on your own data before relying on the P10 to P90 band for reserve sizing.
Privacy:
- The model runs on station and offline. When deployed on device, the site's operational and weather data does not leave the device, so there is no cloud round trip and no data shared with Lowdown Labs or any third party.
How to cite
Model and technical note:
@misc{lowdownlabs_grid_renewable,
title = {FELA Grid Renewable: on station probabilistic solar and wind power forecasting},
author = {Lowdown Labs},
year = {2026},
note = {Model card}
}
You must also cite the benchmark dataset and the core libraries:
- Hong, T., Pinson, P., Fan, S., Zareipour, H., Troccoli, A., Hyndman, R. J. (2016). Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond. International Journal of Forecasting, 32(3), 896 to 913.
- Li, Z., Kovachki, N., Azizzadenesheli, K., Liu, B., Bhattacharya, K., Stuart, A., Anandkumar, A. (2021). Fourier Neural Operator for Parametric Partial Differential Equations. International Conference on Learning Representations (ICLR).
- Paszke, A. et al. (2019). PyTorch: An Imperative Style, High-Performance Deep Learning Library. NeurIPS.
Acknowledgements and references
- GEFCom2014: Hong et al. (2016), International Journal of Forecasting 32(3), 896 to 913.
- Fourier Neural Operator: Li et al. (2021), ICLR. The architecture is built on the FNO.
- LightGBM (our reference quantile baseline): Ke, G. et al. (2017). LightGBM: A Highly Efficient Gradient Boosting Decision Tree. NeurIPS.
- PyTorch: Paszke et al. (2019), NeurIPS.
Model family
This is part of the FELA family from Lowdown Labs: one FNO architecture across many
modalities, all CPU native and subquadratic. This repo is published as
lowdown-labs/fela-power-grid. The sibling repos are:
lowdown-labs/fela-genomics: DNA sequence classification.lowdown-labs/fela-pdm: rotating machinery and turbofan health.lowdown-labs/fela-power-grid(this repo): probabilistic solar and wind power forecasting.lowdown-labs/fela-video: video moment retrieval and temporal grounding.lowdown-labs/fela-streaming-asr: streaming CPU speech recognition.
These are grouped under the FELA Collection on Hugging Face. The models are independently
trained per modality and do not share weights, so none carries a base_model link.
License
Released under the Lowdown Labs Lovely License 1.0 (CC BY-NC 4.0 plus Hippocratic License 3.0). See LICENSE. For most LL models, a commercial license may be available; contact Lowdown Labs.
- Downloads last month
- 2