Source code for fedsim.fl.algorithms.fednova

r""" This file contains an implementation of the following paper:
    Title: "Tackling the Objective Inconsistency Problem in Heterogeneous Federated Optimization"
    Authors: Jianyu Wang, Qinghua Liu, Hao Liang, Gauri Joshi, H. Vincent Poor
    Publication date: 15 Jul 2020
    Link: https://arxiv.org/abs/2007.07481
"""
from . import fedavg


[docs]class FedNova(fedavg.FedAvg): def __init__( self, data_manager, metric_logger, num_clients, sample_scheme, sample_rate, model_class, epochs, loss_fn, batch_size=32, test_batch_size=64, local_weight_decay=0., slr=1., clr=0.1, clr_decay=1., clr_decay_type='step', min_clr=1e-12, clr_step_size=1000, device='cuda', log_freq=10, *args, **kwargs, ): super(FedNova, self).__init__( data_manager, metric_logger, num_clients, sample_scheme, sample_rate, model_class, epochs, loss_fn, batch_size, test_batch_size, local_weight_decay, slr, clr, clr_decay, clr_decay_type, min_clr, clr_step_size, device, log_freq, )
[docs] def receive_from_client(self, client_id, client_msg, aggregation_results): weight = client_msg['num_samples'] / client_msg['num_steps'] self.agg(client_id, client_msg, aggregation_results, weight=weight)