- Suivre un seul processus : suivez avec W&B le processus de rank 0 (également appelé « leader » ou « coordinateur »). Il s’agit d’une solution courante pour journaliser des expériences d’entraînement distribué avec la classe PyTorch Distributed Data Parallel (DDP).
- Suivre plusieurs processus : pour plusieurs processus, vous pouvez :
- Suivre chaque processus séparément, avec un run par processus. Vous pouvez éventuellement les regrouper dans l’interface de l’application W&B.
- Suivre tous les processus dans un seul run.
Suivre un seul processus
Cette section explique comment suivre les valeurs et les métriques accessibles à votre processus de rank 0. Utilisez cette approche pour suivre uniquement les métriques disponibles depuis un seul processus. Il s’agit généralement de l’utilisation du GPU/CPU, du comportement sur un jeu de validation partagé, des gradients et des paramètres, ainsi que des valeurs de perte sur des exemples de données représentatifs. Dans le processus de rank 0, initialisez un run W&B avecwandb.init() et journalisez les expériences (wandb.Run.log()) dans ce run.
L’exemple de script Python (log-ddp.py) suivant illustre une manière de suivre des métriques sur deux GPU d’une même machine avec PyTorch DDP. PyTorch DDP (DistributedDataParallel danstorch.nn) est une bibliothèque couramment utilisée pour l’entraînement distribué. Les principes de base s’appliquent à toute configuration d’entraînement distribué, mais l’implémentation peut varier.
Le script Python :
- Démarre plusieurs processus avec
torch.distributed.launch. - Vérifie le rank à l’aide de l’argument de ligne de commande
--local_rank. - Si le rank vaut 0, configure de manière conditionnelle la journalisation
wandbdans la fonctiontrain().


Suivre plusieurs processus
Pour suivre plusieurs processus avec W&B, adoptez l’une des approches suivantes :- Suivre chaque processus séparément en créant un run par processus.
- Suivre tous les processus dans un seul run.
Suivre chaque processus séparément
Cette section explique comment suivre chaque processus séparément en créant un run par processus. Dans chaque run, vous journalisez les métriques, les artifacts, etc., qui lui sont propres. Appelezwandb.Run.finish() à la fin de l’entraînement pour indiquer que le run est terminé et que tous les processus se ferment correctement.
Il peut être difficile de suivre les runs répartis sur plusieurs expériences. Pour y remédier, fournissez une valeur au paramètre group lorsque vous initialisez W&B (wandb.init(group='group-name')) afin de savoir à quelle expérience appartient chaque run. Pour en savoir plus sur le suivi des runs W&B d’entraînement et d’évaluation au sein des expériences, consultez Regrouper des runs.
Utilisez cette approche si vous souhaitez suivre les métriques de chaque processus. Il s’agit généralement des données et des prédictions de chaque nœud (pour déboguer la distribution des données) et des métriques de lots individuels en dehors du nœud principal. Cette approche n’est pas nécessaire pour obtenir les métriques système de tous les nœuds, ni les statistiques de synthèse disponibles sur le nœud principal.

