Synchronous algorithms#
Various synchronous global model update methods @ FL server#
We have implemented various synchronous global model update methods taken place at the FL server given local model parameters received from clients, which are
ServerFedAvg: averaging local model parameters to update global model parametersServerFedAvgMomentum: ServerFedAvg with a momentumServerFedAdagrad: use of the adaptive gradient (Adagrad) algorithm for a global update at a serverServerFedAdam: use of the adaptive moment estimation (Adam) algorithm for a global updateServerFedYogi: use of the Yogi algorithm for a global update
One can set which algorithm to use by setting servername in cfg.fed (e.g., cfg.fed.servername='ServerFedAvgMomentum').
One can also configure the hyperparameters for each algorithm, as shown in appfl/config/federated.py.
type: str = "federated"
servername: str = "ServerFedAvg"
clientname: str = "ClientOptim"
args: DictConfig = OmegaConf.create(
{
## Server update
"server_learning_rate": 0.01,
"server_adapt_param": 0.001,
"server_momentum_param_1": 0.9,
"server_momentum_param_2": 0.99,
Roughly speaking, the global update is done as follow:
global_model_parameter += (server_learning_rate * m) / ( sqrt(v) + server_adapt_param)
where
server_learning_rate: learning rate for the global update
server_adapt_param: adaptivity parameter
m: momentum
m=server_momentum_param_1*m+ (1-server_momentum_param_1) *PseudoGradPseudoGrad: pseudo gradient obtained by averaging differences of global and local model parameters
v: variance
- For
ServerFedAdagrad: v=v+ (PseudoGrad)^2
- For
- For
ServerFedAdam: v=server_momentum_param_2*v+ (1-server_momentum_param_2)* (PseudoGrad)^2
- For
- For
ServerFedYogi: v=v- (1 -server_momentum_param_2)* (PseudoGrad)^2 sign(v- (PseudoGrad)^2)
- For
See the following paper for more details on the above global update techniques:
Reddi, S., Charles, Z., Zaheer, M., Garrett, Z., Rush, K., Konečný, J., Kumar, S. and McMahan, H.B., 2020. Adaptive federated optimization. arXiv preprint arXiv:2003.00295