FederatedScope هي منصة تعليمية شاملة تُوفر استخدامًا مناسبًا وتخصيصًا مرنًا لمختلف مهام التعلم الموحدة في كل من الأوساط الأكاديمية والصناعة. استنادًا إلى الهندسة المعمارية التي تعتمد على الحدث ، يدمج FederatedScope مجموعات غنية من الوظائف لتلبية الطلبات المتزايدة من التعلم الفيدرالي ، ويهدف إلى بناء منصة سهلة الاستخدام لتعزيز التعلم بأمان وفعالية.
يتم توفير برنامج تعليمي مفصل على موقعنا على الويب: FederatedScope.io
يمكنك تجربة FederatedScope عبر ملعب FederatedScope أو Google Colab.
| هيكل الكود | بداية سريعة | متقدم | الوثائق | المنشورات | المساهمة |
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 مسبقًا (Torch-Get-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 بنجاح. ( Optinal ) لإصدار التطبيق بما في ذلك الرسم البياني ، NLP والكلام ، تشغيل:
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 قياسية على النحو التالي:
# 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 و Federated-HPO و FL FL و Federated Graph Learning و FL-NLP و FL-HOTACKER و FL-Incentive-Mechanism و FL-Fairness وما إلى ذلك.
تم توثيق فصول وطرق FederatedScope جيدًا حتى يتمكن المستخدمون من إنشاء مراجع API بواسطة:
cd doc
pip install -r requirements.txt
make htmlملحوظة:
doc/requirements.txt هو فقط لتوثيق API بواسطة sphinx ، والتي يمكن إنشاءها تلقائيًا بواسطة إجراءات GitHub .github/workflows/sphinx.yml . (Trigger by request If DOC in the Title.)نضع مراجع API على موقعنا.
علاوة على ذلك ، نقدم مستندات للنصوص القابلة للتنفيذ والتكوينات القابلة للتخصيص.
يتم إصدار FederatedScope بموجب ترخيص Apache 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! نحن نقدم نسخة مطور من 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 (يرجى مسح رمز الاستجابة السريعة التالية) للمناقشة.