UPDATE // RELASE NOTES Solar Forecast ML

UPDATE INFO TFS HA

in ca. 23 Std sollte das Training erledigt sein. Der Transformer läuft bereits und wurde komplett umgebaut.. hier weitere Informationen:

Toorox ForeSight HA — V2 “Phoenix”

TFS ist ein optionaler Side-Kick zu SFML. Der Kern-Forecast kommt von SFML (Physics + Ridge + LSTM + MLP + Kalman). TFS steuert einen eigenen Transformer-basierten Forecast bei, der in Schlechtwetterlagen und Verschattungsszenarien vom SFML-Ensemble stärker gewichtet wird.

Bei klarem Himmel dominieren Physik und klassische Modelle — dort bekommt TFS weniger Gewicht. Bei Overcast/Fog/Verschattung steigt das Gewicht auf bis zu 55 % des finalen Forecasts.

Architektur

  • iTransformer + PatchTST Hybrid mit Conditional Layer Norm (FiLM) für Panel-Geometrie-Konditionierung
  • ~22 M Parameter (Chinchilla + Pretrain-Korpus)
  • 168 h Kontext → 72 h Forecast mit Multi-Variate Weather Cross-Attention
  • Gain-Learning Physik-Baseline (identische Formel zu SFMLs PhysicsEngine)
  • P10 / P50 / P90 Quantile mit monotoner Parametrisierung
  • LoRA Rank-8 per-Instanz Finetune (Base-Modell bleibt frozen)
  • Progressive Horizon Curriculum (24 h → 48 h → 72 h) im Pretrain

API

GET  /health                                   → {"status": "ok", ...}
POST /api/forecast/run?forecast_type=sfml      → SFML-contract (p50 only)
GET  /api/forecast/quantiles?date=YYYY-MM-DD   → P10/P50/P90 (für SFML-Stats)
POST /api/lora/refinetune[?force=true]         → Admin: Finetune-Trigger
GET  /api/admin/status                         → State + Adapter-Info

Datenfluss

SFML-DB (read-only)    (ICON, GFS, ECMWF)   BrightSky
     │                         │                          │
     ▼                         ▼                          ▼
[History: 168h actuals+weather]      [Weather Blender + CloudType]
     │                                           │
     └───────────────┬───────────────────────────┘
                     ▼
           [Feature Extraktion (28+3)]
                     ▼
         [Phoenix Transformer (Base + LoRA)]
                     ▼
         [Gain × Baseline]
                     ▼
       [Physics Post-Processing]
                     ▼
   [TFS State-DB: p10/p50/p90 + Cache]
                     │
                     ▼
      SFML ruft /api/forecast/run → p50 blend
      SFML-Stats ruft /api/forecast/quantiles → UI

Architektur

Docker-Image basiert auf python:3.14.2-slim-bookworm (nicht Alpine, wegen PyTorch Wheels).

Pretrain-Weights: models/base/TFS-V2_pretrain_*.safetensors LoRA-Adapter: /config/toorox_foresight_ha/lora/lora_<instance>.safetensors State-DB: /config/toorox_foresight_ha/tfs.db

Training

Finetune:

# Auto (skip wenn Adapter aktuell)
--force   # Erzwinge Neu-Kalibrierung

Konstanten

Konstante Wert Quelle
EMA_ALPHA im Physics-Calibrator 0.22 SFML V16.4.0 Lesson
Gain-Range [0.0, 1.3] Physics-plausibel inkl. Cloud-Enhancement
Baseline γ_pmp -0.004 /K Crystalline Si Standard
NOCT 45 °C Standard-Panel
System-Efficiency 0.90 SFML-kompatibel
Albedo 0.2 SFML-kompatibel
LoRA-Rank 8 Chinchilla-sicher bei 800+ Samples

Die ersten Forecasts ohne Fine-Tuning sehen sehr vielversprechend aus..!

Stunde                  Gesamt   Gr.1   Gr.2  Cloud
----------------------------------------------------------
2026-04-21T07:00:00+02:00  0.058  0.039  0.019  clear
2026-04-21T08:00:00+02:00  0.211  0.137  0.074  clear
2026-04-21T09:00:00+02:00  0.441  0.275  0.166  clear
2026-04-21T10:00:00+02:00  0.728  0.442  0.286  clear
2026-04-21T11:00:00+02:00  1.007  0.603  0.405  clear
2026-04-21T12:00:00+02:00  1.216  0.723  0.493  clear
2026-04-21T13:00:00+02:00  1.310  0.777  0.532  clear
2026-04-21T14:00:00+02:00  1.257  0.750  0.506  clear
2026-04-21T15:00:00+02:00  1.093  0.658  0.435  cirrus
2026-04-21T16:00:00+02:00  0.824  0.505  0.318  cirrus
2026-04-21T17:00:00+02:00  0.614  0.383  0.232  cirrus
2026-04-21T18:00:00+02:00  0.366  0.235  0.131  cirrus
2026-04-21T19:00:00+02:00  0.176  0.118  0.058  clear
2026-04-21T20:00:00+02:00  0.004  0.003  0.002  clear
----------------------------------------------------------
TOTAL                    9.31   5.65   3.66  kWh

Ich konnte Last auf die HW während des Tränings um 90% reduzieren, was eine deutlich breiterer HW auf dem Host zulässt.. das ist unglaublich!

2026-04-20T16:42:45.511576Z [info     ] finetune_dataset_complete      total_samples=50 valid_ratio=50/50
2026-04-20T16:42:45.513244Z [info     ] finetune_dataset_ready         samples=50
2026-04-20T16:42:46.275784Z [info     ] finetune_training_start        device=cpu lora_rank=8 max_epochs=5 samples=50 train_size=40 val_size=10
2026-04-20T16:43:00.761739Z [info     ] finetune_epoch                 best_val=n/a elapsed=14.5s epoch=1/5 train_loss=0.10059 val_loss=0.09568
2026-04-20T16:43:14.242626Z [info     ] finetune_epoch                 best_val=0.09568 elapsed=28.0s epoch=2/5 train_loss=0.10074 val_loss=0.09568
2026-04-20T16:43:29.193445Z [info     ] finetune_epoch                 best_val=0.09568 elapsed=42.9s epoch=3/5 train_loss=0.10066 val_loss=0.09568
2026-04-20T16:43:29.193620Z [info     ] finetune_early_stop            epoch=3
2026-04-20T16:43:29.202604Z [info     ] finetune_complete              adapter=/config/toorox_foresight_ha/lora/lora_default.safetensors elapsed=42.9s epochs=3 val_loss=0.09568
2026-04-20T16:43:29.207361Z [info     ] finetune_done                  epochs=3 samples=50 status=success 

Das “Validation-Skript” funktioinert und baut die Samples nun selber und filtert falsche Werte heraus. Genau das was erreicht werden soll(te)

2026-04-20T17:41:35.026981Z [info     ] finetune_dataset_progress      offset=10/200 samples=10
2026-04-20T17:42:16.104827Z [info     ] finetune_dataset_progress      offset=20/200 samples=20
2026-04-20T17:42:57.175921Z [info     ] finetune_dataset_progress      offset=30/200 samples=30
2026-04-20T17:43:35.924871Z [info     ] finetune_dataset_progress      offset=40/200 samples=40
2026-04-20T17:44:17.918183Z [info     ] finetune_dataset_progress      offset=50/200 samples=50
2026-04-20T17:44:57.710230Z [info     ] finetune_dataset_progress      offset=60/200 samples=60
2026-04-20T17:45:36.313844Z [info     ] finetune_dataset_progress      offset=70/200 samples=70
2026-04-20T17:46:18.301246Z [info     ] finetune_dataset_progress      offset=80/200 samples=80
2026-04-20T17:46:58.301932Z [info     ] finetune_dataset_progress      offset=90/200 samples=90

Durch de neue Möglichkeit selbst zu entscheiden, wann das FT durchgeführt werden soll, ist es auch einfacher es in auf seine eigenen Backup-Routinen einzustellen.

Die Quantillen spreizen noch nicht genug.. eigentlich überhaupt nicht Das muss ich noch überprüfen - > Bug

2026-04-20T17:17:31.222205Z [info     ] forecast_complete              groups=2 horizon=72h lora=active p10=26.8kWh p50=26.8kWh p90=26.8kWh

Status: Code läuft → Model ist noch nicht fertig trainiert
RELEASE: Geplant Donnerstag

2 „Gefällt mir“