Federatedscope es una plataforma de aprendizaje federada integral que proporciona un uso conveniente y una personalización flexible para varias tareas de aprendizaje federado tanto en la academia como en la industria. Basado en una arquitectura basada en eventos, Federatedscope integra ricas colecciones de funcionalidades para satisfacer las crecientes demandas del aprendizaje federado, y tiene como objetivo construir una plataforma fácil de usar para promover el aprendizaje de manera segura y efectiva.
Se proporciona un tutorial detallado en nuestro sitio web: federatedscope.io
Puede probar Federatedscope a través de Federatedscope Playground o Google Colab.
| Estructura de código | Inicio rápido | Avanzado | Documentación | Publicaciones | Contribuyente |
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
Proporcionamos un ejemplo de extremo a extremo para que los usuarios comiencen a ejecutar un curso FL estándar con FederatedScope.
En primer lugar, los usuarios deben clonar el código fuente e instalar los paquetes requeridos (sugerimos la versión de Python> = 3.9). Puede elegir entre los siguientes dos métodos de instalación (a través de Docker o Conda) para instalar FederatedScope.
git clone https://github.com/alibaba/FederatedScope.git
cd FederatedScopePuede construir una imagen de Docker y ejecutar con Docker Env (Cuda 11 y Torch 1.10):
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
Si necesita ejecutar con tareas de transmisión descendente como Graph FL, cambie el nombre del archivo de requisito/Docker en otro al ejecutar los comandos anteriores:
# 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
Nota: Puede optar por usar CUDA 10 y la antorcha 1.8 al cambiar torch1.10 a torch1.8 . Las imágenes de Docker se basan en el Docker Nvidia. Preinstale los controladores NVIDIA y nvidia-docker2 en la máquina host. Vea más detalles aquí.
Recomendamos usar un nuevo entorno virtual para instalar Federatedscope:
conda create -n fs python=3.9
conda activate fsSi su backend es antorcha, instale antorcha con anticipación (antorcha-encierre). Por ejemplo, si su versión CUDA es 11.3, ejecute el siguiente comando:
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-forgePara usuarios con chips Apple M1:
conda install pytorch torchvision torchaudio -c pytorch
# Downgrade torchvision to avoid segmentation fault
python -m pip install torchvision==0.11.3 Finalmente, después de instalar el backend, puede instalar FederatedScope desde source :
# Editable mode
pip install -e .
# Or (developers for dev mode)
pip install -e .[dev]
pre-commit installAhora, ha instalado con éxito la versión mínima de FederatedScope. ( Optinal ) para la versión de aplicación que incluye gráfico, PNL y discurso, ejecución:
bash environment/extra_dependencies_torch1.10-application.sh Para ejecutar una tarea FL, los usuarios deben preparar un conjunto de datos. El Dataazoo proporcionado en FederatedScope puede ayudar a descargar automáticamente y preprocesar conjuntos de datos públicos ampliamente utilizados para varias aplicaciones FL, incluidos CV, NLP, aprendizaje gráfico, recomendación, etc. Los usuarios pueden especificar directamente cfg.data.type = DATASET_NAME en la configuración. Por ejemplo,
cfg.data.type = ' femnist 'Para usar conjuntos de datos personalizados, debe preparar los conjuntos de datos siguiendo un determinado formato y registrarlo. Consulte los conjuntos de datos personalizados para obtener más detalles.
Luego, los usuarios deben especificar la arquitectura del modelo que se capacitará en el curso FL. FederatedScope proporciona un ModelZoo que contiene la implementación de arquitecturas de modelos ampliamente adoptadas para varias aplicaciones FL. Los usuarios pueden configurar cfg.model.type = MODEL_NAME para aplicar una arquitectura de modelo específica en tareas FL. Por ejemplo,
cfg.model.type = 'convnet2'FederatedScope permite a los usuarios usar modelos personalizados a través del registro. Consulte los modelos personalizados para obtener más detalles sobre cómo personalizar una arquitectura de modelos.
Tenga en cuenta que FederatedScope proporciona una interfaz unificada tanto para el modo independiente como para el modo distribuido, y permite a los usuarios cambiar a través de la configuración.
El modo independiente en FederatedScope significa simular múltiples participantes (servidores y clientes) en un solo dispositivo, mientras que los datos de los participantes se aislan entre sí y sus modelos podrían compartirse a través del paso de mensajes.
Aquí demostramos cómo ejecutar una tarea FL estándar con FederatedScope, con la configuración de cfg.data.type = 'FEMNIST' y cfg.model.type = 'ConvNet2' para ejecutar Vanilla FedAVG para una tarea de clasificación de imágenes. Los usuarios pueden personalizar las configuraciones de capacitación, como cfg.federated.total_round_num , cfg.dataloader.batch_size y cfg.train.optimizer.lr , en la configuración (un archivo .yaml), y ejecuta una tarea FL estándar como:
# 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 128Luego puede observar algunas métricas monitoreadas durante el proceso de capacitación como:
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.
... ...
El modo distribuido en FederatedScope denota la ejecución de múltiples procedimientos para construir un curso FL, donde cada procedimiento se reproduce como participante (servidor o cliente) que instanciona su modelo y carga sus datos. La comunicación entre los participantes ya está proporcionada por el módulo de comunicación de Federatedscope.
Para ejecutarse con el modo distribuido, solo necesita:
cfg.data.file_path = PATH/TO/DATA para cada participante;cfg.federate.model = 'distributed' , y especifique el papel de cada participante por cfg.distributed.role = 'server'/'client' .cfg.distribute.server_host/client_host = xxxx y cfg.distribute.server_port/client_port = xxxx . (Tenga en cuenta que para un servidor, debe configurar server_host y server_port para los mensajes de escucha, mientras que para un cliente, debe configurar client_host y client_port para escuchar, así como server_host y server_port para unirse en un curso de FL)Preparamos un ejemplo sintético para ejecutar con modo distribuido:
# 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 Se puede ejecutar un ejemplo ejecutable con datos de juguete generados (se puede encontrar un script en 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 50054Y puede observar los resultados como (las direcciones IP están anonimizadas con 'xxxx'):
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.
... ...
Como plataforma FL integral, FederatedScope proporciona la implementación fundamental para respaldar los requisitos de varias aplicaciones FL y estudios fronterizos, hacia un uso conveniente y una extensión flexible, que incluyen:
¡Más apoyos llegarán pronto! ¡Hemos preparado un tutorial para proporcionar más detalles sobre cómo utilizar Federatedscope para disfrutar de su viaje de aprendizaje federado!
Los materiales de los temas relacionados se actualizan constantemente, consulte la recomendación de FL, Federado-HPO, FL personalizado, aprendizaje gráfico federado, FL-NLP, FL-atacante, FL-Incentivo-Mecanismo, Fl-Falness, etc.
Las clases y métodos de FederatedScope han sido bien documentados para que los usuarios puedan generar las referencias de API por:
cd doc
pip install -r requirements.txt
make htmlNOTA:
doc/requirements.txt es solo para la documentación de API por Sphinx, que puede generarse automáticamente mediante acciones de GitHub .github/workflows/sphinx.yml . (Disparar por solicitud de solicitud si DOC en el título).Ponemos las referencias de API en nuestro sitio web.
Además, proporcionamos documentos para scripts ejecutables y configuraciones personalizables.
Federatedscope se libera bajo la licencia Apache 2.0.
Si encuentra útil Federatedscope para su investigación o desarrollo, cite el siguiente documento:
@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}
}
Se pueden encontrar más publicaciones en las publicaciones.
¡ Apreciamos mucho cualquier contribución a Federatedscope! Proporcionamos una versión de desarrollador de Federatedscope con ganchos previos al contratación adicionales para realizar verificaciones de confirmación en comparación con la versión oficial:
# 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-filesPuede consultar contribuir a FederatedScope para obtener más detalles.
Bienvenido a unirse a nuestro canal Slack o Dingding Group (escanee el siguiente código QR) para su discusión.