fedn.network.combiner.aggregators package

The aggregator package is responsible for aggregating models from multiple clients. It’s called both in fedn.network.combiner.Combiner and fedn.network.controller.Controller to aggregate models from clients.

Submodules

fedn.network.combiner.aggregators.aggregator module

fedn.network.combiner.aggregators.aggregatorbase module

class fedn.network.combiner.aggregators.aggregatorbase.AggregatorBase(update_handler: UpdateHandler)[source]

Bases: ABC

Abstract class defining an aggregator.

Parameters:

control (class: fedn.network.combiner.updatehandler.UpdateHandler) – A handle to the :class: fedn.network.combiner.updatehandler.UpdateHandler

abstract combine_models(nr_expected_models=None, nr_required_models=1, helper=None, timeout=180, delete_models=True, parameters=None)[source]

Routine for combining model updates. Implemented in subclass.

Parameters:
  • nr_expected_models (int) – Number of expected models. If None, wait for all models.

  • nr_required_models (int) – Number of required models to combine.

  • helper – A helper object.

  • timeout (int) – Timeout in seconds to wait for models to be combined.

  • delete_models (bool) – Delete client models after combining.

  • parameters (dict) – Additional key-word arguments.

Returns:

The global model and metadata

Return type:

tuple

fedn.network.combiner.aggregators.aggregatorbase.get_aggregator(aggregator_module_name, update_handler)[source]

Return an instance of the helper class.

Parameters:
  • helper_module_name (str) – The name of the helper plugin module.

  • storage (class: fedn.common.storage.s3.s3repo.S3ModelRepository) – Model repository for :class: fedn.network.combiner.Combiner

  • server (class: fedn.network.combiner.Combiner) – A handle to the Combiner class :class: fedn.network.combiner.Combiner

  • modelservice (class: fedn.network.combiner.modelservice.ModelService) – A handle to the model service :class: fedn.network.combiner.modelservice.ModelService

  • control (class: fedn.network.combiner.roundhandler.RoundHandler) – A handle to the :class: fedn.network.combiner.roundhandler.RoundHandler

Returns:

An aggregator instance.

Return type:

class: fedn.combiner.aggregators.AggregatorBase

fedn.network.combiner.aggregators.fedavg module

class fedn.network.combiner.aggregators.fedavg.Aggregator(update_handler)[source]

Bases: AggregatorBase

Local SGD / Federated Averaging (FedAvg) aggregator. Computes a weighted mean

of parameter updates.

Parameters:

control (class: fedn.network.combiner.updatehandler.UpdateHandler) – A handle to the :class: fedn.network.combiner.updatehandler.UpdateHandler

combine_models(helper=None, delete_models=True, parameters=None)[source]

Aggregate all model updates in the queue by computing an incremental weighted average of model parameters.

Parameters:
  • helper (class: fedn.utils.helpers.helpers.HelperBase, optional) – An instance of :class: fedn.utils.helpers.helpers.HelperBase, ML framework specific helper, defaults to None

  • time_window (int, optional) – The time window for model aggregation, defaults to 180

  • max_nr_models (int, optional) – The maximum number of updates aggregated, defaults to 100

  • delete_models (bool, optional) – Delete models from storage after aggregation, defaults to True

Returns:

The global model and metadata

Return type:

tuple

fedn.network.combiner.aggregators.fedopt module

class fedn.network.combiner.aggregators.fedopt.Aggregator(update_handler)[source]

Bases: AggregatorBase

Federated Optimization (FedOpt) aggregator.

Implmentation following: https://arxiv.org/pdf/2003.00295.pdf

This aggregator computes pseudo gradients by subtracting the model update from the global model weights from the previous round. A server-side scheme is then applied, currenty supported schemes are “adam”, “yogi”, “adagrad”.

Parameters:

control (class: fedn.network.combiner.updatehandler.UpdateHandler) – A handle to the :class: fedn.network.combiner.updatehandler.UpdateHandler

combine_models(helper=None, delete_models=True, parameters=None)[source]

Compute pseudo gradients using model updates in the queue.

Parameters:
  • helper (class: fedn.utils.helpers.helpers.HelperBase, optional) – An instance of :class: fedn.utils.helpers.helpers.HelperBase, ML framework specific helper, defaults to None

  • time_window (int, optional) – The time window for model aggregation, defaults to 180

  • max_nr_models (int, optional) – The maximum number of updates aggregated, defaults to 100

  • delete_models (bool, optional) – Delete models from storage after aggregation, defaults to True

  • parameters (fedn.utils.parmeters.Parameters, optional) – Aggregator hyperparameters.

Returns:

The global model and metadata

Return type:

tuple

serveropt_adagrad(helper, pseudo_gradient, model_old, parameters)[source]

Server side optimization, FedAdam.

Parameters:
  • helper (Helper) – instance of helper class.

  • pseudo_gradient (As defined by helper.) – The pseudo gradient.

  • model_old (As defined in helper.) – The current global model.

  • parameters (dict) – Hyperparamters for the aggregator.

Returns:

new model weights.

Return type:

as defined by helper.

serveropt_adam(helper, pseudo_gradient, model_old, parameters)[source]

Server side optimization, FedAdam.

Parameters:
  • helper (Helper) – instance of helper class.

  • pseudo_gradient (As defined by helper.) – The pseudo gradient.

  • model_old (As defined in helper.) – The current global model.

  • parameters (dict) – Hyperparamters for the aggregator.

Returns:

new model weights.

Return type:

as defined by helper.

serveropt_yogi(helper, pseudo_gradient, model_old, parameters)[source]

Server side optimization, FedYogi.

Parameters:
  • helper (Helper) – instance of helper class.

  • pseudo_gradient (As defined by helper.) – The pseudo gradient.

  • model_old (As defined in helper.) – The current global model.

  • parameters (dict) – Hyperparamters for the aggregator.

Returns:

new model weights.

Return type:

as defined by helper.