Organiser les runs distribués
Définissez le paramètrejob_type lors de l’initialisation de W&B (wandb.init(job_type='type-name')) pour classer vos nœuds selon leur fonction. Par exemple, vous pouvez disposer d’un nœud principal chargé de la coordination et de plusieurs nœuds de calcul qui remontent des données. Vous pouvez alors définir job_type sur main pour le nœud principal de coordination et sur worker pour les nœuds de calcul :
job_type défini pour vos nœuds, vous pouvez créer des vues enregistrées dans votre workspace pour organiser vos runs. Cliquez sur le menu action () en haut à droite, puis sur Save as new view.
Par exemple, vous pouvez créer les vues enregistrées suivantes :
- Vue par défaut : exclure les nœuds de calcul pour réduire le bruit
-
Cliquez sur Filter, puis définissez Job Type sur
worker. - Affiche uniquement vos nœuds de reporting
-
Vue Debug : cibler les nœuds de calcul pour le dépannage
- Cliquez sur Filter, puis définissez Job Type
==workeret State surINcrashed. - Affiche uniquement les nœuds de calcul qui ont planté ou qui sont en état d’erreur
- Cliquez sur Filter, puis définissez Job Type
-
Vue de tous les nœuds : tout afficher en même temps
- Aucun filtre
- Utile pour une supervision globale
-
Cliquez sur Filter, puis définissez Job Type sur
Suivre tous les processus dans un seul run
ExigencesPour suivre plusieurs processus dans un seul run, vous devez disposer des éléments suivants :
-
SDK Python W&B version
v0.19.9ou ultérieure. - serveur W&B v0.68 ou ultérieur.
wandb.init(). Passez au paramètre settings un objet wandb.Settings (wandb.init(settings=wandb.Settings()) comportant les éléments suivants :
- Le paramètre
modedéfini sur"shared"pour activer le mode partagé. - Un libellé unique pour
x_label. La valeur que vous indiquez pourx_labelvous permet d’identifier le nœud d’où proviennent les données dans les journaux et les métriques système de l’interface de l’application W&B. Si vous ne l’indiquez pas, W&B génère un libellé à partir du nom d’hôte et d’un hachage aléatoire. - Définissez le paramètre
x_primarysurTruepour indiquer qu’il s’agit du nœud principal. - Vous pouvez également fournir une liste d’index de GPU ([0,1,2]) à
x_stats_gpu_device_idspour indiquer les GPU dont W&B doit suivre les métriques. Si vous ne fournissez pas de liste, W&B suit les métriques de tous les GPU de la machine.
WANDB_RUN_ID sur l’ID de run généré avant le démarrage de chaque processus. W&B lit automatiquement WANDB_RUN_ID lorsque le processus appelle wandb.init().
x_primary=True distingue un nœud principal des nœuds de calcul. Seuls les nœuds principaux téléversent les fichiers partagés entre les nœuds, tels que les fichiers de configuration, la télémétrie, etc. Les nœuds de calcul ne téléversent pas ces fichiers.wandb.init() et fournissez les éléments suivants :
- Un objet
wandb.Settingspassé au paramètresettings(wandb.init(settings=wandb.Settings()) comportant :- Le paramètre
modedéfini sur"shared"pour activer le mode partagé. - Un libellé unique pour
x_label. La valeur que vous indiquez pourx_labelvous permet d’identifier le nœud d’où proviennent les données dans les journaux et les métriques système de l’interface de l’application W&B. Si vous ne l’indiquez pas, W&B génère un libellé à partir du nom d’hôte et d’un hachage aléatoire. - Définissez le paramètre
x_primarysurFalsepour indiquer qu’il s’agit d’un nœud de calcul.
- Le paramètre
- Avant le démarrage du processus de calcul, définissez
WANDB_RUN_IDsur l’ID de run généré utilisé par le nœud principal. - Vous pouvez également définir
x_update_finish_statesurFalse. Cela empêche les nœuds secondaires de faire passer prématurément l’état du run àfinished, de sorte que l’état du run reste cohérent et géré par le nœud principal.
WANDB_RUN_ID.
L’exemple suivant initialise le run sur le nœud principal :
Consultez le rapport Distributed Training with Shared Mode pour un exemple complet montrant comment entraîner un modèle sur un cluster Kubernetes multinœud et multi-GPU dans GKE.
- Accédez au projet qui contient le run.
- Cliquez sur l’onglet Runs dans la barre latérale du projet.
- Cliquez sur le run que vous souhaitez afficher.
- Cliquez sur l’onglet Logs dans la barre latérale du projet.
x_label, à l’aide de la barre de recherche située en haut de la page des journaux de console. Par exemple, l’image suivante montre les options de filtrage disponibles si les valeurs rank0, rank1, rank2, rank3, rank4, rank5 et rank6 sont fournies à x_label.`

rank_0, rank_1, rank_2) que vous spécifiez dans le paramètre x_label.

Exemples de cas d’utilisation
Les extraits de code suivants illustrent des scénarios courants d’utilisation distribuée avancée.Processus lancé avec spawn
Utilisez la méthodewandb.setup()dans votre fonction principale si vous démarrez un run dans un processus créé avec spawn :
Partager un run
Pour partager des runs entre plusieurs processus, passez un objet run en argument :Dépannage
Deux problèmes courants peuvent survenir lorsque vous utilisez W&B avec l’entraînement distribué :- Blocage au début de l’entraînement - Un processus
wandbpeut se bloquer si le multiprocessing dewandbinterfère avec celui de l’entraînement distribué. - Blocage à la fin de l’entraînement - Une tâche d’entraînement peut se bloquer si le processus
wandbne sait pas à quel moment se terminer. Appelez l’APIwandb.Run.finish()à la fin de votre script Python pour indiquer à W&B que le run est terminé. L’APIwandb.Run.finish()achève le téléversement des données et entraîne l’arrêt de W&B. W&B recommande d’utiliser la commandewandb servicepour améliorer la fiabilité de vos jobs distribués. Ces deux problèmes d’entraînement se rencontrent fréquemment dans les versions du SDK W&B où wandb service n’est pas disponible.
Activer le service W&B
Selon la version du SDK W&B que vous utilisez, le service W&B est peut-être déjà activé par défaut.SDK W&B 0.13.0 et versions ultérieures
Le service W&B est activé par défaut à partir de la version0.13.0 du SDK W&B.
SDK W&B 0.12.5 et versions ultérieures
Modifiez votre script Python pour activer le service W&B avec le SDK W&B 0.12.5 ou version ultérieure. Utilisez la méthodewandb.require() en lui passant la chaîne "service" dans votre fonction principale :
WANDB_START_METHOD sur "thread" afin d’utiliser le multithreading.