Passe à Flower 1.0#
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
-U
lors de l’installation.python -m pip install -U flwr
(lors de l’utilisation destart_server
etstart_client
)python -m pip install -U flwr[simulation]
(lors de l’utilisation destart_simulation
)
Poetry : mettez à jour la dépendance
flwr
danspyproject.toml
puis réinstallez (n’oubliez pas de supprimerpoetry.lock
viarm poetry.lock
avant d’exécuterpoetry install
).flwr = "^1.0.0"
(lors de l’utilisation destart_server
etstart_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_server
etstart_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=1
dansstart_simulation
par le nouveauconfig=ServerConfig(...)
(voir point précédent)Supprime le paramètre
force_final_distributed_eval
des 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_ndarrays
Poids_à_paramètres
–>Réseaux_à_paramètres
Initialisation de la stratégie : si la stratégie repose sur les valeurs par défaut de
fraction_fit
etfraction_evaluate
, fixer manuellementfraction_fit
etfraction_evaluate
à 0.1`. Les projets qui ne créent pas manuellement une stratégie (en appelantstart_server` ou ``start_simulation
sans passer une instance de stratégie) doivent maintenant initialiser manuellement FedAvg avecfraction_fit
etfraction_evaluate
fixés à0.1
.Renommer les paramètres de stratégie intégrés (par exemple,
FedAvg
) :fraction_eval
–>fraction_evaluate
min_eval_clients` --> ``min_evaluate_clients
eval_fn
–>evaluate_fn
Renommez
rnd
enserver_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_round
etconfig
à 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
failures
a 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
Client
ou deNumPyClient
. Si tu utilises, par exemple, l’évaluation côté serveur, alors les implémentations « placeholder » deevaluate
ne 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
.