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 メソッドの追加(開発者向けヒント)
- サーバークライアントクラスを作成 し、
FedAvgServer/FedAvgClient(またはそのユーティリティが必要な場合は既存のメソッド)から継承します。 - 必要に応じてフックをオーバーライド します:
package()– サーバーとクライアント間で送信されるパラメータ。aggregate_client_updates()– サーバー上のカスタム集約ロジック。fit()、set_parameters()– クライアント側のトレーニング調整。
- 新しいメソッドを登録 し、
src/server/に.pyファイルを追加します(ファイル名が CLI で使用されるmethod名になります)。 - ハイパーパラメータを公開 するには、
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 で実行をスケールアップしたい人にとって、実用的で文書化されたプラットフォームです。そのモジュール設計により、再現可能な実験を維持しながら、新しいメソッド、モデル、またはデータセットを簡単にプラグインできます。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト