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

