wandb.init().
Par défaut, W&B prend en charge un seul run actif par processus Python. Si vous appelez wandb.init() alors qu’un run est déjà actif, W&B renvoie ce run actif ou le termine avant d’en créer un nouveau. Ce comportement dépend de l’environnement et de la configuration reinit.
Pour gérer plusieurs runs actifs dans un même processus, consultez Plusieurs runs dans un même processus.
W&B recommande d’utiliser un gestionnaire de contexte (bloc
with) pour appeler wandb.init(). Vous avez ainsi la garantie que W&B termine le run et téléverse ses données à la sortie du bloc.Un seul run par processus
L’exemple suivant initialise un run :basic.py
exalted-darkness-6 dans le projet awesome-project de l’entity nico. W&B attribue au run l’ID unique pgbn9y21.
Plusieurs runs dans un même processus
Utilisez le paramètrereinit dans wandb.init() ou wandb.Settings pour gérer plusieurs runs dans un même processus Python. Vous pouvez par exemple garder un run principal actif tout en créant des runs secondaires de courte durée pour d’autres tâches.
Voici quelques cas d’usage courants :
- Créer des runs secondaires pour des évaluations ou des sous-tâches pendant qu’un run principal reste actif.
- Exécuter plusieurs sous-expériences à partir d’un seul script.
- Journaliser différentes tâches ou périodes dans des runs distincts depuis un même processus.
ExigencesPour gérer plusieurs runs dans un même processus Python, vous devez disposer de la version
v0.19.10 ou ultérieure du SDK Python W&B.Options de reinit
Utilisez le paramètre reinit pour contrôler ce qui se passe lorsque vous appelez wandb.init() alors qu’un autre run est actif. Le tableau suivant compare les options disponibles et leurs cas d’utilisation courants. Pour la définition complète du paramètre, consultez la documentation de référence de wandb.init().
W&B ne prend pas en charge le mode
create_new pour les intégrations W&B qui reposent sur un run global unique, comme Hugging Face Trainer, les callbacks Keras et PyTorch Lightning. Si vous utilisez ces intégrations, exécutez chaque sous-expérience dans un processus distinct.Configurer reinit
-
Utilisez
wandb.init()en passant directement l’argumentreinit: -
Utilisez
wandb.init()et passez un objetwandb.Settingsau paramètresettings. Spécifiezreinitdans l’objetSettings: -
Utilisez
wandb.setup()pour définir l’optionreinitde manière globale pour tous les runs du processus en cours. Cette approche est utile si vous souhaitez configurer le 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. Une fois la variable d’environnement définie, l’optionreinits’applique aux appelswandb.init().
wandb.init() :
Exemple : processus simultanés
Supposons que vous souhaitiez créer un processus principal qui reste ouvert pendant toute la durée d’exécution du script, tout en lançant périodiquement des processus secondaires de courte durée sans terminer le processus principal. Ce modèle peut par exemple être utile si vous souhaitez entraîner un modèle dans le run principal, mais calculer des évaluations ou effectuer d’autres tâches dans des runs distincts. Pour ce faire, utilisezreinit="create_new" et initialisez plusieurs runs. Dans 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 destinés à des tâches comme l’évaluation.
Le flux de travail général pourrait se présenter ainsi :
- 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 d’autres données dans Run A.
- Initialisez Run B2, journalisez des données, puis terminez-le.
- Continuez à journaliser dans Run A.
- Pour finir, terminez Run A.
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 telles querun_a,run_b1, etc., puis appelez.log()ou.finish()sur ces objets si nécessaire. - Vous pouvez terminer les sous-runs à tout moment tout en gardant le run principal ouvert jusqu’à.
- Terminez vos runs avec
run.finish()lorsque vous avez fini d’y journaliser des données. Vous avez ainsi la garantie que toutes les données sont téléversées et que le run est correctement fermé.