对联邦学习方法进行基准测试。
实现你的卓越创意。
享受联邦学习的乐趣。
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
服务器visdom
python -m visdom.server
。localhost:8097
。tensorboard
tensorboard --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} }
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助 、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集 成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文 文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号