Co-Study4Grid / docs /performance /history /skip-initial-obs.md
github-actions[bot]
Deploy f7b8bf6
1c730d1
|
Raw
History Blame Contribute Delete
3.26 kB

Skip the unused env.get_obs() in setup_environment_configs_pypowsybl

Trouvaille

Le profilage détaillé de /api/config sur la grille France 400 kV (118 MB) a révélé que env.get_obs() coûte ~4.6 s dans setup_environment_configs_pypowsybl. Il construit la première PypowsyblObservation en faisant des reads pypowsybl massifs (get_lines, get_buses, get_generators, get_loads, group-bys pandas…).

Mais dans recommender_service.update_config :

env, _obs, env_path, ... = setup_environment_configs_pypowsybl(network=self._base_network)
#     ^^^^  DISCARDED

Le _obs retourné est jeté — jamais stocké dans _cached_env_context, jamais utilisé par run_analysis_step1. Les ~4.6 s de construction sont du pur gaspillage.

Fix

Upstream (expert_op4grid_recommender >= 0.2.0.post3, commit b6f6282a)

Nouveau paramètre skip_initial_obs: bool = False sur :

  • get_env_first_obs_pypowsybl
  • setup_environment_configs_pypowsybl
  • setup_environment_configs (compat wrapper)
  • main.setup_environment_pypowsybl (compat wrapper)

Quand True, env.get_obs() est sauté et obs=None est retourné dans le tuple. Les appels ultérieurs à env.get_obs() par le caller (par ex. run_analysis_step1) restent fonctionnels.

Backward-compatible : défaut False → comportement historique inchangé.

Co-Study4Grid (recommender_service.update_config)

env, _obs, ... = setup_environment_configs_pypowsybl(
    network=self._base_network,
    skip_initial_obs=True,  # NEW
)

Invariant testé

Upstream (tests/test_environment_pypowsybl.py, 3 nouveaux tests)

  • test_get_env_first_obs_skips_get_obs_when_requested — avec skip_initial_obs=True, env.get_obs() n'est PAS appelée et obs is None.
  • test_get_env_first_obs_calls_get_obs_by_default — défaut conserve le comportement historique.
  • test_setup_environment_configs_forwards_skip_initial_obs — le wrapper de compat thread le flag jusqu'à l'inner function.

Co-Study4Grid (test_update_config_injects_preloaded_network_into_upstream)

Assertion enrichie pour vérifier que update_config passe skip_initial_obs=True à l'upstream helper.

Mesure sur grille France 400 kV

Avant Après Δ
env.get_obs() (première obs, discardée) 4 588 ms 0 ms −4 588 ms
update_config total (main thread) ~16-18 s 12 191 ms ~−4 s
/api/config endpoint wall-clock ~18 s ~14.9 s ~−3.5 s

Impact projeté sur Load Study (trace v14)

Segment v10 v14 attendu
/api/config 15 966 ms ~12-13 s (−3 à −4 s)
4 XHRs parallèles ~1.4 s (slowest) ~0.5-1 s (moins de contention NAD)
Fin dernier XHR 17 384 ms ~13-14 s (−3-4 s)
Load Study v6 → v14 −19 % ~−40 % (si le gain tient)

Dépendance

Co-Study4Grid requiert expert_op4grid_recommender >= 0.2.0.post3. L'ancienne version (0.2.0.post2 et antérieures) reste fonctionnelle mais sans ce gain — si le flag skip_initial_obs n'est pas reconnu, le call lèvera TypeError. Co-Study4Grid devrait garder une version minimum cohérente dans ses requirements.