Passer au contenu principal
PyTorch Lightning fournit un wrapper léger pour organiser votre code PyTorch et ajouter facilement 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. Mais vous n’avez pas besoin de combiner les deux vous-même : W&B est directement intégré à la bibliothèque PyTorch Lightning via le WandbLogger.

Intégrer Lightning

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.
  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.
  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, des médias, et bien plus encore. Pour l’utiliser avec Lightning, instanciez WandbLogger, puis transmettez-le à Trainer ou à Fabric de Lightning.

Arguments courants du logger

Vous trouverez ci-dessous quelques-uns des paramètres les plus utilisés dans WandbLogger. Consultez la documentation de PyTorch Lightning pour en savoir plus sur tous les arguments du logger.

Journalisez vos hyperparamètres

Journaliser des paramètres de configuration supplémentaires

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

Vous pouvez passer l’objet de votre modèle à wandblogger.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

Vous pouvez journaliser vos métriques dans W&B lorsque vous utilisez WandbLogger en appelant self.log('my_metric_name', metric_vale) dans votre LightningModule, par exemple dans les méthodes training_step ou validation_step.L’extrait de code ci-dessous 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 wandb, vous pouvez définir si vous souhaitez que 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 journalisée apparaîtra dans vos métriques de synthèse. Voir la documentation de référence de define_metric ici et le guide ici pour en savoir plus. Pour indiquer à W&B de 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 d’un modèle

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 automatiquement définis 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 de 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 de modèle dans l’UI ici). Pour mettre vos meilleurs points de contrôle de modèle en favoris et les centraliser pour votre équipe, vous pouvez les lier au registre de modèles W&B. Vous pouvez y 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, des objets 3D, et bien plus encore.
Vous pouvez utiliser le système de callbacks de Lightning pour contrôler quand vous journalisez vers W&B via WandbLogger ; dans cet exemple, nous journalisons un échantillon de nos images de validation et de nos prédictions :

Utiliser plusieurs GPU avec Lightning et W&B

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 part du principe que chaque GPU (ou rang) dans votre boucle d’entraînement doit être 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, et 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 attendra 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

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 Logger sont transmis au Lightning Trainer et sont déclenchés 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 journalise l’intégration sans code supplémentaire ?

Nous enregistrerons les points de contrôle du modèle dans W&B, où vous pourrez les consulter ou les télécharger pour les utiliser dans de futurs runs. Nous capturerons également les métriques système, comme l’utilisation du GPU et les entrées/sorties réseau, des informations sur l’environnement, comme les caractéristiques du matériel et du système d’exploitation, l’état du code (y compris le commit git et le patch diff, le contenu du notebook et l’historique de la session), ainsi que tout ce qui est affiché dans 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.