Updating plan settings

With the director-based workflow, you can use custom plan settings before starting the experiment. Changing plan settings in command line interface is straightforward by modifying plan.yaml. When using Python API or Director Envoy based interactive API, override_config can be used to update plan settings.

Python API

Modify the plan settings:

final_fl_model = fx.run_experiment(collaborators, override_config={
'aggregator.settings.rounds_to_train': 5,
'aggregator.settings.log_metric_callback': write_metric,
})

Director Envoy Based Interactive API Interface

Once you create an FL_experiment object, a basic federated learning plan with default settings is created. To check the default plan settings, print the plan as shown below:

fl_experiment = FLExperiment(federation=federation, experiment_name=experiment_name)
import openfl.native as fx
print(fx.get_plan(fl_plan=fl_experiment.plan))

Here is an example of the default plan settings that get displayed:

"aggregator.settings.best_state_path": "save/best.pbuf",
"aggregator.settings.db_store_rounds": 2,
"aggregator.settings.init_state_path": "save/init.pbuf",
"aggregator.settings.last_state_path": "save/last.pbuf",
"aggregator.settings.rounds_to_train": 10,
"aggregator.settings.write_logs": true,
"aggregator.template": "openfl.component.Aggregator",
"assigner.settings.task_groups.0.name": "train_and_validate",
"assigner.settings.task_groups.0.percentage": 1.0,
"assigner.settings.task_groups.0.tasks.0": "aggregated_model_validation",
"assigner.settings.task_groups.0.tasks.1": "train",
"assigner.settings.task_groups.0.tasks.2": "locally_tuned_model_validation",
"assigner.template": "openfl.component.RandomGroupedAssigner",
"collaborator.settings.db_store_rounds": 1,
"collaborator.settings.delta_updates": false,
"collaborator.settings.opt_treatment": "RESET",
"collaborator.template": "openfl.component.Collaborator",
"compression_pipeline.settings": {},
"compression_pipeline.template": "openfl.pipelines.NoCompressionPipeline",
"data_loader.settings": {},
"data_loader.template": "openfl.federated.DataLoader",
"network.settings.agg_addr": "auto",
"network.settings.agg_port": "auto",
"network.settings.cert_folder": "cert",
"network.settings.client_reconnect_interval": 5,
"network.settings.disable_client_auth": false,
"network.settings.hash_salt": "auto",
"network.settings.tls": true,
"network.template": "openfl.federation.Network",
"task_runner.settings": {},
"task_runner.template": "openfl.federated.task.task_runner.CoreTaskRunner",
"tasks.settings": {}

Use override_config with FL_experiment.start to make any changes to the default plan settings. It’s essentially a dictionary with the keys corresponding to plan parameters along with the corresponding values (or list of values). Any new key entry will be added to the plan and for any existing key present in the plan, the value will be overrriden.

fl_experiment.start(model_provider=MI,
               task_keeper=TI,
               data_loader=fed_dataset,
               rounds_to_train=5,
               opt_treatment='CONTINUE_GLOBAL',
               override_config={'aggregator.settings.db_store_rounds': 1, 'compression_pipeline.template': 'openfl.pipelines.KCPipeline', 'compression_pipeline.settings.n_clusters': 2})

Since ‘aggregator.settings.db_store_rounds’ and ‘compression_pipeline.template’ fields are already present in the plan, the values of these fields get replaced. Field ‘compression_pipeline.settings.n_clusters’ is a new entry that gets added to the plan:

INFO     Updating aggregator.settings.db_store_rounds to 1...                                                                           native.py:102

INFO     Updating compression_pipeline.template to openfl.pipelines.KCPipeline...                                                       native.py:102

INFO     Did not find compression_pipeline.settings.n_clusters in config. Make sure it should exist. Creating...                        native.py:105

A full implementation can be found at Federated_Pytorch_MNIST_Tutorial.ipynb and at Tensorflow_MNIST.ipynb.