Cloud2Grid E5c: ordinary generator-aware adaptation of GENCO (e5c_ft_n10000_s2)
GENCO (gridfm/genco-pf-transfer) fine-tuned on 10,000 synthetic AC power-flow states of the reconstructed Sundon 33 kV network (UK Power Networks), with the local solar and wind represented as explicit generators and the original GraphKit loss. It is the baseline for the response-aware E5d model: it fits the absolute grid state well on synthetic states, but in the evaluated experiments it responds only weakly to changes in solar generation (import response 0.014 of the AC reference on held-out synthetic pairs; fitted slope −0.04 MW per MW against −1.02 on 2,829 reconstructed 2024 states).
Part of Cloud2Grid (website · code · GitHub Release · reproduction), a study of adapting the GENCO grid foundation model (gridfm/genco-pf-transfer; Puech et al., 2026) to a real UK distribution network driven by satellite-derived solar.
Files
| File | What it is |
|---|---|
best_model_state_dict.pt |
the frozen checkpoint (original torch.save state_dict) |
normalizer_stats.pt |
the exact normaliser fitted with it; use only with this checkpoint |
graphkit_predict_config.yaml |
GraphKit configuration used for prediction |
IO_SCHEMA.md |
model architecture, inputs and outputs |
checkpoint_manifest.json |
file hashes, frozen registry entry, base-model and dependency provenance |
MODEL_CARD.md |
the released model card (also reproduced below) |
release/cloud2grid-e5c-ft-n10000-s2.tar.gz |
the GitHub Release archive, byte-identical (sha256 in SHA256SUMS) |
SHA256SUMS |
checksums of every file in this repository |
These are the files of the GitHub Release cloud2grid-models-v1, unchanged; the release archive's own SHA256 is the published one.
Load
import torch
from huggingface_hub import hf_hub_download
repo = "oriolh/cloud2grid-e5c-ft-n10000-s2"
state = torch.load(hf_hub_download(repo, "best_model_state_dict.pt"), map_location="cpu", weights_only=True)
norm = torch.load(hf_hub_download(repo, "normalizer_stats.pt"), map_location="cpu", weights_only=True)
# build GraphKit's GNS_heterogeneous model with graphkit_predict_config.yaml and load `state` (see IO_SCHEMA.md)
Verify
Re-run the synthetic claims with real inference from these Hugging Face copies (the verifier checks every archive's SHA256 first):
git clone https://github.com/hinox13/grid2cloud && cd grid2cloud
uv sync --extra genco
uv run hf download oriolh/cloud2grid-e5c-ft-n10000-s2 --revision v1 --include "release/*" --local-dir hf_assets
uv run hf download oriolh/cloud2grid-e5d-l1-s0 --revision v1 --include "release/*" --local-dir hf_assets
uv run hf download oriolh/cloud2grid-verification-synthetic-v1 --type dataset --revision v1 --include "release/*" --local-dir hf_assets
uv run python reproduce/verify_models.py --assets-dir hf_assets/release # CPU, about 2-3 minutes
No login is needed. Expected: All checks pass: True, claims C1-C5 reproduced, 44/44 scored metrics within tolerance (run anonymously from a fresh clone on 23 Oct 2026).
The real-state (2024) results need operating data that are not distributed, so they are documented but not independently reproducible from this repository.
Licence and attribution
Cloud2Grid's fine-tuned weights, configuration and cards: Apache-2.0 (LICENSE). Fine-tuned from gridfm/genco-pf-transfer (Apache-2.0); all its weights were modified, the architecture is unchanged. Training data: synthetic states from gridfm-datakit (Apache-2.0) on a network derived from UK Power Networks open data (CC BY 4.0); attribution in NOTICE.md.
The released model card (verbatim)
Model card: Cloud2Grid E5c (e5c_ft_n10000_s2)
What it is. GENCO (GraphKit GNS_heterogeneous) fine-tuned on 10,000 synthetic AC power-flow states of the Sundon 33 kV network. It uses the generator-aware representation, with Leighton Buzzard generation as explicit generator nodes. It is the frozen, selected E5c checkpoint, kept as the baseline for E5d.
| Checkpoint sha256 | 31b824241880ffc6807f2dad478c34c5c211ee31c7f403092e586c6373ab4d8a |
| Normaliser sha256 | bb34d0b741d4715e1a4a9c133e291fbe1962237d1eaa4e855d7dc420c35d3f3e. Use only with this checkpoint (baseMVA 36.722) |
| Selection | Pre-registered rule, synthetic validation only. FLAGGED: no run met every selection criterion, so the fallback rule chose it |
| Training | 200 epochs, best epoch 195. Pretrained init from gridfm/genco-pf-transfer (Apache-2.0). Recipe: lr 5e-4, batch 64, loss 0.1·physics + 0.9·masked MSE |
| Frozen record | metadata/e5c_checkpoint_registry.yaml in hinox13/grid2cloud, tag cloud2grid-submission-v1 |
| Formats | Original torch.save state_dict, unchanged (loads with torch.load(weights_only=True)) |
| Schema, licences | IO_SCHEMA.md, LICENSE (Apache-2.0), NOTICE.md |
Verified results (synthetic; reproducible with reproduce/verify_models.py)
E5c held-out test (2,804 states):
| Metric | Value |
|---|---|
| PBE | 0.614 MVA |
| Active residual | 0.528 MW (DC-PF 0.132) |
| Vm error | 0.0121 pu |
| Import MAE | 13.6 MW |
| Import sign accuracy (|AC| ≥ 5 MW) | 93.6 % |
Held-out E5d test pairs (500 per type), GENCO response vs AC:
| Import slope ratio | Import rel. error | Branch P | Vm | Va | |
|---|---|---|---|---|---|
| PV | 0.014 | 0.989 | 1.00 | 0.97 | 0.99 |
| Battery | 0.724 | 0.276 | 0.49 | 0.59 | 0.47 |
| Load | 0.600 | 0.415 | 0.57 | 0.49 | 0.47 |
Relative error is Σ|Δpred − ΔAC| / Σ|ΔAC|; 0 is perfect, and 1 means no response.
E5c is blind to PV. It fits absolute states well, but a change in PV generation barely moves its predicted import, flows or voltages (1.4 % of the AC import response).
Real-state results (not reproducible from this package)
On 2,829 real Sundon states from 2024 (UKPN measurements + satellite-derived PV), verdict E5C-B, generator-aware synthetic adaptation still insufficient:
- State and import accuracy: PBE 0.442 MVA, import MAE 7.74 MW (bias +7.7), import r 0.96.
- PV response: import responds to PV with slope −0.04 MW/MW, against −1.02 in AC.
These numbers depend on source data not included here (see the release notes).
Licence and provenance
- This package (Cloud2Grid's fine-tuned weights, configuration, model card and schema): Apache License 2.0, see
LICENSE. Copyright Oriol Hinojo. - Base model: fine-tuned from
gridfm/genco-pf-transferpretraining/best_model_state_dict.pt(sha256b2c9cf9b…5d41, Apache-2.0; Puech et al. 2026, arXiv:2608.09921). All of its weights were modified by fine-tuning; the architecture is unchanged. - Training data: synthetic states generated with gridfm-datakit (Apache-2.0) on a Sundon network model derived from UK Power Networks open data (CC BY 4.0). The attribution is in
NOTICE.md. - Exact provenance:
checkpoint_manifest.jsonholds the file hashes, the frozen registry entry, the public source tag and the dependency versions.
Reproducing the numbers
- What can be reproduced:
reproduce/verify_models.pyin hinox13/grid2cloud re-runs this checkpoint on the held-out synthetic verification set (release assetcloud2grid-verification-synthetic-v1.tar.gz). It recomputes every synthetic number in the "Verified results" section. Independent numerical reproduction is synthetic-only: the real-state numbers need data not in this release. - Numerical determinism: GraphKit/PyG inference on GPU is not bit-for-bit deterministic (most likely the varying order of GPU scatter-add reductions; not isolated, and measured on one CUDA 12.6 GPU setup).
- How large the noise is: two identical GPU runs differ by up to ~0.2 MW in decoded import and branch flows (mean ~0.03 MW); Vm and Va agree to ~1e-5. CPU inference is deterministic.
- Why: the near-ideal branches of the network amplify float32 angle rounding into flows.
- Effect on the published numbers: they come from one GPU run, so small response errors carry this noise.
- Tolerances: the verifier's tolerances are set from it (
reproduce/README.md). Claim thresholds are the pre-registered gates.
Limitations
- PV blindness: the model does not respond to PV changes. Do not use it to assess PV impacts.
- Generator-encoding issue:
- Before E5c, Leighton Buzzard generation reached GENCO as negative load. E5c made it an explicit generator.
- Still present: GraphKit's internal physics decoder sets Pg = 0 at PQ buses, so the known generation at buses 8–10 is missing from the model's internal residual feedback (not from its inputs or evaluation).
- Found later: this was found after freezing. Evaluation uses the correct generation, so the reported metrics are valid for the model as implemented; the effect of correcting it is not evaluated in this release.
- One network: Sundon 33 kV only; it does not transfer to other grids without retraining.
- Synthetic training only: no real data was used. The synthetic envelope comes from planning data (LTDS, ECR).
- Absolute import error: 13.6 MW MAE on synthetic test, and it fails the pre-registered ST3 / ST4 import gates.
- Single selected seed; the selection was flagged.
- Research artefact, not validated for operational use.
Model tree for oriolh/cloud2grid-e5c-ft-n10000-s2
Base model
gridfm/genco-pf-transfer