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.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 __init__(update_handler: UpdateHandler)[source]

Initialize the aggregator.

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

__init__(update_handler)[source]

Constructor method

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”.

Limitations:
  • Only supports one combiner.

  • Momentum is reser for each new invokation of a training session.

Parameters:

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

__init__(update_handler)[source]

Initialize the aggregator.

combine_models(helper: HelperBase | None = None, delete_models: bool = True, parameters: Parameters | None = None) Tuple[Any | None, Dict[str, float]][source]

Compute pseudo gradients using model updates in the queue.

Parameters:
  • helper – ML framework-specific helper, defaults to None.

  • delete_models – Delete models from storage after aggregation, defaults to True.

  • parameters – Aggregator hyperparameters, defaults to None.

Returns:

The global model and metadata.

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.

fedn.network.combiner.aggregators.splitlearningagg module