Déployer Flower sur Plusieurs Machines avec Docker Compose

Ce guide vous aidera à mettre en place un projet Flower sur plusieurs machines à l’aide de Docker Compose.

Vous apprendrez comment exécuter les composants client et serveur de Flower sur deux machines séparées, avec Flower configuré pour utiliser l’encryption TLS et persister l’état SuperLink à la réinitialisation. Un serveur se compose d’un SuperLink et d’un ServerApp. Pour plus de détails sur l’architecture Flower, consultez la page expliquant Flower Architecture (architecture de Flower).

Ce guide suppose que vous avez terminé le Démarrer rapidement avec Docker Compose tutoriel. Il est fortement recommandé que vous suiviez et compreniez les contenus de ce tutoriel avant de poursuivre avec ce guide.

Prérequis

Avant de commencer, assurez-vous que vous avez les pré-requis suivants :

  • Le flwr CLI est installed localement.

  • Le daemon Docker est en cours d’exécution sur votre machine locale et la machine distante.

  • Docker Compose V2 est installé à la fois sur votre machine locale et la machine distante.

  • Vous pouvez vous connecter à la machine distante depuis votre machine locale.

  • Les ports 9091 et 9093 sont accessibles sur la machine distante.

Note

Le guide utilise l”examples/quickstart-sklearn exemple comme projet d’exemple.

Si votre projet a un nom ou une localisation différents, veuillez vous rappeler de modifier les commandes/chemins en conséquence.

Étape 1 : Configuration

  1. Cloner le référentiel Flower et changer dans le répertoire distributed:

    $ git clone --depth=1 --branch v1.31.0 https://github.com/flwrlabs/flower.git
    $ cd flower/framework/docker/distributed
    
  2. Obtenir l’adresse IP de la machine distante et la sauvegarder pour plus tard.

  3. Utilisez le fichier Compose certs.yml pour générer vos propres certificats signés par vous-même. Si vous avez des certificats, vous pouvez continuer avec l’étape 2.

    Important

    Utilisez ces certificats uniquement à des fins de développement.

    Pour les environnements de production, vous devrez peut-être utiliser des services dédiés pour obtenir vos certificats.

    Tout d’abord, définissez la variable d’environnement SUPERLINK_IP avec l’adresse IP de la machine distante. Par exemple, si l’IP est 192.168.2.33, exécutez :

    $ export SUPERLINK_IP=192.168.2.33
    

    Générez ensuite les certificats auto-signés :

    $ docker compose -f certs.yml -f ../complete/certs.yml run --rm --build gen-certs
    

Étape 2 : Copiez les fichiers Compose du Serveur

Utilisez la méthode qui vous convient le mieux pour copier le répertoire server, les certificats et le fichier pyproject.toml de votre projet Flower sur la machine distante.

Par exemple, vous pouvez utiliser scp pour copier les répertoires :

$ scp -r ./server \
       ./superlink-certificates \
       ../../../examples/quickstart-sklearn/pyproject.toml remote:~/distributed

Étape 3 : Démarrer les composants de serveur Flower

Se connecter à la machine distante en utilisant ssh et exécuter la commande suivante pour démarrer les services SuperLink et ServerApp:

1 $ ssh <your-remote-machine>
2 # In your remote machine
3 $ cd <path-to-``distributed``-directory>
4 $ export PROJECT_DIR=../
5 $ docker compose -f server/compose.yml up --build -d

Note

Le chemin vers le conteneur PROJECT_DIR contenant le fichier pyproject.toml doit être relatif par rapport à l’emplacement du fichier serveur compose.yml.

Note

Lorsque vous travaillez avec Compose sur Linux, il peut être nécessaire de créer d’abord le répertoire state et de changer sa propriété pour s’assurer d’un accès et des permissions corrects. Après avoir exporté la variable PROJECT_DIR (après ligne 4), exécutez les commandes suivantes :

$ mkdir server/state
$ sudo chown -R 49999:49999 server/state

Pour plus d’informations, consultez la page suivante : Conservation de l’État du SuperLink.

Retournez à votre terminal sur votre machine locale.

Étape 4 : Démarrer les composants client Flower

Sur votre machine locale, exécutez la commande suivante pour démarrer les composants clients :

# In the `docker/distributed` directory
$ export PROJECT_DIR=../../../../examples/quickstart-sklearn
$ docker compose -f client/compose.yml up --build -d

Note

La voie vers le répertoire contenant le fichier PROJECT_DIR doit être relative à l’emplacement du fichier client pyproject.toml.

Étape 5 : Exécuter votre projet Flower

Spécifiez les adresses IP distantes et la voie vers le certificat racine dans un nouveau Flower de connexion dans votre fichier de configuration flwr config list. La façon la plus simple pour localiser ce fichier est par le biais de __PH4__:

$ flwr config list

Flower Config file: /path/to/.flwr/config.toml
SuperLink connections:
supergrid
local (default)

Avec le fichier situé dans votre système, éditez-le et ajoutez une nouvelle connexion nommée remote-deployment:

config.toml
[superlink.remote-deployment]
address = "192.168.2.33:9093"
root-certificates = "/absolute/path/to/superlink-certificates/ca.crt"

Exécutez le projet et suivez les ServerApp journaux :

$ cd flower/examples/quickstart-sklearn
$ flwr run ../../../examples/quickstart-sklearn remote-deployment --stream

C’est tout ! Avec ces étapes, vous avez mis en place Flower sur deux machines séparées et êtes prêt à commencer à l’utiliser.

Étape 6 : Nettoyage

Arrêtez les composants client Flower :

# In the `docker/distributed` directory
$ docker compose -f client/compose.yml down

Arrêtez les composants de serveur Flower et supprimez l’état SuperLink :

$ ssh <your-remote-machine>
$ cd <path-to-``distributed``-directory>
$ docker compose -f server/compose.yml down -v