Co-Study4Grid / docs /performance /performance-profiling.md
github-actions[bot]
Deploy 7688ef1
13d4e44
|
Raw
History Blame Contribute Delete
2.5 kB
# Performance Profiling: Network Diagram & Visualization
This document details the performance bottlenecks identified in ExpertAssist when working with large electrical grids (e.g., the French grid with ~10k branches).
### Scenario Timings (Optimized v2)
Profiling was conducted using `config_large_grid.json` (French grid, ~10k branches).
| Scenario | Component | Before | After (v2) | Note |
|---|---|---|---|---|
| **1. Initial Load** | `pp.network.load` | ~2.4s | ~2.4s | I/O bound |
| | Base Diagram | ~7.2s | **3.5s** | Optimized flow extraction |
| **2. Contingency** | N-1 Analysis | ~19.8s | **12.9s** | Baseline simulation |
| | Flow Extraction | 0.8s | **0.06s** | **13x speedup** via vectorization |
| | Delta Calculation | 0.47s | **0.01s** | **47x speedup** via vectorization |
| **3. Manual Action** | Simulation Body | 16.5s | **4.0s** | **4x speedup** |
| | `care_mask` loop | 12.17s | **0.01s** | **1,100x speedup** |
| | `get_obs()` calls | 0.65s | **0.01s** | **65x speedup** via caching |
## Identified Bottlenecks & Fixes
### 1. Python-Side Overhead: Array Copying (FIXED)
The most significant bottleneck was a 12s overhead in the `care_mask` loop during manual action simulation.
- **Fix**: Cache these arrays as local variables before entering loops and use NumPy vectorized masking/indexing. Achieved **1,100x speedup**.
### 2. Row-by-Row Flow Extraction & Deltas (FIXED)
Extracting flows and computing deltas using loops over 10k branches was extremely slow.
- **Fix**: Replaced loops with pandas/numpy vectorized operations. Flow extraction is now **13x faster**, and delta computation is **47x faster**.
### 3. Redundant Observation Refreshes (FIXED)
Refetching N and N-1 observations for every manual action check added ~0.65s of overhead.
- **Fix**: Cached converged observations for a given network variant.
### 4. Large SVG Payload (~13 MB)
The pypowsybl Network Area Diagram (NAD) for the full grid produces an SVG string of ~13.2 MB.
- **Status**: Still present. This is the remaining bottleneck for frontend responsiveness.
## Profiling Tools
A standalone profiling script is available at `scripts/profile_diagram_perf.py`. It benchmarks:
1. Initial network loading and base diagram generation.
2. Contingency selection and N-1 diagram generation.
3. Manual action application and post-action diagram generation.
**Usage:**
```bash
# Run with project venv
./venv_expert_assist_py310/bin/python scripts/profile_diagram_perf.py config_large_grid.json
```