Exécutez Flower sur Azure¶
Note
Il existe de nombreuses façons de déployer Flower sur Microsoft Azure. Les instructions fournies dans ce guide constituent juste une étape par étape pour configurer et exécuter rapidement une application Flower dans un environnement d’apprentissage fédéré sur Microsoft Azure.
Dans ce guide, nous voulons créer un environnement d’apprentissage fédéré sur Microsoft Azure à l’aide de trois Machines virtuelles (VM). De ces trois machines, une machine sera utilisée comme serveur de fédération et deux comme clients de fédération. Notre objectif est de créer une fédération Flower sur Microsoft Azure où nous pouvons exécuter des applications Flower depuis notre machine locale, par exemple, ordinateur portable.
Sur la machine virtuelle serveur de fédération nous allons déployer le serveur longue durée Flower (SuperLink) et sur les deux machines clientes de fédération nous allons déployer le client longue durée Flower (SuperNode). Pour plus de détails concernant les concepts SuperLink et SuperNode, veuillez consulter la page Flower Architecture .
Azure VMs¶
Tout d’abord, nous devons créer les trois VM et configurer leurs environnements Python ainsi que les règles de réseau entrantes pour permettre la communication entre les VM.
Création de la VM¶
En supposant que nous sommes déjà à l’intérieur du portail Microsoft Azure, nous naviguons vers la page Create et sélectionnez Azure virtual machine. Dans la nouvelle page, pour chaque machine virtuelle, on édite les propriétés comme suit :
Nom de la machine virtuelle |
pour la machine serveur on peut utiliser |
Image |
dans ce guide, nous utilisons |
Size |
Dans ce guide, nous utilisons |
Astuce
Pour le groupe de ressources, nous pouvons créer un nouveau groupe et l’attribuer à toutes les VM.
Lorsque chaque instance de VM a été créée, le portail vous permettra de télécharger la clé publique (.pem) de chaque instance. Assurez-vous de sauvegarder cette clé dans un endroit sûr et modifier ses permissions pour lecture seule par l’utilisateur, c’est-à-dire exécutez la commande chmod 400 <PATH_TO_PEM_FILE> pour chaque fichier .pem.
Une fois que les trois VMs ont été créées, naviguez vers la page de résumé où sont listés tous les trois VMs et ouvrez chaque autre VM, puis copiez son adresse IP publique. En utilisant l’adresse IP publique et la clé publique (après avoir modifié les permissions), connectez-vous aux instances à partir de votre machine locale en exécutant la commande suivante (par défaut, Azure crée le azureuser):
ssh -i <PATH_TO_PEM_FILE> azureuser@<PUBLIC_IP>
Réseau de la VM¶
Lors de l’exécution de l’application Flower, la VM serveur (SuperLink) sera responsable d’orchestrer l’exécution de l’application sur les VM clients (SuperNode). Lorsque le serveur SuperLink démarre, par défaut, il écoute les ports suivants : {9092, 9093}. Le port 9092 est utilisé pour communiquer avec les clients de la fédération (SuperNode) et le port 9093 pour recevoir et exécuter les applications Flower.
Par conséquent, afin d’autoriser cette communication, nous devons permettre le trafic entrant vers l’instance de VM serveur. Pour y parvenir, nous devons naviguer vers la page Réseau de la VM serveur dans le portail Microsoft Azure. Là, nous cliquerons sur le Add inbound port rule. Dans la nouvelle fenêtre qui s’affiche, nous modifierons les propriétés du règle comme suit:
Le reste des champs peut être laissé à leurs valeurs par défaut.
Source |
|
Adresses IP source/ranges CIDR |
Ajoutez les adresses IP publiques des clients (séparées par une virgule) |
Destination |
|
Service |
|
Plages de ports de destination |
|
Protocol |
|
Enfin, nous devons également ouvrir le port 9093 pour permettre la réception et l’exécution des demandes d’applications en provenance. Pour y parvenir, il suffit de répéter les étapes ci-dessus, c’est-à-dire créer un nouveau règle entrant, où nous affecterons le port 9093 à la plage de ports. Si nous savons déjà l’adresse IP publique à partir de laquelle notre machine locale (par exemple, ordinateur portable) soumettra des applications au cluster Azure, alors il suffit de spécifier l’adresse IP source/CIDR.
Pour être plus précis, si nous connaissons l’adresse IP publique de notre machine, alors nous effectuons les modifications suivantes :
Adresses IP source/ranges CIDR |
Ajoutez l’adresse IP publique de la machine |
Plages de ports de destination |
|
Sinon, nous modifions les propriétés comme suit :
Source |
|
Plages de ports de destination |
|
Environnement Flower¶
Supposons que nous ayons pu nous connecter à chaque VM et créer un environnement Python avec Flower et toutes ses dépendances installées (pip install flwr), nous pouvons créer une application Flower en exécutant la commande flwr new. La console nous demandera ensuite de donner un nom au projet, par exemple flwr_azure_test, le nom de l’auteur et sélectionner le type du cadre de travail Flower que nous voulons exécuter, par exemple numpy.
Note
Une approche alternative serait d’utiliser Docker dans chaque VM, avec chaque image contenant l’environnement et les dépendances nécessaires. Pour plus de détails, veuillez vous référer au guide Run Flower using Docker.
Initialisation du serveur¶
Après avoir configuré l’environnement d’application Flower, nous procédons en lançant les processus longue durée (Flower) à chaque instance de VM. En particulier, nous devons exécuter les commandes suivantes, d’abord sur le serveur (SuperLink) et ensuite sur chaque client (SuperNode).
Note
Pour activer l’authentification et la communication chiffrée pendant le cycle d’exécution de l’application Flower, veuillez jeter un coup d’œil sur les ressources suivantes : Authenticate Supernodes, Enable TLS Connections
# Server VM (SuperLink)
flower-superlink --insecure
# Client-1 VM (SuperNode-1)
flower-supernode \
--insecure \
--superlink="SUPERLINK_PUBLIC_IP:9092" # SuperLink public ip and port
# Client-2 VM (SuperNode-2)
flower-supernode \
--insecure \
--superlink="SUPERLINK_PUBLIC_IP:9092" # SuperLink public ip and port
Exécutez l’application Flower¶
Enfin, après avoir initialisé tous les processus Flower sur le cluster Microsoft Azure, dans notre machine locale, nous devons d’abord installer Flower et créer une application Flower.
# Install flower
pip install -U flwr
# This creates a basic Flower App using the numpy framework
flwr new @flwrlabs/quickstart-numpy
Ensuite, nous devons créer une nouvelle connexion SuperLink dans le fichier de configuration Flower :
Exécutez
flwr config listpour localiser le fichier de configuration Flower sur votre machine et afficher les connexions SuperLink disponibles.$ flwr config list Flower Config file: /path/to/.flwr/config.toml SuperLink connections: supergrid local (default)
Ouvrez le fichier de configuration Flower (
config.toml) et ajoutez une nouvelle connexion SuperLink à la fin:config.toml¶[superlink.my-federation] address = "SUPERLINK_PUBLIC_IP:9093" # Address of the SuperLink Control API insecure = true
Ensuite, depuis notre machine locale, nous devons exécuter flwr run . my-federation.
Prochaines étapes¶
Avertissement
Ce guide n’est pas adapté aux environnements de production en raison de la absence d’autentification et de sécurité TLS.
Pour activer l’autentification et établir des connexions sécurisées, veuillez consulter les ressources suivantes : Authenticate Supernodes, Enable TLS Connections