对联邦学习方法进行基准测试。
实现你的卓越创意。
享受联邦学习的乐趣。
FL-bench欢迎各种能够改进这个项目的PR。
</i></h4>
<p align="center"> <a href=https://zhuanlan.zhihu.com/p/703576051>FL-bench 的简单介绍</a> </p>pip install -r .environment/requirements.txt
对于中国大陆用户
poetry install --no-root -C .environment
对于其他用户
cd .environment && sed -i "10,14d" pyproject.toml && poetry lock --no-update && poetry install --no-root
对于中国大陆用户
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
所有方法类都继承自FedAvgServer和FedAvgClient。如果你想了解整个工作流程和变量设置的详细信息,请查看src/server/fedavg.py和src/client/fedavg.py。
根据Dir(0.1)将MNIST数据集划分给100个客户端
python generate_data.py -d mnist -a 0.1 -cn 100
关于生成联邦数据集的方法,请查看data/README.md获取完整详情。
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.yaml和src/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支持visdom和tensorboard。
👀 注意: 你需要自行启动visdom / tensorboard服务器。
# your_config.yaml common: ... visible: tensorboard # 选项:[null, visdom, tensorboard]
visdom / tensorboard服务器visdompython -m visdom.server。localhost:8097。tensorboardtensorboard --logdir=<your_log_dir>。localhost:6006。Ray进行并行训练 🚀这个功能可以大大提高你的训练效率。同时,这个功能对用户友好且易于使用!!!
# your_config.yaml mode: parallel parallel: num_workers: 2 # 任何大于1的正整数 ... ...
Ray集群(可选)每次以并行模式运行实验时,都会隐式创建一个Ray集群。
或者你可以通过下 面显示的命令手动创建它,以避免每次运行实验时创建和销毁集群。
ray start --head [选项]
👀 注意: 要连接到现有的Ray集群,你需要在配置文件中保持num_cpus: null和num_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-path | str | 配置文件所在目录。默认为config,表示./config。 |
--config-name | str | 配置文件的名称(不包含.yaml扩展名)。默认为defaults,指向config/defaults.yaml。 |
dataset | str | 实验运行的数据集名称。 |
model | str | 实验使用的模型骨架。 |
seed | int | 运行实验的随机种子。 |
join_ratio | float | (每轮参与的客户端数)/(总客户端数)的比率。 |
global_epoch | int | 全局轮次,也称为通信轮次。 |
local_epoch | int | 客户端本地训练的轮次。 |
finetune_epoch | int | 客户端在测试前微调模型的轮次。 |
buffers | str | 如何处理每个客户端模型的参数缓冲区(在model.buffers()中)。选项:[local, global, drop]。local(默认):客户端的缓冲区是隔离的;global:缓冲区将像其他模型参数一样被聚合;drop:客户端在训练完成后会丢弃它们的缓冲区。 |
test_interval | int | 对客户端执行测试的间隔轮次。 |
eval_test | bool | 在本地训练前后对加入的客户端的测试集进行评估,设为true。 |
eval_val | bool | 在本地训练前后对加入的客户端的验证集进行评估,设为true。 |
eval_train | bool | 在本地训练前后对加入的客户端的训练集进行评估,设为true。 |
optimizer | dict | 客户端优化器。参数要求与torch.optim中的优化器相同。 |
lr_scheduler | dict | 客户端学习率调度器。参数要求与torch.optim.lr_scheduler中的调度器相同。 |
verbose_gap | int | 在终端显示客户端训练性能的间隔轮次。 |
batch_size | int | 客户端本地训练的数据批次大小。 |
use_cuda | bool | true表示张量在GPU上。 |
visible | bool | 选项:[null, visdom, tensorboard] |
straggler_ratio | float | 落后者的比例(设置在[0, 1]范围内)。落后者不会像正常客户端那样执行完整轮次的本地训练。他们的本地轮次将随机从[straggler_min_local_epoch, local_epoch)范围内选择。 |
straggler_min_local_epoch | int | 落后者的最小本地轮次值。 |
external_model_params_file | str | 模型参数.pt文件相对于FL-bench根目录的 路径。⚠ 此功能仅在unique_model=False时启用,这由每个联邦学习方法预定义。 |
save_log | bool | 设为true以保存算法运行日志到out/<method>/<start_time>。 |
save_model | bool | 设为true以保存输出模型参数到out/<method>/<start_time>.pt。 |
save_fig | bool | 设为true以将Visdom上显示的准确率曲线保存为.pdf文件,保存在out/<method>/<start_time>。 |
save_metrics | bool | 设为true以将指标统计保存为.csv文件,保存在out/<method>/<start_time>。 |
delete_useless_run | bool | 设为true以在用户按下Ctrl + C后删除输出文件,表示该运行是可删除的。 |
| 参数 | 类型 | 描述 |
|---|---|---|
num_workers | int | 并行工作进程的数量。需要设置为大于1的整数。 |
ray_cluster_addr | str | 选定Ray集群的IP地址。默认为null,这意味着如果没有现有的Ray集群,ray将在每次运行实验时建立一个新集群,并在结束时销毁它。更多详情可以在官方文档中找到。 |
num_cpus和num_gpus | int | 你为Ray集群分配的计算资源数量。默认全部为null。 |
这个基准支持许多常见的和集成在Torchvision中的模型(查看这里获取所有模型):
🤗 你可以通过填写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类)
领域泛化图像数据集
data/README.md获取完整的处理指南 🧾。医学图像数据集
COVID-19(3 x 244 x 224,4类)
Organ-S/A/CMNIST(1 x 28 x 28,11类)
服务器端类中的package()用于组装服务器需要发送给客户端的所有参数。类似地,客户端类中的package()用于客户端需要发送回服务器的参数。在你的重写实现中,应始终包含super().package()。
考虑从FedAvgServer和FedAvgClient继承你的方法类,以最大程度地利用FL-bench的工作流程。
你也可以从高级方法继承你的方法类,例如FedBN、FedProx等。这将继承所有函数、变量和超参数设置。如果这样做,你需要谨慎设计你的方法,以避免潜在的超参数和工作流程冲突。
class YourServer(FedBNServer): ... class YourClient(FedBNClient): ...
要自定义服务器端处理,考虑重写package()和aggregate()。
要自定义客户端训练,考虑重写fit()、set_parameters()和package()。
你可以在FedAvgClient和FedAvgServer中找到所有细节,它们是FL-bench中所有实现的基础。
data/utils/datasets.py中的BaseDataset继承你自己的数据集类,并将你的类添加到字典DATASETS中。src/utils/models.py中的CustomModel类,你只需定义你的模型架构即可。base和classifier。(提示:你可以将其中一个定义为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} }


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏 、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新 版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


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


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


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号