FederatedScope - это комплексная федеративная платформа обучения, которая обеспечивает удобное использование и гибкую настройку для различных федеративных учебных задач как в научных кругах, так и в отрасли. Основываясь на архитектуре, основанной на событиях, FederatedScope объединяет богатые коллекции функциональных возможностей для удовлетворения растущих требований от федеративного обучения и стремится создать простую в использовании платформу для безопасного и эффективного продвижения обучения.
Подробное руководство предоставляется на нашем веб -сайте: FederatedScope.io
Вы можете попробовать FederatedScope через детскую площадку FederatedScope или Google Colab.
| Структура кода | Быстрый старт | Advanced | Документация | Публикации | Вклад |
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
Мы приводим сквозной пример для пользователей, чтобы начать выполнять стандартный курс FL с FederatedScope.
Прежде всего, пользователи должны клонировать исходный код и установить необходимые пакеты (мы предлагаем версию Python> = 3.9). Вы можете выбрать между следующими двумя методами установки (через Docker или Conda) для установки FederatedScope.
git clone https://github.com/alibaba/FederatedScope.git
cd FederatedScopeВы можете создать изображение Docker и запустить с Docker Env (Cuda 11 и 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
Если вам нужно запустить с помощью задач вниз по потоку, таких как график FL, измените имя файла требований/Docker на другое при выполнении вышеуказанных команд:
# 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
Примечание. Вы можете использовать CUDA 10 и TORCH 1.8 через изменение torch1.10 на torch1.8 . Изображения Docker основаны на Nvidia-Docker. Пожалуйста, предварительно установите драйверы Nvidia и nvidia-docker2 в хост-машине. Смотрите более подробную информацию здесь.
Мы рекомендуем использовать новую виртуальную среду для установки FederatedScope:
conda create -n fs python=3.9
conda activate fsЕсли ваш бэкэнд-факел, пожалуйста, установите Torch заранее (Forch-get-Started). Например, если ваша версия CUDA составляет 11,3, пожалуйста, выполните следующую команду:
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-forgeДля пользователей с чипсами Apple M1:
conda install pytorch torchvision torchaudio -c pytorch
# Downgrade torchvision to avoid segmentation fault
python -m pip install torchvision==0.11.3 Наконец, после установки бэкэнда вы можете установить FederatedScope из source :
# Editable mode
pip install -e .
# Or (developers for dev mode)
pip install -e .[dev]
pre-commit installТеперь вы успешно установили минимальную версию FederatedScope. ( Оптинана ) Для версии приложения, включая график, НЛП и речь, запустите:
bash environment/extra_dependencies_torch1.10-application.sh Чтобы запустить задачу FL, пользователи должны подготовить набор данных. DataZoo, предоставленная в FederatedScope, может помочь автоматически загружать и предварительно использовать широко используемые общедоступные наборы данных для различных приложений FL, включая CV, NLP, графическое обучение, рекомендации и т. Д. Пользователи могут напрямую указать cfg.data.type = DATASET_NAME в конфигурации. Например,
cfg.data.type = ' femnist 'Чтобы использовать настройки данных, вам необходимо подготовить наборы данных после определенного формата и зарегистрировать его. Пожалуйста, обратитесь к настраиваемым наборам данных для получения более подробной информации.
Затем пользователи должны указать архитектуру модели, которая будет обучена в курсе FL. FederatedScope предоставляет модельзоо, который содержит реализацию широко принятых модельных архитектур для различных приложений FL. Пользователи могут настроить cfg.model.type = MODEL_NAME для применения конкретной архитектуры модели в FL -задачах. Например,
cfg.model.type = 'convnet2'FederatedScope позволяет пользователям использовать индивидуальные модели посредством регистрации. Пожалуйста, обратитесь к индивидуальным моделям для получения более подробной информации о том, как настроить модельную архитектуру.
Обратите внимание, что FederatedScope предоставляет унифицированный интерфейс как для автономного режима, так и для распределенного режима и позволяет пользователям изменять настройку.
Автономный режим в FederatedScope означает моделирование нескольких участников (серверов и клиентов) в одном устройстве, в то время как данные участников изолированы друг от друга, и их модели могут быть переданы посредством передачи сообщений.
Здесь мы демонстрируем, как запустить стандартную задачу FL с FederatedScope, с установкой cfg.data.type = 'FEMNIST' и cfg.model.type = 'ConvNet2' для запуска Vanilla Fedavg для задачи классификации изображений. Пользователи могут настроить обучающие конфигурации, такие как cfg.federated.total_round_num , cfg.dataloader.batch_size и cfg.train.optimizer.lr , в конфигурации (файл .yaml) и запустить стандартное задание FL AS:
# 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 128Затем вы можете наблюдать некоторые контролируемые метрики во время учебного процесса как:
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.
... ...
Распределенный режим в FederatedScope обозначает запуск нескольких процедур для создания курса FL, где каждая процедура играет в качестве участника (сервер или клиента), который создает его модель и загружает свои данные. Связь между участниками уже обеспечивается модулем связи FederatedScope.
Чтобы запустить в распределенном режиме, вам нужно только:
cfg.data.file_path = PATH/TO/DATA для каждого участника;cfg.federate.model = 'distributed' и укажите роль каждого участника с помощью cfg.distributed.role = 'server'/'client' .cfg.distribute.server_host/client_host = xxxx и cfg.distribute.server_port/client_port = xxxx . (Обратите внимание, что для сервера вам необходимо настроить server_host и server_port для прослушивания сообщений, в то время как для клиента вам необходимо настроить client_host и client_port для прослушивания, а также server_host и server_port для присоединения в курсе FL)Мы готовим синтетический пример для работы с распределенным режимом:
# 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 Выполняемый пример с сгенерированными данными игрушек может быть запущен (сценарий можно найти в 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 50054И вы можете наблюдать за результатами как (IP -адреса анонимизированы с '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.
... ...
В качестве комплексной платформы FL, FederatedScope обеспечивает фундаментальную реализацию для поддержки требований различных приложений FL и пограничных исследований, как к удобному использованию, так и в гибком расширении, включая:
Скоро появятся дополнительные поддержки! Мы подготовили учебное пособие, чтобы предоставить более подробную информацию о том, как использовать FederatedScope, чтобы насладиться вашим путешествием федеративного обучения!
Материалы соответствующих тем постоянно обновляются, пожалуйста, обратитесь к FL-резолированию, федеральному-HPO, персонализированному FL, Federated Graph Learning, FL-NLP, FL-атакующим, FL-инцидентущему механизму, FL-FARNESS и так далее.
Классы и методы FederatedScope были хорошо задокументированы, чтобы пользователи могли генерировать ссылки API с помощью:
cd doc
pip install -r requirements.txt
make htmlПРИМЕЧАНИЕ:
doc/requirements.txt предназначен только для документации API с помощью SPHINX, который может автоматически генерироваться GitHub Actions .github/workflows/sphinx.yml . (Триггер по запросу, если DOC в заголовке.)Мы размещаем ссылки API на нашем сайте.
Кроме того, мы предоставляем документы для исполняемых сценариев и настраиваемых конфигураций.
FederatedScope выпускается по Apache License 2.0.
Если вы считаете FederatedScope полезным для исследования или разработки, пожалуйста, укажите следующую статью:
@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}
}
Больше публикаций можно найти в публикациях.
Мы очень ценим любой вклад в FederatedScope! Мы предоставляем версию Developer FederatedScope с дополнительными предварительными крючками для выполнения проверки коммита по сравнению с официальной версией:
# 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-filesВы можете обратиться к участию в FederatedScope для получения более подробной информации.
Добро пожаловать, чтобы присоединиться к нашему каналу Slack или Dingding Group (пожалуйста, сканируйте следующий QR -код) для обсуждения.