Passe à Flower 1.0¶
Note
This guide is for users who have already worked with Flower 0.x and want to upgrade to Flower 1.0. Newer versions of Flower (1.13 and later) are based on a new architecture and not covered in this guide. After upgrading Flower 0.x projects to Flower 1.0, please refer to Upgrade to Flower 1.13 to make your project compatible with the lastest version of Flower.
Flower 1.0 est arrivé. En plus de nouvelles fonctionnalités, Flower 1.0 fournit une base stable pour la croissance future. Par rapport à Flower 0.19 (et aux autres versions de la série 0.x), il y a quelques changements qui nécessitent de modifier le code des projets de la série 0.x existants.
Installer la mise à jour¶
Voici comment mettre à jour une installation existante vers Flower 1.0 en utilisant soit pip soit Poetry :
pip : ajoute
-Ulors de l’installation.python -m pip install -U flwr(lors de l’utilisation destart_serveretstart_client)python -m pip install -U 'flwr[simulation]'(lors de l’utilisation destart_simulation)
Poetry : mettez à jour la dépendance
flwrdanspyproject.tomlpuis réinstallez (n’oubliez pas de supprimerpoetry.lockviarm poetry.lockavant d’exécuterpoetry install).flwr = "^1.0.0"(lors de l’utilisation destart_serveretstart_client)flwr = { version = "^1.0.0", extras = ["simulation"] }(lors de l’utilisation destart_simulation)
Changements nécessaires¶
Les changements de rupture suivants nécessitent des mises à jour manuelles.
Généralités¶
Passe tous les arguments comme des arguments de mots-clés (et non comme des arguments de position). Voici un exemple :
Flower 0.19 (arguments positionnels) :
start_client("127.0.0.1:8080", FlowerClient())Fleur 1.0 (arguments de mots-clés) :
start_client(server_address="127.0.0.1:8080", client=FlowerClient())
Client¶
Sous-classes de
NumPyClient: changezdef get_parameters(self):endef get_parameters(self, config):Sous-classes de
Client: changezdef get_parameters(self):endef get_parameters(self, ins : GetParametersIns):
Stratégies / démarrer_serveur / démarrer_simulation¶
Passez
ServerConfig(au lieu d’un dictionnaire) àstart_serveretstart_simulation. Voici un exemple :Flower 0.19 :
start_server(..., config={"num_rounds" : 3, "round_timeout" : 600.0}, ...)Flower 1.0 :
start_server(..., config=flwr.server.ServerConfig(num_rounds=3, round_timeout=600.0), ...)
Remplacer
num_rounds=1dansstart_simulationpar le nouveauconfig=ServerConfig(...)(voir point précédent)Supprime le paramètre
force_final_distributed_evaldes appels àstart_server. L’évaluation distribuée sur tous les clients peut être activée en configurant la stratégie pour échantillonner tous les clients pour l’évaluation après le dernier tour de formation.Renomme les fonctions de conversion des paramètres et des tableaux :
parameters_to_weights–>parameters_to_ndarraysPoids_à_paramètres–>Réseaux_à_paramètres
Initialisation de la stratégie : si la stratégie repose sur les valeurs par défaut de
fraction_fitetfraction_evaluate, fixer manuellementfraction_fitetfraction_evaluateà 0.1`. Les projets qui ne créent pas manuellement une stratégie (en appelantstart_server` ou ``start_simulationsans passer une instance de stratégie) doivent maintenant initialiser manuellement FedAvg avecfraction_fitetfraction_evaluatefixés à0.1.Renommer les paramètres de stratégie intégrés (par exemple,
FedAvg) :fraction_eval–>fraction_evaluatemin_eval_clients` --> ``min_evaluate_clientseval_fn–>evaluate_fn
Renommez
rndenserver_round. Cela a un impact sur plusieurs méthodes et fonctions, par exemple,configure_fit,aggregate_fit,configure_evaluate,aggregate_evaluate, etevaluate_fn.Ajoute
server_roundetconfigà evaluate_fn` :Flower 0.19 :
def evaluate(parameters : NDArrays) -> Optional[Tuple[float, Dict[str, Scalar]]]]:Flower 1.0 :
def evaluate(server_round : int, parameters : NDArrays, config : Dict[str, Scalar]) -> Optional[Tuple[float, Dict[str, Scalar]]]:
Stratégies personnalisées¶
Le type du paramètre
failuresa changé deList[BaseException]àList[Union[Tuple[ClientProxy, FitRes], BaseException]](dansaggregate_fit) etList[Union[Tuple[ClientProxy, EvaluateRes], BaseException]](dansaggregate_evaluate)La méthode
Stratégieévaluer` reçoit maintenant le cycle actuel d’apprentissage/évaluation fédéré comme premier paramètre :Flower 0.19 :
def evaluate(self, parameters : Parameters) -> Optional[Tuple[float, Dict[str, Scalar]]]]:Flower 1.0 :
def evaluate(self, server_round : int, parameters : Parameters) -> Optional[Tuple[float, Dict[str, Scalar]]]]:
Améliorations facultatives¶
En plus des changements nécessaires mentionnés ci-dessus, il existe un certain nombre d’améliorations potentielles qui viennent d’être rendues possibles :
Supprime les méthodes « placeholder » des sous-classes de
Clientou deNumPyClient. Si tu utilises, par exemple, l’évaluation côté serveur, alors les implémentations « placeholder » deevaluatene sont plus nécessaires.Configurez le délai d’attente de la ronde via
start_simulation:start_simulation(..., config=flwr.server.ServerConfig(num_rounds=3, round_timeout=600.0), ...)
Aide supplémentaire¶
La plupart des exemples de code Flower officiels sont déjà mis à jour vers Flower 1.0, ils peuvent servir de référence pour l’utilisation de l’API Flower 1.0. Si vous avez d’autres questions, joins le Slack Flower et utilise le canal #questions.