Files
README.md
Skynet is a distributed research framework that trains a global model across multiple heterogeneous clients without sharing raw data and visualizes model evolution. The lightweight model is trained locally to preserve privacy, meet governance rules, reduce risk of model hijacking, and fitting the structured, private nature of threat data.
Skynet implements a federated learning system designed for cybersecurity prototype research. It features:
- Modular Components
- Server — coordinates aggregation, maintains the global model.
- Clients — perform local training on synthetic or custom datasets.
- Controller — orchestrates rounds, ensures all updates are received.
- Secure Aggregation
Clients mask updates with pairwise random generators (PRGs) so the server never sees raw gradients. - Analytics Suite
CLI-driven chart generator with both static PNGs and animated GIFs (Matplotlib + Pillow). - Automation
One-click orchestration through a single bash script (scripts/skynet.sh). - Visualizations
Accuracy, weight norms, and training weight distributions are automatically exported for analysis.
Skynet/
├── analytics/
│ ├── __init__.py
│ └── charts.py
├── client/
│ ├── client.py
│ ├── data.py
│ └── __init__.py
├── controller/
│ ├── controller.py
│ └── __init__.py
├── models/
│ ├── crypto.py
│ ├── models.py
│ ├── network.py
│ └── __init__.py
├── server/
│ ├── server.py
│ ├── model_state.py
│ └── __init__.py
├── scripts/
│ ├── install.sh
│ └── skynet.sh
├── logs/
│ └── exports/
├── requirements.txt
└── README.md
- Python 3.10+
git,curl, andbash
git clone https://github.com/AalbatrossGuy/Skynet.git
cd Skynet
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
./scripts/skynet.sh start
./scripts/skynet.sh stop # For stoppingThey can be set anytime before running any command:
export ROUNDS=10
export CLIENTS="A B C D"
export CLIENT_SAMPLES=500
export CLIENT_ROUNDS=6
export CLIENT_LR=0.4
export SERVER_HOST=0.0.0.0
export SERVER_PORT=8000
./scripts/skynet.sh start| Command | Description |
|---|---|
setup |
Create venv and install requirements |
start |
Start server, clients, and controller (auto export + charts) |
start-server |
Start only the server |
start-clients |
Start only clients |
start-controller |
Start only controller |
stop |
Stop all components |
status |
Show process and server status |
logs |
Tail all logs in real time |
| Variable | Default | Description |
|---|---|---|
ROUNDS |
5 | Number of federated training rounds |
MIN_CLIENTS |
3 | Minimum clients per round |
CLIENTS |
A B C |
Client identifiers |
CLIENT_SAMPLES |
300 | Samples per client dataset |
CLIENT_ROUNDS |
5 | Local epochs per client |
CLIENT_LR |
0.5 | Local learning rate |
SERVER_HOST |
127.0.0.1 | Server bind address |
SERVER_PORT |
8000 | Server port |
EXPORT_DIR |
logs/exports |
Where exports & charts are saved |
EXPORT_BASENAME |
model_state_summary.json |
Base name for export file |
AUTO_STOP |
1 | Automatically stop everything after export |
SETTLE_TIMEOUT |
10 | Seconds to wait before exporting |
logs/
├── client_A.out
├── client_B.out
├── controller.out
├── server.out
└── exports/
├── export.json
├── export_accuracy_per_client.png
├── export_weight_norm.png
├── export_final_weights.png
-> Initialization — Server starts, clients register, and controller configures rounds.
-> Local Training — Each client trains on its synthetic data and computes a local update.
-> Secure Aggregation — Clients mask updates with pairwise random vectors (PRGs).
-> Global Update — Server aggregates masked updates; masks cancel out.
-> Repeat — Controller triggers the next round until completion.
-> Export + Visualization — Server exports final state (export.json); analytics generates charts.
