WandbLogger.
Cette page explique comment utiliser WandbLogger pour suivre des métriques, journaliser des hyperparamètres, enregistrer des points de contrôle de modèle sous forme d’artifacts, journaliser des médias et lancer un entraînement multi-GPU avec PyTorch Lightning et W&B.
Intégrer avec Lightning
Les sections suivantes expliquent comment vous authentifier auprès de W&B, installer la bibliothèquewandb et joindre un WandbLogger à votre Trainer Lightning ou à votre instance Fabric.
- Logger PyTorch
- Logger Fabric
Utilisation de
wandb.log() : le WandbLogger journalise dans W&B à partir du global_step du Trainer. Si vous appelez également wandb.log() directement dans votre code, n’utilisez pas l’argument step de wandb.log().Journalisez plutôt le global_step du Trainer comme n’importe quelle autre métrique :
S’inscrire et créer une clé API
Une clé API authentifie votre machine auprès de W&B. Vous pouvez générer une clé API depuis votre profil utilisateur.Pour plus de simplicité, accédez aux Paramètres utilisateur et créez une clé API. Copiez immédiatement la clé API et enregistrez-la dans un emplacement sécurisé, par exemple un gestionnaire de mots de passe.
- Cliquez sur l’icône de votre profil utilisateur dans le coin supérieur droit.
- Sélectionnez Paramètres utilisateur, puis faites défiler la page jusqu’à la section API Keys.
Installer la bibliothèque wandb et se connecter
Pour installer la bibliothèque wandb en local et vous connecter :
- Ligne de commande
- Python
- notebook Python
-
Définissez la variable d’environnement
WANDB_API_KEYsur votre clé API. Remplacez les valeurs entre<>par les vôtres : -
Installez la bibliothèque
wandbet connectez-vous.
Utiliser le WandbLogger de PyTorch Lightning
PyTorch Lightning propose plusieurs classes WandbLogger pour consigner les métriques, les poids du modèle et les médias. Choisissez la classe qui correspond à votre configuration d’entraînement :
Pour l’intégration avec Lightning, instanciez le WandbLogger et transmettez-le au Trainer ou à Fabric de Lightning.
- Logger PyTorch
- Logger Fabric
Arguments courants du logger
Le tableau suivant répertorie les paramètres courants deWandbLogger. Pour plus de détails sur l’ensemble des arguments du logger, consultez la documentation de PyTorch Lightning.
Journaliser vos hyperparamètres
Journaliser vos hyperparamètres avec W&B vous permet de comparer des runs et de reproduire des résultats. Utilisez la méthode adaptée à votre logger :- Logger PyTorch
- Logger Fabric
Journaliser des paramètres de configuration supplémentaires
Pour capturer des valeurs de configuration additionnelles parallèlement à vos hyperparamètres, mettez directement à jour la configuration de run :Journaliser les gradients, l’histogramme des paramètres et la topologie du modèle
Transmettez l’objet de votre modèle àwandb_logger.watch() pour surveiller ses gradients et ses paramètres pendant l’entraînement. Voir la documentation de WandbLogger de PyTorch Lightning.
Consigner des métriques
- Logger PyTorch
- Logger Fabric
Pour consigner vos métriques dans W&B avec le
WandbLogger, appelez self.log('my_metric_name', metric_value) dans votre LightningModule, par exemple dans vos méthodes training_step ou validation_step.L’extrait de code suivant montre comment définir votre LightningModule pour consigner vos métriques ainsi que ses hyperparamètres. Cet exemple utilise la bibliothèque torchmetrics pour calculer vos métriques.Journaliser le min/max d’une métrique
La fonctiondefine_metric de W&B vous permet de choisir si votre métrique de synthèse W&B affiche la valeur minimale, maximale, moyenne ou la meilleure valeur de cette métrique. Si vous n’utilisez pas define_metric, c’est la dernière valeur journalisée qui 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 :
- Logger PyTorch
- Logger Fabric
Créer des points de contrôle d’un modèle
En enregistrant les points de contrôle sous forme d’artifacts W&B, vous obtenez des fichiers de modèle versionnés que vous pouvez récupérer ultérieurement par run, par alias ou par version. Pour enregistrer les points de contrôle du modèle en tant qu’artifacts W&B, utilisez le callback LightningModelCheckpoint et définissez l’argument log_model dans le WandbLogger.
- Logger PyTorch
- Logger Fabric
latest et best sont définis automatiquement pour faciliter la récupération d’un point de contrôle de modèle à partir d’un artifact W&B :
- Via le Logger
- Via wandb
- Logger PyTorch
- Logger Fabric
Journaliser des images, du texte et plus encore
LeWandbLogger dispose des méthodes log_image, log_text et log_table pour journaliser des médias.
Vous pouvez également appeler directement wandb.log() ou trainer.logger.experiment.log() pour journaliser d’autres types de médias, comme l’audio, les molécules, les nuages de points et les objets 3D.
- Journaliser des images
- Journaliser du texte
- Journaliser des tableaux
WandbLogger. L’exemple suivant journalise un échantillon d’images de validation et de prédictions :
Utiliser plusieurs GPU avec Lightning et W&B
Lors d’un entraînement distribué, la manière dont vous référencezwandb.run d’un rank à l’autre peut déterminer si l’entraînement se poursuit ou aboutit à un interblocage. Cette section présente les exigences à respecter et propose un modèle recommandé.
PyTorch Lightning prend en charge le multi-GPU via son interface DDP. Toutefois, la conception de PyTorch Lightning vous oblige à être attentif à la manière dont vous instanciez vos GPU.
Lightning exige que chaque GPU (ou rank) de votre boucle d’entraînement soit instancié exactement de la même manière, avec les mêmes conditions initiales. Or, seul le processus de rank 0 a accès à l’objet wandb.run. Pour les processus de rank non nul, wandb.run = None, ce qui peut provoquer leur échec. Vous risquez alors un interblocage : le processus de rank 0 attend que les processus de rank non nul le rejoignent, alors que ceux-ci ont déjà planté.
C’est pourquoi vous devez être attentif à la manière dont vous configurez votre code d’entraînement. L’approche recommandée consiste à rendre votre code indépendant de l’objet wandb.run.
Exemples
Pour un guide pas à pas complet, suivez ce tutoriel vidéo accompagné d’un notebook Colab.Questions fréquentes
Comment W&B s’intègre-t-il à Lightning ?
L’intégration principale est basée sur l’APIloggers de Lightning, qui vous permet d’écrire une grande partie de votre code de journalisation indépendamment du framework utilisé. Les instances de Logger sont transmises au Trainer de Lightning et sont déclenchées par le riche système de hooks et de callbacks de cette API. Votre code de recherche reste ainsi bien séparé du code d’ingénierie et de journalisation.
Que journalise l’intégration sans code supplémentaire ?
W&B enregistre les points de contrôle de votre modèle, que vous pouvez consulter ou télécharger pour les réutiliser dans de futurs runs. W&B capture également des métriques système, comme l’utilisation du GPU et les E/S réseau, ainsi que des informations sur l’environnement, comme le matériel et le système d’exploitation. Il capture l’état du code, notamment le commit Git et le patch de diff, le contenu du notebook et l’historique de session. Enfin, il capture tout ce qui est affiché sur la sortie standard.Que faire si je dois utiliser wandb.run dans ma configuration d’entraînement ?
Vous devez étendre vous-même la portée de la variable à laquelle vous souhaitez accéder. Autrement dit, assurez-vous que les conditions initiales sont identiques dans tous les processus.
os.environ["WANDB_DIR"] pour configurer le répertoire des points de contrôle du modèle. Ainsi, tout processus dont le rank est non nul peut accéder à wandb.run.dir.