FL-bench
FL-bench 是一个专为联邦学习社区打造的开源基准测试平台,旨在帮助开发者和研究人员轻松评估、对比各类联邦学习算法的性能。在联邦学习中,数据分布不均、设备异构性以及通信效率低下是常见挑战,不同算法在这些场景下的表现往往差异显著,却缺乏统一、透明的评测标准。FL-bench 通过集成多种经典与前沿方法——包括传统的 FedAvg、FedProx、SCAFFOLD,以及个性化联邦学习方案如 pFedSim、FedBN 等——为用户提供了一站式的实验环境,支持快速复现论文结果、验证新想法,并促进社区协作。
该项目特别适合从事联邦学习研究的学者、算法工程师以及希望深入理解该领域的开发者使用。其核心亮点在于模块化设计与高度可扩展性:用户可灵活添加自定义数据集、模型结构或聚合策略,同时项目鼓励社区贡献,欢迎各类改进建议与代码提交。无论是初学者探索联邦学习基础,还是资深研究者推进前沿创新,FL-bench 都提供了一个友好、开放且功能丰富的实践平台,让“在联邦学习中实现精彩创意”变得触手可及。
使用场景
某医疗 AI 研发团队正试图联合多家医院训练一个糖尿病视网膜病变检测模型,需在保护患者隐私的前提下验证不同联邦学习算法在数据异构场景下的有效性。
没有 FL-bench 时
- 团队需手动复现 FedAvg、FedProx、SCAFFOLD 等十几种经典算法,耗费数周编写重复的基础架构代码。
- 缺乏统一的评估标准,不同算法在不同数据分布(Non-IID)下的性能对比困难,实验结果难以信服。
- 调试个性化联邦学习策略(如 pFedSim 或 FedBN)时,因缺少基准参照,难以判断是算法缺陷还是实现错误。
- 新成员上手门槛极高,需花费大量时间阅读原始论文并自行构建实验环境,严重拖慢研发进度。
使用 FL-bench 后
- 直接调用内置的 FedAvg、FedProx、MOON 等成熟算法模块,将算法验证周期从数周缩短至几天。
- 利用预设的基准测试流程,一键生成各算法在标签分布倾斜或特征异构下的准确率与收敛曲线,对比直观清晰。
- 基于现有的 Personalized FL 方法库快速修改参数,迅速定位模型性能瓶颈,高效迭代出适合医疗场景的定制化方案。
- 团队成员通过统一接口协作,无需重复造轮子,可将精力集中于解决医疗数据特有的噪声与隐私挑战。
FL-bench 通过提供标准化的联邦学习基准测试框架,让研发团队从繁琐的代码复现中解放出来,专注于算法创新与业务落地。
运行环境要求
- 未说明
未说明
未说明

