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 flower-server et pour les clients, flower-client-1 et flower-client-2

Image

dans ce guide, nous utilisons Ubuntu Server 24.04 - x64 Gen2 LTS

Size

Dans ce guide, nous utilisons Standard_D2s_v3 - 2 vcpus, 8GiB memory

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

IP Addresses

Adresses IP source/ranges CIDR

Ajoutez les adresses IP publiques des clients (séparées par une virgule)

Destination

Any

Service

custom

Plages de ports de destination

9092

Protocol

TCP

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

9093

Sinon, nous modifions les propriétés comme suit :

Source

Any

Plages de ports de destination

9093

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 :

  1. Exécutez flwr config list pour 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)
    
  2. 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