FederatedScope adalah platform pembelajaran federasi yang komprehensif yang menyediakan penggunaan yang nyaman dan kustomisasi fleksibel untuk berbagai tugas pembelajaran federasi di akademisi dan industri. Berdasarkan arsitektur yang digerakkan oleh acara, FederatedScope mengintegrasikan koleksi fungsionalitas yang kaya untuk memenuhi tuntutan yang berkembang dari pembelajaran federasi, dan bertujuan untuk membangun platform yang mudah digunakan untuk mempromosikan pembelajaran dengan aman dan efektif.
Tutorial terperinci disediakan di situs web kami: federatedscope.io
Anda dapat mencoba FederatedScope melalui FederatedScope Playground atau Google Colab.
| Struktur Kode | Mulai Cepat | Advanced | Dokumentasi | Publikasi | Berkontribusi |
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
Kami memberikan contoh ujung ke ujung bagi pengguna untuk mulai menjalankan kursus FL standar dengan FederatedScope.
Pertama -tama, pengguna perlu mengkloning kode sumber dan menginstal paket yang diperlukan (kami sarankan versi python> = 3.9). Anda dapat memilih antara dua metode instalasi berikut (melalui Docker atau Conda) untuk menginstal FederatedScope.
git clone https://github.com/alibaba/FederatedScope.git
cd FederatedScopeAnda dapat membangun gambar Docker dan menjalankan dengan Docker Env (Cuda 11 dan 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
Jika Anda perlu menjalankan dengan tugas down-stream seperti grafik FL, ubah nama file persyaratan/docker menjadi yang lain saat menjalankan perintah di atas:
# 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
Catatan: Anda dapat memilih untuk menggunakan CUDA 10 dan Torch 1.8 melalui Mengubah torch1.10 ke torch1.8 . Gambar Docker didasarkan pada nvidia-docker. Harap pra-instal driver NVIDIA dan nvidia-docker2 di mesin host. Lihat detail lebih lanjut di sini.
Kami merekomendasikan menggunakan lingkungan virtual baru untuk menginstal FederatedScope:
conda create -n fs python=3.9
conda activate fsJika backend Anda adalah Torch, silakan instal Torch terlebih dahulu (obor-get-started). Misalnya, jika versi CUDA Anda adalah 11.3 Harap jalankan perintah berikut:
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-forgeUntuk pengguna dengan chip Apple M1:
conda install pytorch torchvision torchaudio -c pytorch
# Downgrade torchvision to avoid segmentation fault
python -m pip install torchvision==0.11.3 Akhirnya, setelah backend diinstal, Anda dapat menginstal FederatedScope dari source :
# Editable mode
pip install -e .
# Or (developers for dev mode)
pip install -e .[dev]
pre-commit installSekarang, Anda telah berhasil menginstal versi minimal FederatedScope. ( Optinal ) untuk versi aplikasi termasuk grafik, NLP dan ucapan, jalankan:
bash environment/extra_dependencies_torch1.10-application.sh Untuk menjalankan tugas FL, pengguna harus menyiapkan dataset. Datazoo yang disediakan di FederatedScope dapat membantu mengunduh secara otomatis dan preprocess kumpulan data publik yang banyak digunakan untuk berbagai aplikasi FL, termasuk CV, NLP, pembelajaran grafik, rekomendasi, dll. Pengguna dapat secara langsung menentukan cfg.data.type = DATASET_NAME dalam konfigurasi. Misalnya,
cfg.data.type = ' femnist 'Untuk menggunakan kumpulan data yang disesuaikan, Anda perlu menyiapkan kumpulan data mengikuti format tertentu dan mendaftarkannya. Silakan merujuk ke set data yang disesuaikan untuk detail lebih lanjut.
Kemudian, pengguna harus menentukan arsitektur model yang akan dilatih dalam kursus FL. FederatedScope menyediakan modelzoo yang berisi implementasi arsitektur model yang diadopsi secara luas untuk berbagai aplikasi FL. Pengguna dapat mengatur cfg.model.type = MODEL_NAME untuk menerapkan arsitektur model tertentu dalam tugas -tugas FL. Misalnya,
cfg.model.type = 'convnet2'FederatedScope memungkinkan pengguna untuk menggunakan model khusus melalui pendaftaran. Silakan merujuk ke model yang disesuaikan untuk detail lebih lanjut tentang cara menyesuaikan arsitektur model.
Perhatikan bahwa FederatedScope menyediakan antarmuka terpadu untuk mode mandiri dan mode terdistribusi, dan memungkinkan pengguna untuk berubah melalui konfigurasi.
Mode mandiri dalam FederatedScope berarti mensimulasikan banyak peserta (server dan klien) dalam satu perangkat, sementara data peserta diisolasi satu sama lain dan model mereka mungkin dibagikan melalui lewat pesan.
Di sini kami menunjukkan cara menjalankan tugas FL standar dengan FederatedScope, dengan pengaturan cfg.data.type = 'FEMNIST' dan cfg.model.type = 'ConvNet2' untuk menjalankan vanilla fedavg untuk tugas klasifikasi gambar. Pengguna dapat menyesuaikan konfigurasi pelatihan, seperti cfg.federated.total_round_num , cfg.dataloader.batch_size , dan cfg.train.optimizer.lr , dalam konfigurasi (file .yaml), dan menjalankan tugas FL standar sebagai:
# 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 128Kemudian Anda dapat mengamati beberapa metrik yang dipantau selama proses pelatihan sebagai:
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.
... ...
Mode terdistribusi dalam FederatedScope menunjukkan menjalankan beberapa prosedur untuk membangun kursus FL, di mana setiap prosedur dimainkan sebagai peserta (server atau klien) yang memancing modelnya dan memuat datanya. Komunikasi antara peserta sudah disediakan oleh modul komunikasi FederatedScope.
Untuk menjalankan dengan mode terdistribusi, Anda hanya perlu:
cfg.data.file_path = PATH/TO/DATA untuk setiap peserta;cfg.federate.model = 'distributed' , dan tentukan peran masing -masing peserta oleh cfg.distributed.role = 'server'/'client' .cfg.distribute.server_host/client_host = xxxx dan cfg.distribute.server_port/client_port = xxxx . server_host server_port client_host client_port server_host server_portKami menyiapkan contoh sintetis untuk berjalan dengan mode terdistribusi:
# 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 Contoh yang dapat dieksekusi dengan data mainan yang dihasilkan dapat dijalankan dengan (skrip dapat ditemukan di 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 50054Dan Anda dapat mengamati hasilnya sebagai (alamat IP dianonimkan dengan '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.
... ...
Sebagai platform FL yang komprehensif, FederatedScope menyediakan implementasi mendasar untuk mendukung persyaratan berbagai aplikasi FL dan studi perbatasan, menuju penggunaan yang nyaman dan ekstensi fleksibel, termasuk:
Lebih banyak dukungan akan segera hadir! Kami telah menyiapkan tutorial untuk memberikan rincian lebih lanjut tentang cara memanfaatkan FederatedScope untuk menikmati perjalanan Anda belajar federasi!
Bahan topik terkait terus-menerus diperbarui, silakan merujuk pada FL-Commentation, Federated-HPO, FL yang dipersonalisasi, pembelajaran grafik federasi, FL-NLP, FL-Attacker, FL-Insentive-Mechanism, FL-Fairness dan sebagainya.
Kelas dan metode FederatedScope telah didokumentasikan dengan baik sehingga pengguna dapat menghasilkan referensi API dengan:
cd doc
pip install -r requirements.txt
make htmlCATATAN:
doc/requirements.txt hanya untuk dokumentasi API oleh SPHINX, yang dapat secara otomatis dihasilkan oleh tindakan github .github/workflows/sphinx.yml . (Pemicu dengan permintaan tarik jika DOC di judul.)Kami menempatkan referensi API di situs web kami.
Selain itu, kami menyediakan dokumen untuk skrip yang dapat dieksekusi dan konfigurasi yang dapat disesuaikan.
FederatedScope dirilis di bawah Lisensi Apache 2.0.
Jika Anda menemukan FederatedScope berguna untuk penelitian atau pengembangan Anda, silakan kutip makalah berikut:
@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}
}
Lebih banyak publikasi dapat ditemukan dalam publikasi.
Kami sangat menghargai kontribusi apa pun kepada FederatedScope! Kami menyediakan versi pengembang FederatedScope dengan kait pra-komit tambahan untuk melakukan pemeriksaan komit dibandingkan dengan versi resmi:
# 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-filesAnda dapat merujuk berkontribusi pada FederatedScope untuk lebih jelasnya.
Selamat datang untuk bergabung di saluran Slack kami, atau grup Dingding (silakan pindai kode QR berikut) untuk diskusi.