This framework is for scalable federated learning simulation using the Flower framework. User can test various CNN models using many federated learning aggregation models. The user may select the options using config.json. Visualization is also able selecting models and strategies to compare.
To install, all that needs to be done is clone this repository to the desired directory.
pytorch, matplotlib, pandas is essential.
To start a simulation, run run.py from the repository's root directory:
python run.py
--config=config.json
--log=INFO-
run.pyflags--config(-c): Path to the configuration file to be used.--log(-l): Level of logging info to be written to console, defaults toINFO.--vis(-v): Option to only execute visualization, defaults tonull. To activate this option, pass the path of the.csvfile resulted from previous training.
The simulation will create results in the ./result directory. It will create a directory using the timestamp when the simulation started. Inside the directory, you will have 3 results.
- Copy of the used
config.json. .csvfile of the results of each model.- It will contain the
loss,accuracy,f1-score,precision, andrecallof eachmodelandstrategy.
- It will contain the
.pngof the visualized graph.
The visualization options will create a graph in a .png file. The created graph shows the selected metric as the y-axis, and the rounds as the x-axis. You could check out how the metric changes as the rounds progressed.
Also only_visualization options are available. There are two options to activate it.
- Command line options with
--visor-vto activate it, and defaults tonull, which means not turning it on. You must pass the path of the.csvfile as the next argument to activate. - Entering the path into
config.json. As same as command line options, you must pass the path of the.csvfile.
When either which option is on by passing the path, it will activate the visualization option. The results will be saved where the .csv file was saved.
Try the provided exampleexample_result.csv for reference.
Custom datasets and custom models are appliable for test.
The framework allows user to use their own dataset for simulation by putting the custom_dataset.py and dataset path config.json.
There are some rules to follow.
- The python file
.pymust be namedcustom_dataset.py. - The python class name must be
CustomDataset. - The
CustomDatasetshould inherittorch.utils.data.Datasetclass. - The
config.json's"data"'s"dataset"must be named"custom_dataset". - The user must pass the
custom_dataset.pyanddatasetfolder toconfig.json's"data"'s"custom_path"'s"py_path""data_path".
Use the provided example custom_dataset.py, with custom_dataset_config.json for reference.
The only thing to train and test your model is to put the path of your custom_model.py into the config.json.
There are some rules to follow.
- File name of the
.pymust becustom_model.py. - The main class name must be
CustomModel. - The user must match the input channels and output number labels in their own model. The framework cannot automatically do this. For example, if you are using CIFAR-10 dataset which has 3 input channels and 10 labels, you must apply it to your own model.
Use the provided example custom_model.py, with custom_model_config.json for reference.
This framework uses configuration files to manage the parameters of a simulation. These files, typically named config.json, are of JSON format and have specific keys for setting parameters.
Use the provided templateconfig.json for reference. Also, there is an example config.json in examples/config.json
Configuration parameters are divided into the following nested sections within a config.json file:
-
clients: Nested options pertaining to the clients.total:[positive integer], Number of total clients to be managed by server.per_round:[positive integer], Number of clients participating in each round.validation_ratio:[float between 0 and 1], Rate of the validation set from the train set. For instance, 0.1 means 10% of the train set will be used as the validation set.
-
data: Nested options for how data is managed.dataset:["cifar10", "cifar100"], Dataset used to train and test.batch_size:[positive integer], Size of data batch for each gradient update on a client.remain_ratio:[float between 0 and 1],TODO: need to update.random_seed:[positive integer], Seed for the random_split. Select when you want the seed to be fixed.
-
model: Nested options for the model structure to train.[model_name:"densenet121", "mobilenet_v2", "googlenet", "resnet18", "resnet34", "resnet50", "vgg11", "vgg13", "vgg16", "vgg19"], Select model structure to train. The model is loaded bytorchvision.models.pretrained_path:[string], path of directory of the pretrained model to be used.args: Nested class of additional arguments used for the model.
-
strategy:["Centralized", "FedAvg", "FedAvgM", "FedOpt", "FedProx"], Strategies to compare. Single or multiple strategies may be selected. -
federated learning: Specifications of federated learning task.centralized_epochs:[positive integer], Number of epochs of centralized learning to simulate.rounds:[positive integer], Number of rounds of federated learning to simulate.epochs:[positive integer], Number of epochs each client performs each round.learning_rate:[float between 0 and 1], Learning rate for training model.weight_decay:[float between 0 and 1], Weight decay reate for training model.fraction_fit:[float between 0 and 1], Sampling rate of available clients for training. 1.0 means 100% of clients participates training.fraction_evaluate:[float between 0 and 1], Sampling rate of available clients for evaluation. 1.0 means 100% of clients participates evaluation.min_fit_clients:[positive integer], Minimum number of clients to sample during training. For instance if it is 10, it means to never sample less than 10 clients for training.min_evaluate_clients:[positive integer], Minimum number of clients to sample during evaluation. For instance if it is 10, it means to never sample less than 10 clients for evaluation.min_available_clients:[positive integer], Minimum number of clients to start simulation. For instance if it is 10, it waits until 10 clients are available.
-
paths: Nested options for paths used by the framework.data:[string], Path to root data directory. Defaults to./data.model:[string], Path to root model directory. Defaults to./models.
-
visualization: Nested options for visualization options.only_visualization:[null/path], Option to skip training and only do visualization. If you do not want to turn on this option, enternull. This option is related to the command line option--vis, and it is defaultlynull. To activate it, you must pass the path of theresult.csvfile.model:["model.model_name"], Models to compare. It must only contain the model names frommodel'smodel_nameoption. Single or multiple models are available.strategy:["strategy"], Strategies to compare. It must only contains strategies fromstrategyoption. Single or multiple strategies are available.metrics:["loss", "accuracy", "f1-score", "precision", "recall"], Metrics to visualize. Single or multiple metrics are available.