Passer au contenu principal
PyTorch Lightning fournit un wrapper léger pour organiser votre code PyTorch et ajouter des fonctionnalités avancées telles que l’entraînement distribué et la précision en 16 bits. W&B fournit un wrapper léger pour consigner vos expériences de ML. Vous n’avez pas besoin de combiner les deux vous-même : la bibliothèque PyTorch Lightning inclut directement W&B via le WandbLogger. Cette page explique comment utiliser WandbLogger pour suivre les métriques, consigner les hyperparamètres, enregistrer des points de contrôle du modèle comme artifacts, consigner des médias et exécuter un entraînement multi-GPU avec PyTorch Lightning et W&B.

Intégrer Lightning

Les sections suivantes montrent comment vous authentifier auprès de W&B, installer la bibliothèque wandb et joindre un WandbLogger à votre instance Lightning Trainer ou Fabric.
Utilisation de wandb.log() : Le WandbLogger envoie les journaux vers W&B en utilisant le global_step du Trainer. Si vous effectuez des appels supplémentaires à wandb.log() directement dans votre code, n’utilisez pas l’argument step dans wandb.log().À la place, journalisez le global_step du Trainer comme vos autres métriques :
Tableaux de bord interactifs

Inscrivez-vous et créez une clé API

Une clé API permet d’authentifier votre machine auprès de W&B. Vous pouvez générer une clé API depuis votre profil.
Pour une méthode plus directe, accédez aux Paramètres utilisateur et créez une clé API. Copiez immédiatement la clé API et conservez-la dans un endroit sûr, par exemple dans un gestionnaire de mots de passe.
Pour générer une clé API depuis votre profil :
  1. Cliquez sur l’icône de votre profil en haut à droite.
  2. Sélectionnez Paramètres utilisateur, puis faites défiler jusqu’à la section Clés API.

Installez la bibliothèque wandb et connectez-vous

Pour installer la bibliothèque wandb localement et vous connecter :
  1. Définissez la variable d’environnement WANDB_API_KEY sur votre clé API. Remplacez les valeurs entre <> par les vôtres :
  2. Installez la bibliothèque wandb et connectez-vous.

Utiliser le WandbLogger de PyTorch Lightning

PyTorch Lightning propose plusieurs classes WandbLogger pour consigner des métriques, ainsi que les poids du modèle et des médias. Choisissez la classe qui correspond à votre configuration d’entraînement : Pour l’utiliser avec Lightning, instanciez WandbLogger, puis transmettez-le à Trainer ou à Fabric de Lightning.

Arguments courants du logger

Le tableau suivant répertorie les paramètres courants de WandbLogger. Consultez la documentation de PyTorch Lightning pour en savoir plus sur tous les arguments du logger.

Journalisez vos hyperparamètres

La journalisation des hyperparamètres avec W&B vous permet de comparer les runs et de reproduire les résultats. Utilisez la méthode correspondante à votre logger :

Journaliser des paramètres de configuration supplémentaires

Pour capturer des valeurs de configuration supplémentaires en plus de vos hyperparamètres, mettez directement à jour la configuration du run :

Journaliser les gradients, l’histogramme des paramètres et la topologie du modèle

Passez l’objet de votre modèle à wandb_logger.watch() pour surveiller les gradients et les paramètres de votre modèle pendant l’entraînement. Voir la documentation de WandbLogger pour PyTorch Lightning.

Journaliser des métriques

Pour journaliser vos métriques dans W&B lorsque vous utilisez WandbLogger, appelez self.log('my_metric_name', metric_value) dans votre LightningModule, par exemple dans les méthodes training_step ou validation_step.L’extrait de code suivant montre comment définir votre LightningModule pour journaliser vos métriques ainsi que les hyperparamètres de votre LightningModule. Cet exemple utilise la bibliothèque torchmetrics pour calculer vos métriques.

Journaliser les valeurs min/max d’une métrique

Avec la fonction define_metric de W&B, vous pouvez définir si votre métrique de synthèse W&B affiche la valeur minimale, maximale, moyenne ou la meilleure valeur pour cette métrique. Si define_metric n’est pas utilisé, la dernière valeur enregistrée apparaît dans vos métriques de synthèse. Pour plus d’informations, voir le guide de personnalisation des axes de journalisation. Pour suivre la précision de validation maximale dans la métrique de synthèse W&B, appelez wandb.define_metric() une seule fois, au début de l’entraînement :

Créer un point de contrôle du modèle

