KarhouTam/FL-bench

Benchmark of federated learning. Dedicated to the community. 🤗

什么是 FL‑bench?

FL‑bench 是一个用于**联邦学习(FL)**研究的开源基准测试套件。它提供了一个开箱即用的框架,让您可以在各种图像分类数据集上训练和评估数十种经典及最新的 FL 算法。代码围绕一个通用的服务器-客户端抽象进行组织,因此每种方法只需实现几个挂钩(hook),而可以复用大部分训练流程。


为何重要

  • 快速实验 – 通过一个命令行标志即可在算法之间切换(如 FedAvg、FedProx、SCAFFOLD、pFedSim 等)。
  • 可复现的设置 – 所有超参数都保存在 YAML 配置文件中;默认值有文档说明,并可通过命令行覆盖。
  • 可扩展执行 – 内置对 Ray 并行训练的支持,无需额外代码即可进行多进程或多节点运行。
  • 丰富的生态系统 – 包含许多标准视觉模型(ResNet、EfficientNet、MobileNet、LeNet5 等)以及各种数据集(MNIST、CIFAR‑10/100、FEMNIST、DomainNet、医学图像集等),并支持可配置的划分策略。
  • 可扩展 – 可以通过继承提供的 FedAvgServer/FedAvgClient 基类或扩展数据集/模型注册表来添加新的 FL 方法、模型或数据集。

快速开始(一行命令)

# 安装依赖
pip install -r .env/requirements.txt

# 为 100 个客户端生成合成 MNIST 划分
data/generate_data.py -d mnist -a 0.1 -cn 100

# 运行默认的 FedAvg 实验
python main.py method=fedavg

该命令从 config/defaults.yaml 读取默认配置,启动一个协调 100 个客户端的服务器,在划分的 MNIST 数据上训练 ResNet(或您选择的任何模型),并将指标记录到 TensorBoard 或 Visdom。


如何自定义

项目 方法
算法 在命令行中更改 method= 或编辑 YAML 文件(例如,method=fedprox fedprox.mu=0.01)。
超参数 通过命令行(optimizer.lr=0.1)、自定义配置文件或编辑方法的 get_hyperparams() 函数来覆盖任何参数。
模型 选择内置模型(model: resnet18)或在 src/utils/models.py 中创建 CustomModel 类,并用 model: custom 引用。
数据集/划分 从列表(MNIST、CIFAR‑10、DomainNet 等)中选择数据集和 data/README.md 中定义的划分策略。
并行性 在配置中设置 mode: parallel 和 parallel.num_workers;Ray 会自动启动工作进程。
监控 将 common.monitor 设置为 tensorboard 或 visdom,然后启动相应的服务器(tensorboard --logdir=… 或 python -m visdom.server)。

添加新的 FL 方法(开发者提示)

  1. 创建服务器和客户端类,继承自 FedAvgServer / FedAvgClient(或另一个现有方法,如果您需要其工具)。
  2. 根据需要覆盖以下任何挂钩:
    • package() – 服务器和客户端之间发送的参数。
    • aggregate_client_updates() – 服务器上的自定义聚合逻辑。
    • fit()、set_parameters() – 客户端训练调整。
  3. 注册新方法,在 src/server/ 下添加一个 .py 文件(文件名将成为命令行中使用的 method 名称)。
  4. 通过静态 get_hyperparams() 暴露超参数,它返回一个 argparse.Namespace – 这些可以在配置文件中设置。

许可证与引用

该项目以 GPL‑3.0 许可发布。如果您在论文中使用 FL‑bench,请引用提供的 BibTeX 条目:

@software{Tan_FL-bench,
  author = {Tan, Jiahao and Wang, Xinpeng},
  license = {GPL-3.0},
  title = {{FL-bench: A federated learning benchmark for solving image classification tasks}},
  url = {https://github.com/KarhouTam/FL-bench}
}

总结

FL‑bench 是一个实用、文档完善的平台,适合任何希望在真实图像数据上比较联邦学习算法、尝试个性化或域泛化扩展,以及使用 Ray 扩展运行规模的人。其模块化设计使得在保持实验可复现的同时,轻松集成新的方法、模型或数据集。

相关

  • 项目
  • 项目
  • 项目
  • 项目