Skip to content

fl_server_ai.trainer.events.daisy_chain_round_finished

Classes:

Name Description
DaisyChainRoundFinished

Federated daisy chain (FedDC) round finished event.

Classes

DaisyChainRoundFinished

Bases: TrainingRoundFinished


              flowchart TD
              fl_server_ai.trainer.events.daisy_chain_round_finished.DaisyChainRoundFinished[DaisyChainRoundFinished]
              fl_server_ai.trainer.events.training_round_finished.TrainingRoundFinished[TrainingRoundFinished]
              fl_server_ai.trainer.events.base.ModelTrainerEvent[ModelTrainerEvent]

                              fl_server_ai.trainer.events.training_round_finished.TrainingRoundFinished --> fl_server_ai.trainer.events.daisy_chain_round_finished.DaisyChainRoundFinished
                                fl_server_ai.trainer.events.base.ModelTrainerEvent --> fl_server_ai.trainer.events.training_round_finished.TrainingRoundFinished
                



              click fl_server_ai.trainer.events.daisy_chain_round_finished.DaisyChainRoundFinished href "" "fl_server_ai.trainer.events.daisy_chain_round_finished.DaisyChainRoundFinished"
              click fl_server_ai.trainer.events.training_round_finished.TrainingRoundFinished href "" "fl_server_ai.trainer.events.training_round_finished.TrainingRoundFinished"
              click fl_server_ai.trainer.events.base.ModelTrainerEvent href "" "fl_server_ai.trainer.events.base.ModelTrainerEvent"
            

Federated daisy chain (FedDC) round finished event.

Methods:

Name Description
__init__
handle

Handle the FedDC event.

Source code in fl_server_ai/trainer/events/daisy_chain_round_finished.py
class DaisyChainRoundFinished(TrainingRoundFinished):
    """
    Federated daisy chain (FedDC) round finished event.
    """

    def __init__(self, trainer: "model_trainer.ModelTrainer"):
        super().__init__(trainer)
        self.trainer.options.model_test_after_each_round = False

    def handle(self):
        """
        Handle the FedDC event.

        (a) local client training is finished -> do the aggregation

        (b) local client training is not finished yet (but we reach a daisy chaining period)
            -> no aggregation, just send the permutated client models back for further training
            - also see `FedDCModelTrainer.handle()`
        """
        # the round increment is not done yet, therefore `model.round + 1`
        if (self.training.model.round + 1) >= self.training.target_num_updates:
            # local client training is finished, let's do the aggregation
            super().handle()  # also does the round increment
            return

        # local client training is not finished yet, but we reach a daisy chaining period
        # => no aggregation, just send the permutated client models back for further training
        # also see `FedDCModelTrainer.handle()`

        self.training.model.round += 1
        self.training.model.save()

Functions

__init__
__init__(trainer: ModelTrainer)
Source code in fl_server_ai/trainer/events/daisy_chain_round_finished.py
def __init__(self, trainer: "model_trainer.ModelTrainer"):
    super().__init__(trainer)
    self.trainer.options.model_test_after_each_round = False
handle
handle()

Handle the FedDC event.

(a) local client training is finished -> do the aggregation

(b) local client training is not finished yet (but we reach a daisy chaining period) -> no aggregation, just send the permutated client models back for further training - also see FedDCModelTrainer.handle()

Source code in fl_server_ai/trainer/events/daisy_chain_round_finished.py
def handle(self):
    """
    Handle the FedDC event.

    (a) local client training is finished -> do the aggregation

    (b) local client training is not finished yet (but we reach a daisy chaining period)
        -> no aggregation, just send the permutated client models back for further training
        - also see `FedDCModelTrainer.handle()`
    """
    # the round increment is not done yet, therefore `model.round + 1`
    if (self.training.model.round + 1) >= self.training.target_num_updates:
        # local client training is finished, let's do the aggregation
        super().handle()  # also does the round increment
        return

    # local client training is not finished yet, but we reach a daisy chaining period
    # => no aggregation, just send the permutated client models back for further training
    # also see `FedDCModelTrainer.handle()`

    self.training.model.round += 1
    self.training.model.save()