FL-bench

FL-bench

开源联邦学习基准测试平台

FL-bench是一个开源的联邦学习基准测试平台,实现了多种经典和前沿算法。平台支持个性化联邦学习和域泛化等研究方向,提供简单接口用于自定义数据集和模型。集成了可视化工具,方便研究人员快速实现和对比不同方法。FL-bench旨在促进联邦学习领域的创新与发展。

联邦学习FL-bench算法实现个性化联邦学习领域泛化Github开源项目
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/9b61550d-4ef8-47f6-b085-a0562e9e6f25.svg" alt="图片"/> </p> <h4 align="center"><i>

对联邦学习方法进行基准测试。

实现你的卓越创意。

享受联邦学习的乐趣。

FL-bench欢迎各种能够改进这个项目的PR。

</i></h4>

<p align="center"> <a href=https://zhuanlan.zhihu.com/p/703576051>FL-bench 的简单介绍</a> </p>

方法 🧬

<summary><b>传统联邦学习方法</b></summary> <summary><b>个性化联邦学习方法</b></summary> <summary><b>联邦学习领域泛化方法</b></summary>

环境准备 🧩

PyPI 🐍

pip install -r .environment/requirements.txt

Poetry 🎶

对于中国大陆用户

poetry install --no-root -C .environment

对于其他用户

cd .environment && sed -i "10,14d" pyproject.toml && poetry lock --no-update && poetry install --no-root

Docker 🐳

对于中国大陆用户

docker pull registry.cn-hangzhou.aliyuncs.com/karhoutam/fl-bench:master

对于其他用户

docker pull ghcr.io/karhoutam/fl-bench:master

构建容器的示例

docker run -it --name fl-bench -v path/to/FL-bench:/root/FL-bench --privileged --gpus all ghcr.io/karhoutam/fl-bench:master

快速运行 🏃‍♂️

所有方法类都继承自FedAvgServerFedAvgClient。如果你想了解整个工作流程和变量设置的详细信息,请查看src/server/fedavg.pysrc/client/fedavg.py

步骤1. 生成联邦学习数据集

根据Dir(0.1)将MNIST数据集划分给100个客户端

python generate_data.py -d mnist -a 0.1 -cn 100

关于生成联邦数据集的方法,请查看data/README.md获取完整详情。

步骤2. 运行实验

python main.py [--config-path, --config-name] [method=<方法名> args...]
  • method: 算法名称,例如method=fedavg。❗ 方法名应与src/server中的.py文件名相同。
  • --config-path: 配置文件所在目录的相对路径。默认为config
  • --config-name: .yaml配置文件的名称(不包含.yaml扩展名)。默认为defaults,指向config/defaults.yaml

例如,使用所有默认设置运行FedAvg:

python main.py method=fedavg

默认值在config/defaults.yamlsrc/utils/constants.py中设置。

如何自定义联邦学习方法参数 🤖

  • 通过修改配置文件
  • 通过在命令行中显式设置,例如python main.py --config-name my_cfg.yaml method=fedprox fedprox.mu=0.01
  • 通过修改src/utils/constants.py/DEFAULT_COMMON_ARGS或方法的get_hyperparams()中的默认值

⚠ 对于相同的联邦学习方法参数,参数设置的优先级为命令行 > 配置文件 > 默认值

例如,fedprox.mu的默认值为1

# src/server/fedprox.py class FedProxServer(FedAvgServer): @staticmethod def get_hyperparams(args_list=None) -> Namespace: parser = ArgumentParser() parser.add_argument("--mu", type=float, default=1.0) return parser.parse_args(args_list)

而你的.yaml配置文件有

# config/your_config.yaml ... fedprox: mu: 0.01
python main.py method=fedprox # fedprox.mu = 1 python main.py --config-name your_config method=fedprox # fedprox.mu = 0.01

监控 📈

FL-bench支持visdomtensorboard

激活

👀 注意: 你需要自行启动visdom / tensorboard服务器。

