FederatedScope ist eine umfassende Plattform für föderierte Lernung, die eine bequeme Verwendung und flexible Anpassung für verschiedene Föderat -Lernaufgaben sowohl in der Wissenschaft als auch in der Industrie bietet. Basierend auf einer ereignisgesteuerten Architektur integriert FederatedScope reichhaltige Funktionen von Funktionen, um die aufstrebenden Anforderungen des Verbundlernens zu erfüllen, und zielt darauf ab, eine benutzerfreundliche Plattform aufzubauen, um das Lernen sicher und effektiv zu fördern.
Auf unserer Website finden Sie ein detailliertes Tutorial: federatedScope.io
Sie können FederatedScope über FederatedScope Playground oder Google Colab probieren.
| Codestruktur | Schneller Start | Fortgeschrittene | Dokumentation | Veröffentlichungen | Beitragen |
FederatedScope
├── federatedscope
│ ├── core
│ | ├── workers # Behaviors of participants (i.e., server and clients)
│ | ├── trainers # Details of local training
│ | ├── aggregators # Details of federated aggregation
│ | ├── configs # Customizable configurations
│ | ├── monitors # The monitor module for logging and demonstrating
│ | ├── communication.py # Implementation of communication among participants
│ | ├── fed_runner.py # The runner for building and running an FL course
│ | ├── ... ..
│ ├── cv # Federated learning in CV
│ ├── nlp # Federated learning in NLP
│ ├── gfl # Graph federated learning
│ ├── autotune # Auto-tunning for federated learning
│ ├── vertical_fl # Vertical federated learning
│ ├── contrib
│ ├── main.py
│ ├── ... ...
├── scripts # Scripts for reproducing existing algorithms
├── benchmark # We release several benchmarks for convenient and fair comparisons
├── doc # For automatic documentation
├── environment # Installation requirements and provided docker files
├── materials # Materials of related topics (e.g., paper lists)
│ ├── notebook
│ ├── paper_list
│ ├── tutorial
│ ├── ... ...
├── tests # Unittest modules for continuous integration
├── LICENSE
└── setup.py
Wir geben den Benutzern ein Beispiel für ein End-to-End-Beispiel, um einen Standard-FL-Kurs mit FederatedScope durchzuführen.
Zunächst müssen Benutzer den Quellcode klonen und die erforderlichen Pakete installieren (wir empfehlen die Python -Version> = 3.9). Sie können zwischen den folgenden zwei Installationsmethoden (über Docker oder Conda) wählen, um FederatedScope zu installieren.
git clone https://github.com/alibaba/FederatedScope.git
cd FederatedScopeSie können Docker -Image bauen und mit Docker Env (CUDA 11 und Torch 1.10) ausführen:
docker build -f environment/docker_files/federatedscope-torch1.10.Dockerfile -t alibaba/federatedscope:base-env-torch1.10 .
docker run --gpus device=all --rm -it --name "fedscope" -w $(pwd) alibaba/federatedscope:base-env-torch1.10 /bin/bash
Wenn Sie mit Down-Stream-Aufgaben wie Graph FL ausgeführt werden müssen, ändern Sie den Namen der Anforderung/Docker-Datei bei der Ausführung der oben genannten Befehle in ein anderes:
# environment/requirements-torch1.10.txt ->
environment/requirements-torch1.10-application.txt
# environment/docker_files/federatedscope-torch1.10.Dockerfile ->
environment/docker_files/federatedscope-torch1.10-application.Dockerfile
Hinweis: Sie können CUDA 10 und Torch 1.8 über den Wechsel von torch1.10 auf torch1.8 verwenden. Die Docker-Bilder basieren auf dem Nvidia-Docker. Bitte installieren Sie die NVIDIA-Treiber und nvidia-docker2 im Host-Computer. Weitere Informationen finden Sie hier.
Wir empfehlen, eine neue virtuelle Umgebung zu verwenden, um FederatedScope zu installieren:
conda create -n fs python=3.9
conda activate fsWenn Ihr Backend-Torch ist, installieren Sie die Torch im Voraus (Torch-Get-Started). Wenn Ihre CUDA -Version beispielsweise 11.3 ist, führen Sie bitte den folgenden Befehl aus:
conda install -y pytorch=1.10.1 torchvision=0.11.2 torchaudio=0.10.1 torchtext=0.11.1 cudatoolkit=11.3 -c pytorch -c conda-forgeFür Benutzer mit Apple M1 -Chips:
conda install pytorch torchvision torchaudio -c pytorch
# Downgrade torchvision to avoid segmentation fault
python -m pip install torchvision==0.11.3 Nach der Installation des Backends können Sie FederatedScope von source installieren:
# Editable mode
pip install -e .
# Or (developers for dev mode)
pip install -e .[dev]
pre-commit installJetzt haben Sie die minimale Version von FederatedScope erfolgreich installiert. ( Optinal ) für die Anwendungsversion einschließlich Grafik, NLP und Sprache, Ausführen:
bash environment/extra_dependencies_torch1.10-application.sh Um eine FL -Aufgabe auszuführen, sollten Benutzer einen Datensatz vorbereiten. Das in FederatedScope bereitgestellte Datazoo kann beim automatischen Herunterladen und Vorverfahren weit verbreitete öffentliche Datensätze für verschiedene FL-Anwendungen, einschließlich CV, NLP, Grafiklernen, Empfehlungen usw., dazu beitragen cfg.data.type = DATASET_NAME in der Konfiguration direkt anzugeben. Zum Beispiel,
cfg.data.type = ' femnist 'Um angepasste Datensätze zu verwenden, müssen Sie die Datensätze nach einem bestimmten Format vorbereiten und registrieren. Weitere Informationen finden Sie in angepassten Datensätzen.
Dann sollten Benutzer die Modellarchitektur angeben, die im FL -Kurs geschult wird. FederatedScope bietet ein ModellZoo, das die Implementierung weit verbreiteter Modellarchitekturen für verschiedene FL -Anwendungen enthält. Benutzer können cfg.model.type = MODEL_NAME einrichten, um eine bestimmte Modellarchitektur in FLF -Aufgaben anzuwenden. Zum Beispiel,
cfg.model.type = 'convnet2'Mit FederatedScope können Benutzer benutzerdefinierte Modelle durch Registrierung verwenden. Weitere Informationen zum Anpassen einer Modellarchitektur finden Sie in angepassten Modellen.
Beachten Sie, dass FederatedScope eine einheitliche Schnittstelle sowohl für den Standalone -Modus als auch für den verteilten Modus bietet und es Benutzern ermöglicht, durch Konfigurieren zu ändern.
Der eigenständige Modus in FederatedScope bedeutet, mehrere Teilnehmer (Server und Clients) in einem einzelnen Gerät zu simulieren, während die Daten der Teilnehmer voneinander isoliert werden und ihre Modelle möglicherweise über die Weitergabe von Nachrichten geteilt werden.
Hier zeigen wir, wie man eine Standard -FL -Aufgabe mit FederatedScope ausführt, wobei cfg.data.type = 'FEMNIST' und cfg.model.type = 'ConvNet2' Vanilla Fedavg für eine Bildklassifizierungsaufgabe ausführt. Benutzer können Schulungskonfigurationen wie cfg.federated.total_round_num , cfg.dataloader.batch_size und cfg.train.optimizer.lr in der Konfiguration (A.YAML -Datei) anpassen und eine Standard -FL -Aufgabe ausführen als:
# Run with default configurations
python federatedscope/main.py --cfg scripts/example_configs/femnist.yaml
# Or with custom configurations
python federatedscope/main.py --cfg scripts/example_configs/femnist.yaml federate.total_round_num 50 dataloader.batch_size 128Anschließend können Sie einige überwachte Metriken während des Trainingsprozesses beobachten wie:
INFO: Server has been set up ...
INFO: Model meta-info: <class 'federatedscope.cv.model.cnn.ConvNet2'>.
... ...
INFO: Client has been set up ...
INFO: Model meta-info: <class 'federatedscope.cv.model.cnn.ConvNet2'>.
... ...
INFO: {'Role': 'Client #5', 'Round': 0, 'Results_raw': {'train_loss': 207.6341676712036, 'train_acc': 0.02, 'train_total': 50, 'train_loss_regular': 0.0, 'train_avg_loss': 4.152683353424072}}
INFO: {'Role': 'Client #1', 'Round': 0, 'Results_raw': {'train_loss': 209.0940284729004, 'train_acc': 0.02, 'train_total': 50, 'train_loss_regular': 0.0, 'train_avg_loss': 4.1818805694580075}}
INFO: {'Role': 'Client #8', 'Round': 0, 'Results_raw': {'train_loss': 202.24929332733154, 'train_acc': 0.04, 'train_total': 50, 'train_loss_regular': 0.0, 'train_avg_loss': 4.0449858665466305}}
INFO: {'Role': 'Client #6', 'Round': 0, 'Results_raw': {'train_loss': 209.43883895874023, 'train_acc': 0.06, 'train_total': 50, 'train_loss_regular': 0.0, 'train_avg_loss': 4.1887767791748045}}
INFO: {'Role': 'Client #9', 'Round': 0, 'Results_raw': {'train_loss': 208.83140087127686, 'train_acc': 0.0, 'train_total': 50, 'train_loss_regular': 0.0, 'train_avg_loss': 4.1766280174255375}}
INFO: ----------- Starting a new training round (Round #1) -------------
... ...
INFO: Server: Training is finished! Starting evaluation.
INFO: Client #1: (Evaluation (test set) at Round #20) test_loss is 163.029045
... ...
INFO: Server: Final evaluation is finished! Starting merging results.
... ...
Der verteilte Modus in FederatedScope bezeichnet das Ausführen mehrerer Verfahren zum Erstellen eines FL -Kurs, bei dem jede Prozedur als Teilnehmer (Server oder Client) verwendet wird, die sein Modell instanziiert und seine Daten lädt. Die Kommunikation zwischen den Teilnehmern wird bereits vom Kommunikationsmodul von FederateDScope bereitgestellt.
Um mit verteiltem Modus zu laufen, müssen Sie nur:
cfg.data.file_path = PATH/TO/DATA ein.cfg.federate.model = 'distributed' und geben Sie die Rolle jedes Teilnehmers durch cfg.distributed.role = 'server'/'client' an.cfg.distribute.server_host/client_host = xxxx und cfg.distribute.server_port/client_port = xxxx . (Beachten Sie, dass Sie für einen Server server_host und server_port für Hörmeldungen einrichten müssen. Für einen Client müssen Sie client_host und client_port für das Hören sowie für server_host und server_port einrichten, um sich in einem FL -Kurs anzuschließen)Wir bereiten ein synthetisches Beispiel für das Ausführen mit verteiltem Modus vor:
# For server
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_server.yaml data.file_path ' PATH/TO/DATA ' distribute.server_host x.x.x.x distribute.server_port xxxx
# For clients
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_client_1.yaml data.file_path ' PATH/TO/DATA ' distribute.server_host x.x.x.x distribute.server_port xxxx distribute.client_host x.x.x.x distribute.client_port xxxx
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_client_2.yaml data.file_path ' PATH/TO/DATA ' distribute.server_host x.x.x.x distribute.server_port xxxx distribute.client_host x.x.x.x distribute.client_port xxxx
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_client_3.yaml data.file_path ' PATH/TO/DATA ' distribute.server_host x.x.x.x distribute.server_port xxxx distribute.client_host x.x.x.x distribute.client_port xxxx Ein ausführbares Beispiel mit generierten Spielzeugdaten kann ausgeführt werden (ein Skript finden Sie in scripts/run_distributed_lr.sh ):
# Generate the toy data
python scripts/distributed_scripts/gen_data.py
# Firstly start the server that is waiting for clients to join in
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_server.yaml data.file_path toy_data/server_data distribute.server_host 127.0.0.1 distribute.server_port 50051
# Start the client #1 (with another process)
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_client_1.yaml data.file_path toy_data/client_1_data distribute.server_host 127.0.0.1 distribute.server_port 50051 distribute.client_host 127.0.0.1 distribute.client_port 50052
# Start the client #2 (with another process)
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_client_2.yaml data.file_path toy_data/client_2_data distribute.server_host 127.0.0.1 distribute.server_port 50051 distribute.client_host 127.0.0.1 distribute.client_port 50053
# Start the client #3 (with another process)
python federatedscope/main.py --cfg scripts/distributed_scripts/distributed_configs/distributed_client_3.yaml data.file_path toy_data/client_3_data distribute.server_host 127.0.0.1 distribute.server_port 50051 distribute.client_host 127.0.0.1 distribute.client_port 50054Und Sie können die Ergebnisse beobachten (die IP -Adressen sind mit 'xxxx' anonymisiert):
INFO: Server: Listen to x.x.x.x:xxxx...
INFO: Server has been set up ...
Model meta-info: <class 'federatedscope.core.lr.LogisticRegression'>.
... ...
INFO: Client: Listen to x.x.x.x:xxxx...
INFO: Client (address x.x.x.x:xxxx) has been set up ...
Client (address x.x.x.x:xxxx) is assigned with #1.
INFO: Model meta-info: <class 'federatedscope.core.lr.LogisticRegression'>.
... ...
{'Role': 'Client #2', 'Round': 0, 'Results_raw': {'train_avg_loss': 5.215108394622803, 'train_loss': 333.7669372558594, 'train_total': 64}}
{'Role': 'Client #1', 'Round': 0, 'Results_raw': {'train_total': 64, 'train_loss': 290.9668884277344, 'train_avg_loss': 4.54635763168335}}
----------- Starting a new training round (Round #1) -------------
... ...
INFO: Server: Training is finished! Starting evaluation.
INFO: Client #1: (Evaluation (test set) at Round #20) test_loss is 30.387419
... ...
INFO: Server: Final evaluation is finished! Starting merging results.
... ...
Als umfassende FL -Plattform bietet FederatedScope die grundlegende Implementierung zur Unterstützung der Anforderungen verschiedener FL -Anwendungen und Frontier -Studien sowohl für die bequeme Verwendung als auch für die flexible Erweiterung, einschließlich:
Weitere Unterstützung kommen bald! Wir haben ein Tutorial vorbereitet, um weitere Details darüber zu erhalten, wie FederatedScope Ihre Reise des Federated Learning genießen kann!
Die Materialien verwandter Themen werden ständig aktualisiert. Siehe FL-Recommendation, Federated-HPO, Personalisiert FL, Federated Graph Learning, FL-NLP, FL-ANTERSCHAFT, FL-P-CENTIVE-Mechanismus, FL-Fairness usw.
Die Klassen und Methoden von FederatedScope wurden gut dokumentiert, damit Benutzer die API -Referenzen generieren können.
cd doc
pip install -r requirements.txt
make htmlNOTIZ:
doc/requirements.txt dient nur zur Dokumentation der API durch Sphinx, die automatisch durch Github -Aktionen generiert werden kann .github/workflows/sphinx.yml . (Auslöser durch Pull -Anfrage, wenn DOC im Titel.)Wir setzen die API -Referenzen auf unsere Website.
Außerdem stellen wir Dokumente für ausführbare Skripte und anpassbare Konfigurationen bereit.
FederatedScope wird unter Apache -Lizenz 2.0 veröffentlicht.
Wenn Sie FederatedScope für Ihre Forschung oder Entwicklung nützlich finden, geben Sie bitte das folgende Papier an:
@article{federatedscope,
title = {FederatedScope: A Flexible Federated Learning Platform for Heterogeneity},
author = {Xie, Yuexiang and Wang, Zhen and Gao, Dawei and Chen, Daoyuan and Yao, Liuyi and Kuang, Weirui and Li, Yaliang and Ding, Bolin and Zhou, Jingren},
journal={Proceedings of the VLDB Endowment},
volume={16},
number={5},
pages={1059--1072},
year={2023}
}
Weitere Veröffentlichungen finden Sie in den Veröffentlichungen.
Wir schätzen jeden Beitrag zum FederatedScope sehr ! Wir bieten eine Entwicklerversion von FederatedScope mit zusätzlichen Pre-Commit-Hooks, um Commit-Checks im Vergleich zur offiziellen Version durchzuführen:
# Install the developer version
pip install -e .[dev]
pre-commit install
# Or switch to the developer version from the official version
pip install pre-commit
pre-commit install
pre-commit run --all-filesWeitere Informationen finden Sie in FederatedScope bei FederatedScope.
Willkommen, um an unserem Slack -Kanal oder an der Dinging -Gruppe teilzunehmen (bitte scannen Sie den folgenden QR -Code) zur Diskussion.