- Introduction
- Key Features
- Installation
- Modes of Operation
- Quick Start
- Documentation
- Contributing
- Acknowledgment
- Authors
MEDfl is an open-source Federated Learning (FL) framework designed for both simulation and real-world distributed trainingin the medical and healthcare domains. It integrates Differential Privacy (DP), Transfer Learning (TL), and secure communication to enable privacy-preserving model training across multiple institutions—particularly suited for medical and clinical data.
-
🧩 Two Operation Modes
- Simulation Mode: Run FL experiments locally for testing and benchmarking.
- Real-World Mode: Connect remote clients for production-grade FL.
-
🔒 Differential Privacy (Opacus Integration)
Ensures client updates are mathematically protected against data leakage. -
🧠 Transfer Learning Integration
Improve convergence and accuracy in small or heterogeneous datasets. -
⚙️ Modular Design
Plug-and-play components for models, optimizers, datasets, and aggregation strategies.
pip install medfl✅ Requires Python 3.9+.
If you prefer the development version:
git clone https://github.com/MEDomics-UdeS/MEDfl.git
cd MEDfl
pip install -e .| Mode | Description | Typical Use Case |
|---|---|---|
| Simulation FL | Runs all clients locally in a controlled environment. | Benchmarking, debugging, or prototyping. |
| Real-World FL | Connects distributed client machines. | Multi-institution collaboration, production deployments. |
Server Setup
from MEDfl.rw.server import FederatedServer, Strategy
custom_strategy = Strategy(
name="FedAvg",
fraction_fit=1,
min_fit_clients=1,
min_evaluate_clients=1,
min_available_clients=1,
local_epochs=1,
threshold=0.5,
learning_rate=0.01,
optimizer_name="SGD",
saveOnRounds=3,
savingPath="./",
total_rounds=10,
datasetConfig={"isGlobal": True, "globalConfig": {"target": "label", "testFrac": 0.2}},
)
server = FederatedServer(
host="0.0.0.0",
port=8080,
num_rounds=10,
strategy=custom_strategy,
)
server.start()Client Setup
from MEDfl.rw.client import FlowerClient, DPConfig
# Example: XGBoost client
xgb_params = {
"objective": "binary:logistic",
"eval_metric": "logloss",
"eta": 0.1,
"max_depth": 6,
"subsample": 0.8,
"colsample_bytree": 0.8,
"tree_method": "hist", # GPU: "gpu_hist"
}
client = FlowerClient(
server_address="100.65.215.27:8080",
data_path="../data/client1.csv",
dp_config=None, # DP only applies to neural networks
model_type="xgb",
xgb_params=xgb_params,
xgb_rounds=10,
)
client.start()💡 Tip:
Use Tailscale to connect clients and server under the same secure VPN for real-world deployments.
You can generate and host the documentation locally with Sphinx:
cd docs
make clean && make html
cd _build/html
python -m http.serverWe welcome contributions of all kinds — from bug fixes to new modules.
- Fork the repo and create a feature branch.
- Run tests and format your code with
blackandflake8. - Submit a Pull Request with clear details on your changes.
MEDfl is part of the MEDomicsLab initiative at the Université de Sherbrooke.
It was developed to enable secure, privacy-preserving, and reproducible machine learning across distributed medical datasets.
- 🧑💻 Ouael Nedjem Eddine Sahbi — Master’s Research Student, Université de Sherbrooke
- 👨💻 Haithem Lamri — Research Intern
- 🧬 MEDomics-UdeS
⭐ If you find this project useful, please consider starring it on GitHub to support continued development.