# your_config.yaml common: ... visible: tensorboard # 选项:[null, visdom, tensorboard]

启动visdom / tensorboard服务器

visdom
  1. 在终端运行python -m visdom.server
  2. 在浏览器中查看localhost:8097

tensorboard

  1. 在终端运行tensorboard --logdir=<your_log_dir>
  2. 在浏览器中查看localhost:6006

通过Ray进行并行训练 🚀

这个功能可以大大提高你的训练效率。同时,这个功能对用户友好且易于使用!!!

激活(你唯一需要做的)

# your_config.yaml mode: parallel parallel: num_workers: 2 # 任何大于1的正整数 ... ...

手动创建Ray集群(可选)

每次以并行模式运行实验时,都会隐式创建一个Ray集群。 或者你可以通过下面显示的命令手动创建它,以避免每次运行实验时创建和销毁集群。

ray start --head [选项]

👀 注意: 要连接到现有的Ray集群,你需要在配置文件中保持num_cpus: nullnum_gpus: null

# your_config_file.yaml # 连接到本地现有的Ray集群。 mode: parallel parallel: ... num_gpus: null num_cpus: null ...

通用参数 🔧

所有通用参数都有默认值。查看src/utils/constants.py中的DEFAULT_COMMON_ARGS以获取通用参数的完整详情。

⚠ 通用参数不能通过命令行设置。

你也可以编写自己的.yaml配置文件。我在config中为你提供了一个模板,并建议你也将配置文件保存在那里。

一个例子:python main.py fedavg config/template.yaml [cli_method_args...]

关于特定联邦学习方法参数的默认值,请查看相应的FL-bench/src/server/<method>.py以获取完整详情。

参数类型描述
--config-pathstr配置文件所在目录。默认为config,表示./config
--config-namestr配置文件的名称(不包含.yaml扩展名)。默认为defaults,指向config/defaults.yaml
datasetstr实验运行的数据集名称。
modelstr实验使用的模型骨架。
seedint运行实验的随机种子。
join_ratiofloat(每轮参与的客户端数)/(总客户端数)的比率。
global_epochint全局轮次,也称为通信轮次。
local_epochint客户端本地训练的轮次。
finetune_epochint客户端在测试前微调模型的轮次。
buffersstr如何处理每个客户端模型的参数缓冲区(在model.buffers()中)。选项:[local, global, drop]。local(默认):客户端的缓冲区是隔离的;global:缓冲区将像其他模型参数一样被聚合;drop:客户端在训练完成后会丢弃它们的缓冲区。
test_intervalint对客户端执行测试的间隔轮次。
eval_testbool在本地训练前后对加入的客户端的测试集进行评估,设为true
eval_valbool在本地训练前后对加入的客户端的验证集进行评估,设为true
eval_trainbool在本地训练前后对加入的客户端的训练集进行评估,设为true
optimizerdict客户端优化器。参数要求与torch.optim中的优化器相同。
lr_schedulerdict客户端学习率调度器。参数要求与torch.optim.lr_scheduler中的调度器相同。
verbose_gapint在终端显示客户端训练性能的间隔轮次。
batch_sizeint客户端本地训练的数据批次大小。
use_cudabooltrue表示张量在GPU上。
visiblebool选项:[null, visdom, tensorboard]
straggler_ratiofloat落后者的比例(设置在[0, 1]范围内)。落后者不会像正常客户端那样执行完整轮次的本地训练。他们的本地轮次将随机从[straggler_min_local_epoch, local_epoch)范围内选择。
straggler_min_local_epochint落后者的最小本地轮次值。
external_model_params_filestr模型参数.pt文件相对于FL-bench根目录的路径。⚠ 此功能仅在unique_model=False时启用,这由每个联邦学习方法预定义。
save_logbool设为true以保存算法运行日志到out/<method>/<start_time>
save_modelbool设为true以保存输出模型参数到out/<method>/<start_time>.pt
save_figbool设为true以将Visdom上显示的准确率曲线保存为.pdf文件,保存在out/<method>/<start_time>
save_metricsbool设为true以将指标统计保存为.csv文件,保存在out/<method>/<start_time>
delete_useless_runbool设为true以在用户按下Ctrl + C后删除输出文件,表示该运行是可删除的。

