wandb.init().
Par défaut, W&B suppose que chaque processus Python n’a qu’un seul run actif à la fois lorsque vous appelez wandb.init(). Si vous appelez wandb.init() une nouvelle fois, W&B renvoie soit le même run, soit termine l’ancien run avant d’en démarrer un nouveau. La façon dont W&B gère plusieurs appels à wandb.init() dans un même processus dépend de l’environnement (notebook ou hors notebook) et de la configuration reinit.
Pour gérer plusieurs runs actifs dans un même processus, voir Plusieurs runs dans un même processus.
W&B recommande d’utiliser un bloc
with lorsque vous appelez wandb.init(). Cela garantit que W&B finalise correctement le run et envoie toutes les données à la fin du bloc.Un seul run par processus
basic.py
exalted-darkness-6 dans le projet awesome-project sous l’entité nico. pgbn9y21 est l’ID unique du run que W&B génère pour ce run.
Plusieurs runs dans un même processus
- Garder un run « principal » actif tout au long d’un script tout en lançant des runs « secondaires » de courte durée pour des évaluations ou des sous-tâches.
- Orchestrer des sous-expériences dans un seul fichier.
- Effectuer la journalisation depuis un processus « principal » vers plusieurs runs représentant différentes tâches ou périodes.
wandb.init(). Si vous appelez à nouveau wandb.init(), W&B renvoie soit le même run, soit termine l’ancien run avant d’en démarrer un nouveau, selon la configuration.
Ce guide explique comment utiliser reinit pour modifier le comportement de wandb.init() afin de permettre plusieurs runs dans un même processus Python.
PrérequisPour gérer plusieurs runs dans un même processus Python, vous devez disposer de W&B Python SDK version
v0.19.10 ou ultérieure.Options de reinit
reinit pour configurer la façon dont W&B gère les appels multiples à wandb.init(). Le tableau suivant décrit les arguments valides et leurs effets :
| Description | Crée un run ? | Exemple de cas d’utilisation | |
|---|---|---|---|
create_new | Créez un nouveau run avec wandb.init() sans terminer les runs actifs existants. W&B ne bascule pas automatiquement le wandb.Run global vers les nouveaux runs. Vous devez conserver vous-même chaque objet run. Voir l’exemple de plusieurs runs dans un même processus ci-dessous pour plus de détails. | Oui | Idéal pour créer et gérer des processus concurrents. Par exemple, un run « principal » qui reste actif pendant que vous démarrez ou terminez des runs « secondaires ». |
finish_previous | Terminez tous les runs actifs avec run.finish() avant d’en créer un nouveau avec wandb.init(). Comportement par défaut dans les environnements hors notebook. | Oui | Idéal si vous souhaitez scinder des sous-processus séquentiels en runs distincts. |
return_previous | Renvoie le run inachevé le plus récent. Comportement par défaut dans les environnements notebook. | Non |
W&B ne prend pas en charge le mode
create_new pour les W&B Integrations qui supposent un seul run global, comme Hugging Face Trainer, les callbacks Keras et PyTorch Lightning. Si vous utilisez ces intégrations, vous devez exécuter chaque sous-expérience dans un processus distinct.Définir reinit
-
Utilisez
wandb.init()avec l’argumentreinitdirectement : -
Utilisez
wandb.init()et passez un objetwandb.Settingsau paramètresettings. Spécifiezreinitdans l’objetSettings: -
Utilisez
wandb.setup()pour définir l’optionreinitglobalement pour tous les runs du processus en cours. Cela est utile si vous souhaitez configurer ce comportement une seule fois et l’appliquer à tous les appelswandb.init()suivants dans ce processus. -
Spécifiez la valeur souhaitée pour
reinitdans la variable d’environnementWANDB_REINIT. Le fait de définir une variable d’environnement applique l’optionreinitaux appelswandb.init().
wandb.init() :
Exemple : Processus concurrents
reinit="create_new" et initialisez plusieurs runs. Pour cet exemple, supposons que “Run A” soit le processus principal qui reste ouvert tout au long du script, tandis que “Run B1” et “Run B2” sont des runs secondaires de courte durée pour des tâches comme l’évaluation.
Dans les grandes lignes, le flux de travail peut ressembler à ceci :
- Initialisez le processus principal Run A avec
wandb.init()et journalisez les métriques d’entraînement. - Initialisez Run B1 (avec
wandb.init()), journalisez des données, puis terminez-le. - Journalisez davantage de données dans Run A.
- Initialisez Run B2, journalisez des données, puis terminez-le.
- Continuez à journaliser dans Run A.
- Enfin, terminez Run A à la fin.
reinit="create_new"crée un nouveau run chaque fois que vous appelezwandb.init().- Vous conservez une référence à chaque run.
wandb.runne pointe pas automatiquement vers le nouveau run créé avecreinit="create_new". Stockez les nouveaux runs dans des variables commerun_a,run_b1, etc., et appelez.log()ou.finish()sur ces objets selon vos besoins. - Vous pouvez terminer les sous-runs quand vous le souhaitez, tout en laissant le run principal ouvert.
- Terminez vos runs avec
run.finish()lorsque vous avez fini d’y faire de la journalisation. Cela garantit que toutes les données sont bien envoyées et que le run est correctement fermé.