Communication réseau de Flower¶
Cette référence complète l’explication du Flower Architecture en détaillant les connexions réseau utilisées dans un système Flower d’IA collaborative déployé.
Note
Optionnellement, un troisième lien vers un service tiers peut être établi pour fournir une authentification utilisateur via OIDC. Cela signifie que seuls les utilisateurs authentifiés via flwr login peuvent interagir avec le contrôFlower.
Astuce
Cliquez sur les boutons ci-dessus pour basculer entre les diagrammes de réseau pour les modes d’isolement subprocess et process.
Connexions réseau obligatoires¶
Les systèmes Flower déployés ont au moins deux types de connexions réseau :
CLI vers SuperLink (Control API) : la commande CLI
flwr, généralement exécutée sur le poste de travail de l’utilisateur, sert à interagir avec une fédération Flower déployée composée de SuperLink et de SuperNodes. Du point de vue réseau, la CLIflwragit comme un client gRPC et SuperLink agit comme un serveur gRPC. La CLIflwrest le seul moyen pour un utilisateur (chercheur en IA ou data scientist) d’interagir avec une fédération Flower déployée. Il ne peut pas, par exemple, interagir directement avec les SuperNodes connectés au SuperLink. La connexion de la CLIflwrà SuperLink doit toujours utiliser TLS, mais le modeinsecureest pris en charge pour les tests locaux.SuperNode vers SuperLink (Fleet API) : dans la terminologie Flower, une fédération Flower est un ensemble de SuperNodes connectés au même SuperLink. Du point de vue réseau, chaque SuperNode agit comme un client gRPC et SuperLink agit comme un serveur gRPC. Cela signifie que, lors du déploiement d’un SuperNode, seules des connexions sortantes sont nécessaires pour se connecter au SuperLink. Seuls les SuperNodes peuvent initier ces requêtes et ils ne répondent pas aux requêtes entrantes. La connexion de SuperNode à SuperLink doit toujours utiliser TLS (consultez Activer les connexions TLS pour en savoir plus), mais le mode
insecureest pris en charge pour les tests locaux.
Connexions réseau facultatives¶
En fonction de la configuration SuperLink et SuperNode, les systèmes Flower peuvent avoir/employer un certain nombre supplémentaire de connexions réseau.
API des composants Flower¶
Tous les composants Flower — SuperLink, SuperNode, SuperExec, ServerApp processus et ClientApp processus — exposent des APIs pour interagir avec d’autres composants Flower. Le composant SuperLink comprend trois telles APIs : l’API ServerAppIo, l’API Fleet et l’API Control. De même, le composant SuperNode comprend l’API ClientAppIo. Chaque de ces APIs sert un but distinct lors du lancement d’une application Flower en utilisant la Deployment Runtime, comme résumé dans le tableau ci-dessous.
Component |
Port par défaut |
API |
Purpose |
|---|---|---|---|
SuperLink |
9091 |
API ServerAppIo |
Utilisé par les processus SuperExec et les processus |
9092 |
Fleet API |
Utilisé par les SuperNodes |
|
9093 |
Contrôle API |
L’utilisateur interagit avec le SuperLink via cette API en utilisant le FlowerCLI |
|
SuperNode |
9094 |
API ClientAppIo |
Utilisé par les processus SuperExec et |
Note
Les APIs AppIo imposent la compatibilité de version d’exécution entre le serveur API et ses appelants. Par défaut, les requêtes provenant des appelants utilisant une version majeure mineure incompatibles sont rejetées avant que la communication AppIo ne se poursuive. Les appelants plus anciens sans métadonnées d’exécution sont actuellement acceptés par cette vérification de compatibilité pour des raisons de compatibilité ascendante. Gardez les composants d’exécution SuperLink, SuperNode, SuperExec, ServerApp et ClientApp sur des versions Flower compatibles.
Mode d’isolement¶
Les deux processus SuperLink et SuperNode peuvent fonctionner dans différents modes d’isolement. Le SuperExec est responsable de la planification, du lancement et de la gestion des processus d’applications, tels que le processus ServerApp et le processus ClientApp.
La configuration de mode d’isolement subprocess configure le SuperLink/SuperNode pour lancer automatiquement le SuperExec en tant que processus subprocessuel à l’exécution. Le mode d’isolement process, par contraste, s’attend à ce que le SuperExec fonctionne dans un processus externe géré séparément, de sorte que le SuperLink/SuperNode ne lancera pas automatiquement un tel processus. Cela permet, par exemple, d’exécuter les SuperLink/SuperNode et SuperExec dans des conteneurs Docker distincts avec des ensembles de dépendances différents, ou d’y exécuter sur différents serveurs au sein du même réseau. Consultez le guide Exécuter Flower à l’aide de Docker pour une compréhension plus approfondie de la façon dont utiliser les deux modes.
Lorsque vous utilisez le mode d’isolement process, des connexions réseau supplémentaires sont nécessaires pour permettre au processus externe exécutant le SuperExec, ServerApp ou ClientApp de communiquer avec le SuperLink ou SuperNode:
SuperExec/ServerApp process to SuperLink (ServerAppIO API) : Les deux processus SuperExec pour
ServerApps et les processusServerAppagissent comme clients gRPC et se connectent à l’API ServerAppIO du SuperLink. Cette connexion permet au SuperExec de découvrir des exécutions à lancer et aux processusServerAppde récupérer les entrées nécessaires pour exécuter leServerApp. Cela permet également aux processusServerApp, une fois en cours d’exécution, de faire des choses typiques comme envoyer/recevoir des messages vers/à partir des SuperNodes disponibles (via le SuperLink).SuperExec/ClientApp process to SuperNode (ClientAppIO API) : Les deux processus SuperExec pour
ClientApps et les processusClientAppagissent comme clients gRPC et se connectent à l’API ClientAppIO du SuperNode. Cette connexion permet au SuperExec de découvrir des exécutions à lancer et aux processusClientAppde récupérer les détails nécessaires (par exemple, fichier FAB) pour exécuter leClientApp, exécuter leClientApp(par exemple, entraînement local du modèle), et renvoyer les résultats d’exécution (par exemple, mise à jour locale des paramètres de modèle) au SuperNode.
Note
Les liens AppIo ci-dessus peuvent fonctionner avec une communication en clair ou avec un TLS authentifié par le serveur. Sans les options --appio-ssl-*, ces liens restent non chiffrés et devraient rester à l’intérieur d’un réseau de confiance:
Processus SuperLink + SuperExec +
ServerAppProcessus SuperNode + SuperExec +
ClientApp
Pour sécuriser ces liens, configurez les serveurs ServerAppIo et ClientAppIo API avec --appio-ssl-certfile, --appio-ssl-keyfile, et --appio-ssl-ca-certfile. Les clients AppIo vérifient les certificats de serveur avec --root-certificates. Dans le mode d’isolement subprocess, le SuperLink et SuperNode passent la voie CA au processus SuperExec qu’ils lancent. Cela n’est pas mTLS. Consultez Activer les connexions TLS pour des commandes concretes.
Avertissement
Lorsqu’il est lancé sans TLS, chaque groupe doit rester dans un réseau de confiance unique. Ils ne devraient jamais communiquer entre eux sur des réseaux non fiables (par exemple, Internet public).
Authentification de compte¶
Lorsque l’authentification de compte est activée, Flower utilise un serveur compatible OIDC pour authentifier les requêtes :
SuperLink vers le serveur OIDC : Un SuperLink peut être configuré pour ne permettre que des utilisateurs authentifiés d’y interagir. Dans ce cas, le SuperLink Flower agit comme client REST vers le serveur OIDC compatible.
Connexions spécifiques à l’application¶
Les utilisateurs qui créent des applications Flower (ServerApp et ClientApp) peuvent également effectuer des requêtes réseau supplémentaires. Cela ne fait pas partie intégrante de la plateforme d’intelligence artificielle fédérée, Flower, en tant que décision (a) du utilisateur sur les types de systèmes tiers auxquels leur application Flower doit se connecter et (b) de l’administrateur système sur les types de connexions qu’ils souhaitent autoriser.
Exemples typiques incluent :
ClientApp vers la base de données : Les instances
ClientAppont généralement besoin d’accéder aux données pour effectuer l’action pour laquelle elles ont été conçues (par exemple, entraîner localement un modèle, exécuter une requête DB). La manière dont cette connexion est établie dépend de la technologie de stockage utilisée côté client. Notez que dans le diagramme ci-dessus, nous montrons deux représentations de connexions à des bases de données sur les clients A et B. Votre(s) connexion(s) vers la base de données peut(ont) probablement différer de l’illustration ci-dessus.ServerApp vers la base de données : Les instances
ServerApppeuvent souhaiter accéder aux données pour effectuer l’action pour laquelle elles ont été conçues (par exemple, évaluer un modèle sur des données après agrégation). La manière dont cette connexion est établie dépend de la technologie de stockage utilisée côté client. Notez que dans le diagramme ci-dessus, nous avons omis de montrer une base de données connectée aux composantsServerApp.ServerApp vers le service de journalisation de métrique : Les services de journalisation de métrique tels que TensorBoard, MLFlow et Weights & Biases sont souvent utilisés pour suivre les progrès des exécutions d’entraînement. Dans ce cas, le
ServerAppagit généralement comme client vers le service de journalisation de métrique.
Modèle de communication¶
Lors du déploiement réel, le modèle de communication push/pull adopté par chaque composant peut influencer les décisions relatives à la provisionnement des ressources, l’échelle, le suivi et la fiabilité. Pour soutenir ces décisions, la liste ci-dessous détaille le modèle de communication utilisé entre les composants Flower :
SuperLink ⇌ SuperNode (Fleet API) : Le SuperNode récupère/pousse des Messages vers/à partir du SuperLink via l’API Fleet. Le SuperNode récupère également le FAB si une nouvelle exécution est en cours.
SuperLink ⇌ ServerApp (ServerAppIo API) : Les processus
ServerApprécupèrent/poussent des Messages vers/à partir du SuperLink via l’API ServerAppIO. Les processusServerApprécupèrent également le FAB lors de la première interaction avec le SuperLink, et à la fin de l’exécution ils poussent le Context vers le SuperLink.SuperNode ⇌ ClientApp (ClientAppIo API) : Les processus
ClientApprécupèrent/poussent des Messages vers/à partir du SuperNode via l’API ClientAppIO. Les processusClientApprécupèrent également le FAB lors de la première interaction avec le SuperNode, et à la fin de l’exécution ils poussent le Context vers le SuperNode.