并行训练参数 👯‍♂️

参数类型描述
num_workersint并行工作进程的数量。需要设置为大于1的整数。
ray_cluster_addrstr选定Ray集群的IP地址。默认为null,这意味着如果没有现有的Ray集群,ray将在每次运行实验时建立一个新集群,并在结束时销毁它。更多详情可以在官方文档中找到。
num_cpusnum_gpusint你为Ray集群分配的计算资源数量。默认全部为null

模型 🤖

这个基准支持许多常见的和集成在Torchvision中的模型(查看这里获取所有模型):

  • ResNet系列
  • EfficientNet系列
  • DenseNet系列
  • MobileNet系列
  • LeNet5
  • ...

🤗 你可以通过填写src/utils/models.py中的CustomModel类来定义自己的自定义模型,并通过在.yaml配置文件中定义model: custom来使用它。

数据集和分区策略 🎨

常规图像数据集

  • MNIST (1 x 28 x 28, 10类)

  • CIFAR-10/100 (3 x 32 x 32, 10/100类)

  • EMNIST (1 x 28 x 28, 62类)

  • FashionMNIST (1 x 28 x 28, 10类)

  • 合成数据集

  • FEMNIST (1 x 28 x 28, 62类)

  • CelebA (3 x 218 x 178, 2类)

  • SVHN (3 x 32 x 32, 10类)

  • USPS(1 x 16 x 16,10类)

  • Tiny-ImageNet-200(3 x 64 x 64,200类)

  • CINIC-10(3 x 32 x 32,10类)

领域泛化图像数据集

医学图像数据集

自定义技巧 💡

实现联邦学习方法

服务器端类中的package()用于组装服务器需要发送给客户端的所有参数。类似地,客户端类中的package()用于客户端需要发送回服务器的参数。在你的重写实现中,应始终包含super().package()

  • 考虑从FedAvgServerFedAvgClient继承你的方法类,以最大程度地利用FL-bench的工作流程。

  • 你也可以从高级方法继承你的方法类,例如FedBN、FedProx等。这将继承所有函数、变量和超参数设置。如果这样做,你需要谨慎设计你的方法,以避免潜在的超参数和工作流程冲突。

class YourServer(FedBNServer): ... class YourClient(FedBNClient): ...
  • 要自定义服务器端处理,考虑重写package()aggregate()

  • 要自定义客户端训练,考虑重写fit()set_parameters()package()

你可以在FedAvgClientFedAvgServer中找到所有细节,它们是FL-bench中所有实现的基础。

集成数据集

  • data/utils/datasets.py中的BaseDataset继承你自己的数据集类,并将你的类添加到字典DATASETS中。

自定义模型

  • 我提供了src/utils/models.py中的CustomModel类,你只需定义你的模型架构即可。
  • 如果你想在FL-bench的工作流程中使用你的自定义模型,必须定义baseclassifier。(提示:你可以将其中一个定义为torch.nn.Identity()以绕过它。)

引用 🧐

@software{Tan_FL-bench, author = {Tan, Jiahao and Wang, Xinpeng}, license = {MIT}, title = {{FL-bench: A federated learning benchmark for solving image classification tasks}}, url = {https://github.com/KarhouTam/FL-bench} } @misc{tan2023pfedsim, title={pFedSim: Similarity-Aware Model Aggregation Towards Personalized Federated Learning}, author={Jiahao Tan and Yipeng Zhou and Gang Liu and Jessie Hui Wang and Shui Yu}, year={2023}, eprint={2305.15706}, archivePrefix={arXiv}, primaryClass={cs.LG} }

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多