KarhouTam/FL-bench

Benchmark of federated learning. Dedicated to the community. 🤗

FL‑bench とは?

FL‑bench は、フェデレーテッドラーニング(FL) 研究のためのオープンソースのベンチマークスイートです。画像分類データセット上で、数十の古典的および最新の FL アルゴリズムをトレーニングおよび評価できる、すぐに実行可能なフレームワークを提供します。コードは共通のサーバークライアント抽象化を中心に構成されており、各メソッドはトレーニングパイプラインの大部分を再利用しながら、いくつかのフックを実装するだけで済みます。


重要な理由

  • 高速な実験 – 単一のコマンドラインフラグでアルゴリズム(FedAvg、FedProx、SCAFFOLD、pFedSim など)を切り替えられます。
  • 再現可能な設定 – すべてのハイパーパラメータは YAML 設定ファイルに格納されています。デフォルトは文書化されており、CLI で上書きできます。
  • スケーラブルな実行 – 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 にメトリクスを記録します。


カスタマイズ方法

項目 方法
アルゴリズム CLI で method= を変更するか、YAML ファイルを編集します(例:method=fedprox fedprox.mu=0.01)。
ハイパーパラメータ CLI(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 ファイルを追加します(ファイル名が CLI で使用される method 名になります)。
  4. ハイパーパラメータを公開 するには、argparse.Namespace を返す静的 get_hyperparams() を使用します。これらは設定ファイルで設定できます。

ライセンスと引用

プロジェクトは 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 で実行をスケールアップしたい人にとって、実用的で文書化されたプラットフォームです。そのモジュール設計により、再現可能な実験を維持しながら、新しいメソッド、モデル、またはデータセットを簡単にプラグインできます。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト