6.9 KiB
FedHPO-Bench
A benchmark suite for studying federated hyperparameter optimization. FedHPO-Bench incorporates comprehensive FL tasks, enables efficient function evaluations, and eases continuing extensions. We also conduct extensive experiments based on FedHPO-B to benchmark a few HPO methods.
Quick Start
We highly recommend running FedHPO-Bench with conda.
Step 0. Dependency
-
FedHPO-Bench is built on a stable FederatedScope, please see Installation for install FederatedScope.
git clone https://github.com/alibaba/FederatedScope.git cd FederatedScope git checkout a653102c6b8d5421d2874077594df0b2e29401a1 pip install -e . -
(Optianal) In order to reproduce the results in our paper, please consider installing the following packages via:
# hpbandster, smac3, optuna via conda conda install hpbandster smac3 optuna -c conda-forge # dehb via git conda install dask distributed -c conda-forge git clone https://github.com/automl/DEHB.git cd DEHB git checkout b8dcba7b38bf6e7fc8ce3e84ea567b66132e0eb5 export PYTHONPATH=~/DEHB:$PYTHONPATH
Step 1. Installation
We recommend installing FedHPOBench directly using git by:
git clone https://github.com/alibaba/FederatedScope.git
cd FederatedScope/benchmark/FedHPOBench
export PYTHONPATH=~/FedHPOBench:$PYTHONPATH
Step 2. Prepare data files
Note: If you only want to use FedHPO-Bench with raw mode, you can skip to Step3.
All data files are available on AliyunOSS, you need to download the data files and place them in the ~/data/tabular_data/ or ~/data/surrogate_model/ before using FedHPO-Bench.
The naming pattern of the url of data files obeys the rule:
https://federatedscope.oss-cn-beijing.aliyuncs.com/fedhpob_{BENCHMARK}_{MODE}.zip
where {BENCHMARK} should be one of cnn, bert, gcn, lr, mlp or cross_device, and {MODE} should be one of tabular or surrogate.
Then unzip the data file, move data under tabular mode to ~/data/tabular_data/ and data under surrogate mode to ~/data/surrogate_model.
Fortunately, we provide tools to automatically convert from tabular data to surrogate pickled model, so it is feasible to download only tabular data (it will take a few minutes to train the surrogate model).
Step3. Start running
from fedhpobench.config import fhb_cfg
from fedhpobench.benchmarks import TabularBenchmark
benchmark = TabularBenchmark('cnn', 'femnist', 'avg')
# get hyperparameters space
config_space = benchmark.get_configuration_space(CS=True)
# get fidelity space
fidelity_space = benchmark.get_fidelity_space(CS=True)
# get results
res = benchmark(config_space.sample_configuration(),
fidelity_space.sample_configuration(),
fhb_cfg=fhb_cfg,
seed=12345)
print(res)
Reproduce the results in our paper
We take Figure 11 as an example.
-
First get best seen value of each optimizer, the results are stored in the
~/exp_resultsby default.cd scripts/exp bash run_mode.sh cora raw gcn 0 avg bash run_mode.sh citeseer raw gcn 1 avg bash run_mode.sh pubmed raw gcn 1 avg -
Then draw the figure with tools we provide, the figures will be saved in
~/figures.from fedhpobench.utils.draw import rank_over_time rank_over_time('exp_results', 'gcn', algo='avg', loss=False)
Using FedHPOBench with HPOBench
HPOBench is a very popular and influential library in the HPO field, so we provide serval demos for exposing FedHPOBench through the interfaces of HPOBench in demo\:
How to use:
-
Install HPOBench:
git clone https://github.com/automl/HPOBench.git cd HPOBench pip install . -
Start to use:
from femnist_tabular_ benchmark import FEMNISTTabularFedHPOBench b = FEMNISTTabularFedHPOBench('data', 1) config = b.get_configuration_space(seed=1).sample_configuration() result_dict = b.objective_function(configuration=config, rng=1) print(result_dict)
Publications
If you find FedHPO-Bench useful for your research or development, please cite the following paper:
@article{Wang2022FedHPOBAB,
title={FedHPO-Bench: A Benchmark Suite for Federated Hyperparameter Optimization},
author={Zhen Wang and Weirui Kuang and Ce Zhang and Bolin Ding and Yaliang Li},
journal={ArXiv},
year={2022},
volume={abs/2206.03966}
}
Look-up table
Available tabular <Model, Dataset, Fedalgo> triplets look-up table:
| Model | Dataset | FedAlgo |
|---|---|---|
| cnn | femnist | avg |
| bert | cola@huggingface_datasets | avg |
| bert | cola@huggingface_datasets | opt |
| bert | sst2@huggingface_datasets | avg |
| bert | sst2@huggingface_datasets | opt |
| gcn | cora | avg |
| gcn | cora | opt |
| gcn | cora | prox |
| gcn | cora | nbafl |
| gcn | citeseer | avg |
| gcn | citeseer | opt |
| gcn | pubmed | avg |
| gcn | pubmed | opt |
| lr | 31@openml | avg |
| lr | 31@openml | opt |
| lr | 53@openml | avg |
| lr | 53@openml | opt |
| lr | 3917@openml | avg |
| lr | 3917@openml | opt |
| lr | 10101@openml | avg |
| lr | 10101@openml | opt |
| lr | 146818@openml | avg |
| lr | 146818@openml | opt |
| lr | 146821@openml | avg |
| lr | 146821@openml | opt |
| lr | 146822@openml | avg |
| lr | 146822@openml | opt |
| mlp | 31@openml | avg |
| mlp | 31@openml | opt |
| mlp | 53@openml | avg |
| mlp | 53@openml | opt |
| mlp | 3917@openml | avg |
| mlp | 3917@openml | opt |
| mlp | 10101@openml | avg |
| mlp | 10101@openml | opt |
| mlp | 146818@openml | avg |
| mlp | 146818@openml | opt |
| mlp | 146821@openml | avg |
| mlp | 146821@openml | opt |
| mlp | 146822@openml | avg |
| mlp | 146822@openml | opt |
| cross_device | avg |