快速开始
联邦学习方法基准测试。
实现您的精彩想法。
与联邦学习一起玩得开心。
FL-bench 欢迎一切能让该项目变得更好的 Pull Request。
方法 🧬
- FedAvg -- 来自去中心化数据的高效通信深度学习 (AISTATS'17)
- FedAvgM -- 衡量非独立同分布数据对联邦视觉分类的影响 (ArXiv'19)
- FedProx -- 异构网络中的联邦优化 (MLSys'20)
- SCAFFOLD -- SCAFFOLD:用于联邦学习的随机控制平均法 (ICML'20)
- MOON -- 基于模型对比的联邦学习 (CVPR'21)
- FedDyn -- 基于动态正则化的联邦学习 (ICLR'21)
- FedLC -- 通过 logits 校准处理标签分布偏斜的联邦学习 (ICML'22)
- FedGen -- 无数据知识蒸馏,适用于异构联邦学习 (ICML'21)
- CCVR -- 不怕异构性:针对非独立同分布数据的联邦学习分类器校准 (NeurIPS'21)
- FedOpt -- 自适应联邦优化 (ICLR'21)
- FedADMM -- FedADMM:一种鲁棒的联邦深度学习框架,可适应系统异构性 (ICDE'22)
- 弹性聚合 -- 用于联邦优化的弹性聚合 (CVPR'23)
- FedFed -- FedFed:对抗联邦学习中数据异构性的特征蒸馏 (NeurIPS'23)
- pFedSim (我的工作⭐) -- pFedSim: 面向个性化联邦学习的相似性感知模型聚合 (ArXiv'23)
- 仅本地 -- 仅进行本地训练(不进行通信)。
- FedMD -- FedMD: 基于模型蒸馏的异构联邦学习 (NeurIPS'19)
- APFL -- 自适应个性化联邦学习 (ArXiv'20)
- LG-FedAvg -- 局部思考,全局行动:结合局部与全局表示的联邦学习 (ArXiv'20)
- FedBN -- FedBN: 基于本地批归一化的非独立同分布特征上的联邦学习 (ICLR'21)
- FedPer -- 带有个性化层的联邦学习 (AISTATS'20)
- FedRep -- 利用共享表示实现个性化联邦学习 (ICML'21)
- Per-FedAvg -- 具有理论保证的个性化联邦学习:一种模型无关的元学习方法 (NeurIPS'20)
- pFedMe -- 使用莫雷包络的个性化联邦学习 (NeurIPS'20)
- FedEM -- 混合分布下的联邦多任务学习 (NIPS'21)
- Ditto -- Ditto: 通过个性化实现公平且鲁棒的联邦学习 (ICML'21)
- pFedHN -- 使用超网络的个性化联邦学习 (ICML'21)
- pFedLA -- 面向个性化联邦学习的逐层模型聚合 (CVPR'22)
- CFL -- 聚类联邦学习:在隐私约束下的模型无关分布式多任务优化 (ArXiv'19)
- FedFomo -- 基于一阶模型优化的个性化联邦学习 (ICLR'21)
- FedBabu -- FedBabu: 向增强的联邦图像分类表示迈进 (ICLR'22)
- FedAP -- 用于医疗保健的自适应批归一化个性化联邦学习 (IEEE'22)
- kNN-Per -- 通过本地记忆实现个性化联邦学习 (ICML'22)
- MetaFed -- MetaFed: 联邦间的联邦学习,采用循环知识蒸馏以实现个性化医疗保健 (IJCAI'22)
- FedRoD -- 关于弥合通用与个性化联邦学习在图像分类中的差距 (ICLR'22)
- FedProto -- FedProto: 跨异构客户端的联邦原型学习 (AAAI'22)
- FedPAC -- 通过特征对齐和分类器协作实现个性化联邦学习 (ICLR'23)
- FedALA -- FedALA: 个性化联邦学习中的自适应本地聚合 (AAAI'23)
- PeFLL -- PeFLL: 通过“学会学习”实现个性化联邦学习 (ICLR'24)
- FLUTE -- 欠参数化情形下的联邦表示学习 (ICML'24)
- FedAS -- FedAS: 弥合个性化联邦学习中的不一致性 (CVPR'24)
- pFedFDA -- pFedFDA: 通过特征分布自适应实现个性化联邦学习 (NeurIPS 2024)
- Floco -- 基于连接模式的联邦学习 (NeurIPS'24)
- FedAH -- FedAH: 个性化联邦学习的聚合头部 (ArXiv'24)
- FedSR -- FedSR: 一种简单有效的联邦学习领域泛化方法 (NeurIPS'22)
- ADCOL -- 非独立同分布特征上的对抗协同学习 (ICML'23)
- FedIIR -- 通过隐式不变关系实现联邦学习的分布外泛化 (ICML'23)
- DP-FedAvg -- 学习差分隐私的循环语言模型 (ICLR 2018)
环境准备 🧩
PyPI 🐍
pip install -r .env/requirements.txt
轻松运行 🏃♂️
所有方法类都继承自 FedAvgServer 和 FedAvgClient。如果你想了解整个流程及变量设置的细节,请查看 src/server/fedavg.py 和 src/client/fedavg.py。
第一步:生成联邦学习数据集
按照 Dir(0.1) 分配方式为 100 个客户端划分 MNIST 数据集
python generate_data.py -d mnist -a 0.1 -cn 100
有关联邦数据集生成方法的详细信息,请参阅 data/README.md。
第二步:运行实验
python main.py [--config-path, --config-name] [method=<METHOD_NAME> args...]
method: 算法名称,例如method=fedavg。
[!注意]
method应与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。 - 修改
config/defaults.yaml中的默认值,或在src/server/<method>.py的get_hyperparams()函数中进行修改。
[!NOTE] 对于同一个 FL 方法参数,参数设置的优先级是 命令行 > 配置文件 > 默认值。
例如,
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.01python main.py method=fedprox # fedprox.mu = 1 python main.py --config-name your_config method=fedprox # fedprox.mu = 0.01 python main.py --config-name your_config method=fedprox fedprox.mu=0.001 # fedprox.mu = 0.001
监控 📈
FL-bench 支持 visdom 和 tensorboard。
激活
# your_config.yaml
common:
...
monitor: tensorboard # 选项:[null, visdom, tensorboard]
[!NOTE] 你需要自行启动
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 集群。
[!TIP] 你可以通过以下命令手动创建集群,以避免每次运行实验时都创建和销毁集群:
ray start --head [OPTIONS]
[!NOTE] 为了连接到现有的
Ray集群,你需要在配置文件中保持num_cpus: null和num_gpus: null。# your_config_file.yaml # 连接到本地已有的 Ray 集群。 mode: parallel parallel: ... num_gpus: null num_cpus: null ...
参数 🔧
FL-bench 强烈推荐通过配置文件来定制你的 FL 方法和实验设置。
FL-bench 提供了一个默认配置文件 config/defaults.yaml,其中包含了所有必需的参数及相应的注释。
所有通用参数都有其默认值。请查看 config/defaults.yaml 或 src/utils/constants.py 中的 DEFAULTS 来了解所有参数的默认值。
[!NOTE] 如果你的自定义配置文件中没有包含所有必需的参数,FL-bench 会用从
DEFAULTS加载的默认值来填补缺失的参数。
关于特定 FL 方法参数的默认值,请查看对应的 src/server/<method>.py 文件以获取详细信息。
[!TIP] FL-bench 也支持通过命令行参数进行快速更改。以下是一些示例:
# 使用 config/defaults.yaml,但将方法改为 FedProx,并将其 mu 设置为 0.1。 python main.py method=fedprox fedprox.mu=0.1 # 将学习率改为 0.1。 python main.py optimizer.lr=0.1 # 将批量大小改为 128。 python main.py common.batch_size=128
模型 🤖
该基准测试支持大量常见且集成在 Torchvision 中的模型(所有模型请参见 src/utils/models.py):
- ResNet 系列
- EfficientNet 系列
- DenseNet 系列
- MobileNet 系列
- LeNet5
- ...
[!TIP] 你可以通过填充
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 类)
领域泛化图像数据集
- DomainNet (3 x ? x ?,345 类)
- 请参阅
data/README.md以获取完整的操作指南 🧾。
- 请参阅
医学图像数据集
COVID-19 (3 x 244 x 224,4 类)
Organ-S/A/CMNIST (1 x 28 x 28,11 类)
自定义提示 💡
实现 FL 方法
服务器端类中的 package() 方法用于组装服务器需要发送给客户端的所有参数。同样,客户端端类中的 package() 方法用于封装客户端需要返回给服务器的参数。在重写实现时,务必保留 super().package()。
建议让你的方法类继承自
FedAvgServer和FedAvgClient,以便最大限度地利用 FL-bench 的工作流程。你也可以让方法类继承自高级方法,例如 FedBN、FedProx 等,这样可以继承所有函数、变量和超参数设置。不过,这样做时需要仔细设计你的方法,以避免潜在的超参数和工作流程冲突。
class YourServer(FedBNServer):
...
class YourClient(FedBNClient):
...
若要自定义服务器端流程,可以考虑重写
package()和aggregate_client_updates()方法。若要自定义客户端训练过程,可以考虑重写
fit(),set_parameters()和package()方法。
你可以在 FedAvgClient 和 FedAvgServer 中找到所有细节,它们是 FL-bench 中所有实现的基础。
集成数据集
- 请从
data/utils/datasets.py中的BaseDataset继承您自己的数据集类,并将其添加到字典DATASETS中。强烈建议参考现有的数据集类以获得指导。
自定义模型
- 我在
src/utils/models.py中提供了CustomModel类,您只需定义您的模型架构即可。 - 如果您希望在 FL-bench 的工作流中使用自定义模型,则必须定义
base和classifier。(提示:您可以将其中任何一个定义为torch.nn.Identity()来绕过它。)
引用 🧐
@software{Tan_FL-bench,
author = {Tan, Jiahao and Wang, Xinpeng},
license = {GPL-3.0},
title = {{FL-bench: 用于解决图像分类任务的联邦学习基准}},
url = {https://github.com/KarhouTam/FL-bench}
}
@misc{tan2023pfedsim,
title={pFedSim:面向个性化联邦学习的相似性感知模型聚合},
author={Jiahao Tan 和 Yipeng Zhou 和 Gang Liu 和 Jessie Hui Wang 和 Shui Yu},
year={2023},
eprint={2305.15706},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。