Exécuter Flower avec le Deployment Runtime¶
Ce guide pratique montre comment configurer et exécuter Flower avec le Deployment Runtime à l’aide d’une configuration minimale pour illustrer le flux de travail. Il complète les guides Exécuter Flower à l’aide de Docker.
Dans ce guide pratique, vous allez:
Créez une application Flower à l’aide de PyTorch.
Lancez une fédération Flower composée d’un SuperLink (le serveur) et deux SuperNodes (les clients).
Exécutez l’application Flower sur cette fédération.
Le guide devrait prendre moins de 10 minutes pour être terminé.
Prérequis¶
Avant de commencer, assurez-vous que :
La dernière version de
flwrCLI est installée sur votre machine. Suivez les instructions d’installation here.Ce guide suppose que tous les commandes sont exécutés dans la même machine, dans différents terminaux, chacun utilisant le même environnement Python.
Ce guide suppose également que vous êtes familier avec les composants de base d’une déploiement Flower (c’est-à-dire SuperLink et SuperNode), leurs rôles et comment ils interagissent entre eux. Veuillez consulter le guide Flower Architecture (architecture de Flower) et le guide Communication réseau de Flower pour obtenir une vue d’ensemble de ce que fait chaque composant et comment ils interagissent entre eux.
Note
Dans un déploiement réel, vous auriez généralement exécuter le SuperNode dans des machines/servers différents de ceux où vous développez votre application Flower (c’est-à-dire à partir de là où vous faites flwr new et flwr run). Le guide présenté ci-dessous est toujours valable pour de tels scénarios, mais vous aurez besoin d’avoir configuré un environnement Python avec le bon ensemble de dépendances pour SuperLink et SuperNodes. Une façon plus facile de réaliser de tels déploiements est par l’intermédiaire de Docker. Consultez la Exécuter Flower à l’aide de Docker pour en savoir plus sur la manière de procéder.
Étape 1 : Créez une application Flower¶
Bien que vous puissiez écrire une application Flower à partir de zéro, il est souvent plus facile de commencer avec l’une des applications quickstart disponibles via flwr new et puis la personnaliser à votre cas d’utilisation. Créez un nouveau dépôt Flower (PyTorch), et suivez les instructions affichées lors de l’exécution de flwr new:
$ flwr new @flwrlabs/quickstart-pytorch
🔗 Requesting download link for @flwrlabs/quickstart-pytorch...
🔽 Downloading ZIP into memory...
📦 Unpacking into /Users/alice/quickstart-pytorch...
🎊 Flower App creation successful.
To run your Flower App, first install its dependencies:
cd quickstart-pytorch && pip install -e .
then, run the app:
flwr run .
💡 Check the README in your app directory to learn how to
customize it and how to run it using the Deployment Runtime.
Note
Si vous décidez de lancer le projet avec flwr run . contre le profil local par défaut (celui marqué avec address = ":local:" dans la configuration Flower), Flower soumet l’exécution à un SuperLink géré local, qui l’exécute ensuite avec le Runtime Simulation. Continuez à l’Étape 2 pour pointer flwr run vers une connexion de SuperLink nommée pour le Deployment Runtime.
Astuce
N’hésitez pas à inspecter le code en utilisant votre éditeur de code préféré avant de poursuivre. Juste ouvrez le fichier quickstart-pytorch qui a été créé automatiquement via flwr new. Si vous souhaitez obtenir une vue d’ensemble du code généré, prenez un coup d’œil à la Quickstart PyTorch tutorial.
Étape 2 : Lancez la fédération Flower¶
Dans cette section, vous apprendrez à lancer un SuperLink et à connecter deux SuperNodes à lui.
Lancez un SuperLink Flower¶
Dans un nouveau terminal, activez votre environnement et lancez le processus de SuperLink en mode non sécurisé :
$ flower-superlink --insecure
Comprendre la commande
flower-superlink: Nom de l’exécutable SuperLink installé CLI.--insecure: Cette étiquette indique au SuperLink d’opérer dans un mode non sécurisé, permettant une communication non chiffrée. Consultez la guide Activer les connexions TLS pour en savoir plus sur la manière de lancer votre application SuperLink avec TLS.
Note
Pour activer TLS également pour l’API AppIo du SuperLink, veuillez consulter Launching the SuperLink with TLS.
Lancez deux SuperNode Flower¶
Dans cette étape, vous lancerez deux SuperNodes et les connecterez au SuperLink. Vous aurez besoin de deux terminaux pour cette étape.
Note
Notez que les valeurs passées via l’argument --node-config sont spécifiques au comportement de ClientApp. Si vous inspectez le code généré dans la première étape via flwr new, vous verrez que ClientApp attend un certain ensemble de paires clé-valeur pour partitionner et charger des données. Généralement, votre ClientApp ne partitionnerait pas un jeu de données, mais accéderait directement aux données disponibles. Dans ce cas, vous écririez votre ClientApp et le rendriez capable de recevoir, par exemple, l’adresse d’un répertoire d’images.
Terminal 1 Lancez le premier SuperNode après avoir activé votre environnement :
$ flower-supernode \ --insecure \ --superlink 127.0.0.1:9092 \ --clientappio-api-address 127.0.0.1:9094 \ --node-config "partition-id=0 num-partitions=2"
Comprendre la commande
flower-supernode: Nom de l’exécutable SuperNode installé CLI.--insecure: Cette étiquette indique au SuperNode de fonctionner en mode non sécurisé, permettant la communication non chiffrée. Référez-vous à la guide Activer les connexions TLS pour apprendre à exécuter votre SuperNode avec TLS.--superlink 127.0.0.1:9092: Connectez-vous à l’API Fleet du SuperLink à l’adresse127.0.0.1:9092. Si vous aviez lancé le SuperLink dans une autre machine, vous remplaceriez127.0.0.1par l’IP publique de cette machine.--clientappio-api-address 127.0.0.1:9094: Définissez l’adresse et le numéro de port où le SuperNode écoute pour communiquer avec leClientApp.--node-config "partition-id=0 num-partitions=2": Le code généré viaflwr newattend que ces deux paires clé-valeur soient définies en temps réel. Définissez l’ID de partition à0et le nombre de partitions à2pour la configuration du SuperNode.
Terminal 2 Lancez le second SuperNode après avoir activé votre environnement :
$ flower-supernode \ --insecure \ --superlink 127.0.0.1:9092 \ --clientappio-api-address 127.0.0.1:9095 \ --node-config "partition-id=1 num-partitions=2"
Comprendre la commande
--clientappio-api-address 127.0.0.1:9095: Notez que un autre port est utilisé. Il n’est nécessaire que parce que vous exécutez deux SuperNodes sur la même machine. Généralement, vous exécutez une seule node par machine et donc, le--clientappio-api-addresspourrait être omis tout à fait et laisser son valeur par défaut.--node-config "partition-id=1 num-partitions=2": Notez ici que nous indiquons un ID de partition différent. De cette façon, unClientApputilisera une partition de données différente en fonction du SuperNode qui s’exécute.
Note
Pour activer TLS également pour l’API AppIo du SuperNode, veuillez consulter Connecting the SuperNodes with TLS.
Étape 3 : Exécutez une application Flower sur la fédération¶
Note
Le fichier de configuration Flower est automatiquement créé pour vous lorsque vous utilisez pour la première fois un commande Flower CLI. Utilisez flwr config list pour voir les connexions SuperLink disponibles ainsi que le chemin du fichier de configuration. En savoir plus à ce sujet dans le guide Configuration Flower.
À ce stade, vous avez lancé deux SuperNodes qui sont connectés au même SuperLink. Le système est en attente d’un Run pour être soumis. Avant de pouvoir exécuter votre application Flower via la fédération, nous avons besoin d’une façon de dire à flwr run que l’application doit être exécutée via le SuperLink que nous venons de démarrer. Faire cela est facile : définissez une nouvelle connexion SuperLink dans le fichier de configuration Flower, indiquez l’adresse du SuperLink et passez un certificat (si nécessaire) ou définissez la bannière non sécurisée (seulement lors des tests locaux, les déploiements réels nécessitent TLS).
Trouvez le fichier de configuration TOML Flower sur votre machine. Ce fichier est automatiquement créé pour vous lorsque vous utilisez pour la première fois un Flower CLI commande. Utilisez
flwr config listpour voir les connexions SuperLink disponibles ainsi que le chemin du fichier de configuration.$ flwr config list Flower Config file: /path/to/.flwr/config.toml SuperLink connections: supergrid local (default)
Ouvrez le fichier
config.tomlet ajoutez une nouvelle connexion SuperLink à la fin :config.toml¶[superlink.local-deployment] address = "127.0.0.1:9093" insecure = true
Note
Vous pouvez personnaliser la chaîne qui suit
[superlink.]pour vous convenir. Cependant, notez que la chaîne ne peut pas contenir un point (.).Dans cet exemple,
local-deploymenta été utilisé. N’oubliez simplement de remplacerlocal-deploymentpar votre nom choisi dans les deux chaînes[superlink.]et le commande correspondantflwr run ..Dans un autre terminal et avec votre environnement Python activé, exécutez l’application Flower et suivez les journaux
ServerApppour suivre l’exécution de l’exécution :$ flwr run . local-deployment --stream
Si vous voulez relancer le projet ou tester une version mise à jour en faisant des modifications au code, simplement ré-exécutez la commande ci-dessus.
Astuce
Vous pouvez configurer votre profil local-deployment en tant que défaut afin de ne pas avoir à spécifier explicitement ce dernier dans chaque commande CLI Flower qui nécessite une connexion avec le SuperLink. Pour cela et plus d’informations sur la configuration de Flower, veuillez consulter le guide the Flower Configuration.
Étape 4 : Nettoyage¶
Utilisez la commande Ctrl+C dans chaque terminal pour arrêter les processus correspondants.