# huongdm1896/fede-ator architecture

> Architecture diagram of the GitHub repository huongdm1896/fede-ator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/huongdm1896/fede-ator
- Repository: https://github.com/huongdm1896/fede-ator

## Overview

This repository is a Grid'5000 experiment harness for measuring energy use during Flower federated-learning runs. The main workflow configures hosts and an experiment, optionally runs a campaign across instances, applies CPU/GPU frequency controls while monitoring power, launches the Flower server and clients remotely, and records experiment and training logs. The example Flower application covers local data partitioning, client training/evaluation, and server aggregation. Some measurement behavior is delegated to the expetator dependency; unsampled implementation details are not inferred.

Main entry points: [`Run/measure_instance.py`](https://github.com/huongdm1896/fede-ator/blob/main/Run/measure_instance.py) (Instance measurement), [`Run/config_instances.json`](https://github.com/huongdm1896/fede-ator/blob/main/Run/config_instances.json) (Instance configs), [`Run/run_flwr.py`](https://github.com/huongdm1896/fede-ator/blob/main/Run/run_flwr.py) (Flower launcher), [`Flower_v1/server_1.py`](https://github.com/huongdm1896/fede-ator/blob/main/Flower_v1/server_1.py) (Flower server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Host Setup"]
  node_node_list["Host list"]
  node_ip_collection["IP collection<br/>[collect_ip.py]"]
  node_instance_config["Instance configs"]
end

subgraph group_measurement["Experiment Measurement"]
  node_campaign["Campaign runner"]
  node_instance_runner["Instance measurement"]
  node_monitoring["Energy monitors"]
  node_frequency_control["DVFS controls<br/>[custom_gpuclock.py]"]
  node_measurement_logs["Measurement logs"]
end

subgraph group_execution["Distributed Execution"]
  node_flower_runner["Flower launcher<br/>[run_flwr.py]"]
  node_process_cleanup["Remote cleanup<br/>[kill.py]"]
end

subgraph group_learning["Federated Learning"]
  node_fl_server["Flower server<br/>[server_1.py]"]
  node_fl_clients["Flower clients<br/>[client_1.py]"]
  node_training_data[("Local datasets")]
  node_training_logs["Training results"]
end

node_user(("Experimenter"))
node_grid_nodes(("Grid'5000 nodes"))
node_power_service(("Grid energy service"))

node_user -->|"resolves hosts"| node_ip_collection
node_node_list -->|"provides hosts"| node_ip_collection
node_ip_collection -->|"writes addresses"| node_instance_config
node_user -->|"starts campaign"| node_campaign
node_user -->|"starts instance"| node_instance_runner
node_campaign -->|"reads instances"| node_instance_config
node_campaign -->|"runs each instance"| node_instance_runner
node_instance_runner -->|"reads settings"| node_instance_config
node_instance_runner -->|"configures monitors"| node_monitoring
node_instance_runner -->|"configures leverage"| node_frequency_control
node_instance_runner -->|"runs locally"| node_flower_runner
node_instance_runner -->|"records run"| node_measurement_logs
node_monitoring -.->|"collects power"| node_power_service
node_monitoring -->|"records metrics"| node_measurement_logs
node_frequency_control -->|"sets clock"| node_grid_nodes
node_flower_runner -->|"reads launch settings"| node_instance_config
node_flower_runner -->|"dispatches via oarsh"| node_grid_nodes
node_flower_runner -->|"captures process output"| node_training_logs
node_grid_nodes -->|"runs server"| node_fl_server
node_grid_nodes -->|"runs clients"| node_fl_clients
node_fl_clients -->|"loads and partitions"| node_training_data
node_fl_clients -->|"sends updates"| node_fl_server
node_fl_server -->|"dispatches rounds"| node_fl_clients
node_fl_server -->|"writes metrics"| node_training_logs
node_user -.->|"requests cleanup"| node_process_cleanup
node_process_cleanup -.->|"reads host addresses"| node_instance_config
node_process_cleanup -.->|"terminates processes"| node_grid_nodes

click node_node_list "https://github.com/huongdm1896/fede-ator/blob/main/Run/nodelist"
click node_ip_collection "https://github.com/huongdm1896/fede-ator/blob/main/Run/collect_ip.py"
click node_instance_config "https://github.com/huongdm1896/fede-ator/blob/main/Run/config_instances.json"
click node_campaign "https://github.com/huongdm1896/fede-ator/blob/main/Run/measure_campaign.py"
click node_instance_runner "https://github.com/huongdm1896/fede-ator/blob/main/Run/measure_instance.py"
click node_frequency_control "https://github.com/huongdm1896/fede-ator/blob/main/Run/custom_gpuclock.py"
click node_flower_runner "https://github.com/huongdm1896/fede-ator/blob/main/Run/run_flwr.py"
click node_process_cleanup "https://github.com/huongdm1896/fede-ator/blob/main/Run/kill.py"
click node_fl_server "https://github.com/huongdm1896/fede-ator/blob/main/Flower_v1/server_1.py"
click node_fl_clients "https://github.com/huongdm1896/fede-ator/blob/main/Flower_v1/client_1.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_node_list,node_ip_collection,node_instance_config toneBlue
class node_campaign,node_instance_runner,node_monitoring,node_frequency_control,node_measurement_logs toneAmber
class node_flower_runner,node_process_cleanup toneMint
class node_fl_server,node_fl_clients,node_training_data,node_training_logs toneRose
class node_user,node_grid_nodes,node_power_service toneIndigo
```

## Components

### Host Setup

- [Host list](https://github.com/huongdm1896/fede-ator/blob/main/Run/nodelist): `Run/nodelist`
- [IP collection](https://github.com/huongdm1896/fede-ator/blob/main/Run/collect_ip.py): `Run/collect_ip.py`
- [Instance configs](https://github.com/huongdm1896/fede-ator/blob/main/Run/config_instances.json): `Run/config_instances.json`

### Experiment Measurement

- [Campaign runner](https://github.com/huongdm1896/fede-ator/blob/main/Run/measure_campaign.py): `Run/measure_campaign.py`
- [Instance measurement](https://github.com/huongdm1896/fede-ator/blob/main/Run/measure_instance.py): `Run/measure_instance.py`
- **Energy monitors**
- [DVFS controls](https://github.com/huongdm1896/fede-ator/blob/main/Run/custom_gpuclock.py): `Run/custom_gpuclock.py`
- **Measurement logs**

### Distributed Execution

- [Flower launcher](https://github.com/huongdm1896/fede-ator/blob/main/Run/run_flwr.py): `Run/run_flwr.py`
- [Remote cleanup](https://github.com/huongdm1896/fede-ator/blob/main/Run/kill.py): `Run/kill.py`

### Federated Learning

- [Flower server](https://github.com/huongdm1896/fede-ator/blob/main/Flower_v1/server_1.py): `Flower_v1/server_1.py`
- [Flower clients](https://github.com/huongdm1896/fede-ator/blob/main/Flower_v1/client_1.py): `Flower_v1/client_1.py`
- **Local datasets**
- **Training results**

### Other components

- **Experimenter**
- **Grid'5000 nodes**
- **Grid energy service**

## Connections

- Experimenter → IP collection: resolves hosts
- Host list → IP collection: provides hosts
- IP collection → Instance configs: writes addresses
- Experimenter → Campaign runner: starts campaign
- Experimenter → Instance measurement: starts instance
- Campaign runner → Instance configs: reads instances
- Campaign runner → Instance measurement: runs each instance
- Instance measurement → Instance configs: reads settings
- Instance measurement → Energy monitors: configures monitors
- Instance measurement → DVFS controls: configures leverage
- Instance measurement → Flower launcher: runs locally
- Instance measurement → Measurement logs: records run
- Energy monitors → Grid energy service: collects power
- Energy monitors → Measurement logs: records metrics
- DVFS controls → Grid'5000 nodes: sets clock
- Flower launcher → Instance configs: reads launch settings
- Flower launcher → Grid'5000 nodes: dispatches via oarsh
- Flower launcher → Training results: captures process output
- Grid'5000 nodes → Flower server: runs server
- Grid'5000 nodes → Flower clients: runs clients
- Flower clients → Local datasets: loads and partitions
- Flower clients → Flower server: sends updates
- Flower server → Flower clients: dispatches rounds
- Flower server → Training results: writes metrics
- Experimenter → Remote cleanup: requests cleanup
- Remote cleanup → Instance configs: reads host addresses
- Remote cleanup → Grid'5000 nodes: terminates processes
