resume dans wandb.init(). Lorsque vous initialisez un run, W&B vérifie si l’ID du run existe déjà et applique le comportement défini par la valeur de resume.
Le tableau suivant présente le comportement de W&B en fonction de l’argument transmis au paramètre resume et de l’existence ou non de l’ID du run.
Quand utiliser
auto plutôt que allowW&B recommande d’utiliser resume="allow" et de spécifier l’ID exact du run que vous souhaitez reprendre.L’option resume="auto" ne vous oblige pas à spécifier d’ID du run, mais elle peut entraîner un comportement inattendu si plusieurs runs échouent dans le même répertoire ou si la structure des répertoires change. Vous devez également vous assurer de redémarrer le run depuis le même répertoire que le processus ayant échoué lorsque vous utilisez resume="auto".<> par les vôtres.
Reprendre un run en utilisant obligatoirement le même ID du run
Si un run s’arrête, plante ou échoue, vous pouvez le reprendre avec le même ID du run. Pour ce faire, initialisez un run et indiquez les éléments suivants :- Définissez le paramètre
resumesur"must"(resume="must") - Fournissez l’ID du run arrêté ou planté
Reprendre un run sans écraser le run existant
Reprenez un run arrêté ou planté sans écraser le run existant. Cela est particulièrement utile si votre processus ne se termine pas correctement. La prochaine fois que vous démarrerez W&B, W&B reprendra la journalisation à partir de la dernière étape. Définissez le paramètreresume sur "allow" (resume="allow") lorsque vous initialisez un run avec W&B. Fournissez l’ID du run arrêté ou planté. L’extrait de code suivant montre comment procéder avec le SDK Python W&B :
Activer la reprise automatique des runs
L’extrait de code suivant montre comment activer la reprise automatique des runs avec le SDK Python ou des variables d’environnement.- W&B Python SDK
- Script shell
Passez
auto comme argument du paramètre resume lorsque vous initialisez un run. Veillez à redémarrer le run depuis le même répertoire que le processus ayant échoué.Copiez-collez l’extrait de code suivant. Remplacez les valeurs entre <> par les vôtres :train.py dans un répertoire nommé Users/AwesomeEmployee/Desktop/ImageClassify/training/. Dans train.py, le script crée un run avec reprise automatique activée. Supposons ensuite que le script d’entraînement s’arrête. Pour reprendre ce run, vous devez redémarrer votre script train.py dans Users/AwesomeEmployee/Desktop/ImageClassify/training/.
Si vous ne pouvez pas utiliser un système de fichiers partagé, spécifiez la variable d’environnement
WANDB_RUN_ID ou transmettez l’ID du run avec le W&B Python SDK. Voir la section Custom run IDs de la page « What are runs? » pour plus d’informations sur les IDs du run.Reprendre les runs Sweeps préemptibles
Gérez les signaux de préemption afin que W&B puisse automatiquement remettre en file d’attente les runs de sweep interrompues pour qu’un autre agent les exécute. Ce modèle est utile lorsque l’agent de sweep s’exécute sur des ressources de calcul préemptibles, telles qu’une file d’attente SLURM préemptible, une instance Spot Amazon EC2 ou une VM préemptible Google Cloud. Les instructions ci-dessous s’appliquent lorsque vous démarrez des agents de sweep avec la CLIwandb agent. La CLI démarre votre programme d’entraînement en tant que sous-processus. Ces instructions ne s’appliquent pas entièrement si vous utilisez uniquement l’API Python wandb.agent(). L’API Python exécute la fonction d’entraînement dans un thread. La transmission et le relais des signaux du système d’exploitation diffèrent donc du comportement de l’agent CLI.
Gérer un signal de préemption
Enregistrez un gestionnaire pour le signal que votre ordonnanceur ou votre plateforme utilise pour indiquer une préemption, tel queSIGUSR1 ou SIGTERM. Dans le gestionnaire :
- Appelez
mark_preempting()lorsqu’un run est actif. - Effectuez tout nettoyage nécessaire, par exemple en enregistrant un checkpoint.
- Quittez avec un code d’état non nul. Une convention courante pour une terminaison par signal est
128 + signum.
mark_preempting() systématiquement juste après wandb.init(). Sinon, chaque échec, y compris les bugs dans le code, peut être marqué comme une préemption et le run peut être remis en file d’attente de façon répétée.
Pour des exemples exécutables, l’option --forward-signals de l’agent CLI, ainsi qu’un tableau de référence complet pour les différents usages de mark_preempting(), voir Gestion des signaux et runs de sweep.
Lorsque vous suivez ce modèle, W&B enregistre l’état du run à peu près comme suit :
Lorsqu’un agent de sweep récupère un run préempté, le processus d’entraînement doit appeler
wandb.init() dans les 60 minutes. Si l’initialisation n’a pas lieu, par exemple lorsque le processus échoue après avoir récupéré le run mais avant d’appeler wandb.init(), W&B ne rend pas le run disponible pour un autre agent avant l’expiration du bail de 60 minutes.