L’enregistrement de points de contrôle du modèle en tant qu’artifacts W&B vous fournit des fichiers de modèle versionnés que vous pourrez récupérer ultérieurement par run, alias ou version. Pour enregistrer des points de contrôle du modèle en tant qu’Artifacts W&B Artifacts, utilisez le callback Lightning ModelCheckpoint et définissez l’argument log_model dans WandbLogger.
Les alias latest et best sont définis automatiquement pour vous permettre de récupérer facilement un point de contrôle du modèle depuis un artifact W&B :
Les points de contrôle du modèle que vous journalisez sont visibles dans l’UI W&B Artifacts et incluent la traçabilité complète du modèle (voir un exemple de point de contrôle du modèle dans l’UI). Pour mettre vos meilleurs points de contrôle du modèle en favoris et les centraliser pour votre équipe, liez-les au registre de modèles W&B. Dans le registre, vous pouvez organiser vos meilleurs modèles par tâche, gérer le cycle de vie des modèles, faciliter leur suivi et leur audit tout au long du cycle de vie du ML, et automatiser les actions en aval avec des webhooks ou des jobs.

Journaliser des images, du texte et plus encore

Le WandbLogger fournit les méthodes log_image, log_text et log_table pour la journalisation de médias. Vous pouvez aussi appeler directement wandb.log() ou trainer.logger.experiment.log() pour journaliser d’autres types de médias, comme Audio, des molécules, des nuages de points et des objets 3D.
Utilisez le système de callbacks de Lightning pour contrôler quand vous journalisez vers W&B via le WandbLogger. L’exemple suivant journalise un échantillon d’images de validation et de prédictions :

Utiliser plusieurs GPU avec Lightning et W&B

Lorsque vous exécutez un entraînement distribué, la manière dont vous référencez wandb.run d’un rang à l’autre peut déterminer si l’entraînement se poursuit ou s’il entre en interblocage. Cette section explique les exigences et présente un modèle recommandé. PyTorch Lightning prend en charge le multi-GPU via son interface DDP. Cependant, la conception de PyTorch Lightning exige que vous fassiez attention à la façon dont vous instanciez vos GPU. Lightning exige que chaque GPU (ou rang) dans votre boucle d’entraînement soit instancié exactement de la même manière, avec les mêmes conditions initiales. Cependant, seul le processus de rang 0 a accès à l’objet wandb.run. Pour les processus de rang non nul, wandb.run = None. Cela peut faire échouer vos processus non nuls. Une telle situation peut vous placer dans un interblocage, car le processus de rang 0 attend que les processus de rang non nul le rejoignent, alors qu’ils ont déjà planté. Pour cette raison, faites attention à la façon dont vous configurez votre code d’entraînement. La méthode recommandée consiste à rendre votre code indépendant de l’objet wandb.run.

Exemples

Pour un guide pas à pas complet, vous pouvez suivre ce tutoriel dans une vidéo avec un notebook Colab.

Foire aux questions

Comment W&B s’intègre-t-il à Lightning ?

L’intégration principale s’appuie sur l’API Lightning loggers, qui vous permet d’écrire une grande partie de votre code de journalisation de manière indépendante du framework. Les instances de Logger sont transmises au Lightning Trainer et sont déclenchées par le riche système de hooks et de callbacks de cette API. Cela permet de bien séparer votre code de recherche du code d’ingénierie et de journalisation.

Que l’intégration enregistre-t-elle sans code supplémentaire ?

W&B enregistre vos points de contrôle du modèle, que vous pouvez consulter ou télécharger pour les utiliser dans de futures exécutions. W&B capture également les métriques système, comme l’utilisation du GPU et les E/S réseau. Il capture des informations sur l’environnement, telles que les informations sur le matériel et le système d’exploitation. Il capture l’état du code, y compris le commit Git et le patch de diff, le contenu du notebook et l’historique de session. Il capture également tout ce qui est affiché sur la sortie standard.

Que faire si j’ai besoin d’utiliser wandb.run dans ma configuration d’entraînement ?

Vous devez vous-même élargir la portée de la variable à laquelle vous souhaitez accéder. En d’autres termes, veillez à ce que les conditions initiales soient identiques dans tous les processus.
Si c’est le cas, vous pouvez utiliser os.environ["WANDB_DIR"] pour configurer le répertoire des points de contrôle du modèle. Ainsi, tout processus de rang non nul peut accéder à wandb.run.dir.