Module¶
Module
définit une tâche dans un Swarm et sert comme bloc de construction pour des algorithmes décentralisés. Chaque module représente une tâche individuelle qui opère indépendamment, réalise des calculs basés sur les données locales des noeuds et contribue au processus général du Swarm. Les modules sont exécutés dans des environnements container, permettant d’isoler, de reproduire et de mettre à l’échelle des déploiements sur des appareils hétérogènes.
Fonctionnalités coeurs d’un Module¶
Exécution dans des containers: Chaque module spécifie des images de container (e.g., Docker) qui encapsule l’environnement des tâches, assurant la consistance à travers différents nodes.
Indépendance de tâches: Les modules opérent sans dépendances entre les autre modules à l’exception pour définir des chemins d’échanges de données
Création d’un Module¶
Pour définir un module, vous devez créer une instance de la classe Module
, spécifier le script ou l’ensemble des script qui forment la tâche, l’environnement isolé, et les paramètres d’exécution. Ci-dessous est un exemple pour définir un Module:
from manta.module import Module
from pathlib import Path
# Define a Worker Module
worker_module = Module(
Path("modules/worker.py"), # Path to the script defining the task
"fl-pytorch-mnist:latest", # Container image for task execution
maximum=4, # Maximum number of instances allowed
alias="worker", # Alias for referencing the module in the Swarm
method="any" # Execution method (e.g., any, all)
)
Les modules consitue le squelette d’un Swarm, permettant la décomposition d’algorithmes complexes en un ensemble de tâches gérables, réutilisables et scalables qui penvent être distribuées à travers un réseau de noeuds.
Note
La tâche (ici modules/worker.py
) pourrait aussi être un chemin vers un dossier qui contient au moins un fichier __init__.py
et la fonction def main():
dedans.
Paramètres clés¶
Path: Il spécifie la localisation des script(s) définis dans une tâche.
Image container: Les images docker peuvent encapsuler les environnements des tâches.
Maximum: Le nombre maximum de noeuds sur lequel lancer ce module.
Alias: Un surnom pour identifier le module dans un Swarm.
Méthode: La méthode d’exécution pour définir comme un module est planifié (e.g., une exécution seule ou des exécutions concurrentes)
Connexions entre les modules¶
Les modules peuvent être connectés afin de former un graphe. Par exemple, vous pouvez connecter deux modules pour en former un unique.
class FLSwarm(Swarm):
def __init__(self):
super().__init__()
self.m1 = Module(...)
self.m2 = Module(...)
self.m3 = Module(...)
def execute(self):
m1 = self.m1()
m2 = self.m2()
m3 = self.m3([m1, m2])
return m3
Aussi, vous pouvez faire l’inverse, c’est-à-dire connecter un module à plusieurs.
class FLSwarm(Swarm):
def __init__(self):
super().__init__()
self.m3 = Module(...)
self.m4 = Module(...)
self.m5 = Module(...)
def execute(self):
m3 = self.m3()
m4 = self.m4(m3)
m5 = self.m5(m3)
return [m4, m5]
Note
Un swarm peut avoir plusieurs modules à la fin d’une itération. Vous devez retourner une liste de modules pour cela.
Note
Pour plus de détails sur l’implémentation d’un module, veuillez vous réferer à la documentation Module
.