resume dans wandb.init() pour indiquer à W&B comment réagir si un run s’arrête ou plante. 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 selon l’argument transmis au paramètre resume et selon que l’ID du run existe ou non.
| Argument | Description | Run ID exists | Run ID does not exist | Use case |
|---|---|---|---|---|
"must" | W&B doit reprendre le run spécifié par l’ID du run. | W&B reprend le run avec le même ID de run. Reprise à partir de la dernière étape. | W&B lève une erreur. | Reprendre un run qui doit utiliser le même ID de run. |
"allow" | Autoriser W&B à reprendre le run si l’ID du run existe. | W&B reprend le run avec le même ID de run. Reprise à partir de la dernière étape. | W&B initialise un nouveau run avec l’ID de run spécifié. | Reprendre un run sans remplacer un run existant. |
"never" | Ne jamais autoriser W&B à reprendre un run spécifié par l’ID du run. | Lever une erreur si un run avec l’ID spécifié existe déjà. | W&B initialise un nouveau run avec l’ID de run spécifié. | |
"auto" | Autoriser W&B à essayer automatiquement de reprendre le run si l’ID du run existe. Redémarrez le run depuis le même répertoire que le processus en échec. | W&B reprend le run avec le même ID de run. | W&B initialise un nouveau run avec l’ID de run spécifié. | Permettre la reprise automatique des runs. |
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 un ID de 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 veiller à redémarrer le run depuis le même répertoire que le processus en échec lorsque vous utilisez resume="auto".<> par les vôtres.
Reprendre un run avec le même ID de run
- 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
resume 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
- SDK Python W&B
- Script shell
Passez
auto comme valeur du paramètre resume lorsque vous initialisez un run. Veillez à redémarrer le run depuis le même répertoire que le processus défaillant.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 devrez redémarrer votre script train.py dans Users/AwesomeEmployee/Desktop/ImageClassify/training/ .
Si vous ne pouvez pas utiliser le même système de fichiers, spécifiez la variable d’environnement
WANDB_RUN_ID ou passez l’ID du run avec le SDK Python W&B. Voir la section ID de run personnalisés de la page « Que sont les runs ? » pour plus d’informations sur les ID de run.Reprendre des runs Sweeps préemptibles
wandb agent, qui lance votre programme d’entraînement en tant que sous-processus. Il ne s’applique pas entièrement lorsque vous utilisez uniquement l’API Python wandb.agent(), car dans ce cas, votre fonction d’entraînement s’exécute dans un thread plutôt que dans un processus distinct. La réception et la transmission des signaux du système d’exploitation ne correspondent donc pas au modèle de l’agent CLI.
Schéma recommandé : enregistrez un gestionnaire de signal pour le signal de préemption utilisé par votre planificateur ou votre plateforme (par exemple SIGUSR1 ou SIGTERM). Dans le gestionnaire, appelez mark_preempting() lorsqu’un run est actif, effectuez tout nettoyage nécessaire (par exemple l’enregistrement d’un point de contrôle), puis quittez avec un code non nul (une convention courante est 128 + signum pour une terminaison par signal). N’appelez pas mark_preempting() de manière inconditionnelle juste après wandb.init(). Sinon, chaque échec, y compris les bugs dans le code, risque d’être marqué comme une préemption et le run sera remis en file d’attente de manière répétée.
Pour obtenir des exemples exécutables, des informations sur --forward-signals dans l’agent CLI, ainsi qu’un tableau de référence complet des différents usages de mark_preempting(), voir Signal handling and sweep runs.
Lorsque vous suivez ce schéma, W&B enregistre l’état du run à peu près comme suit :
| Scénario | État du run |
|---|---|
| Le run se termine normalement avec le code de sortie 0 | FINISHED |
| Le run échoue avec un code de sortie non nul | FAILED |
Le run reçoit un signal non géré (par exemple SIGKILL) | CRASHED après environ cinq minutes |
Le run reçoit un signal de préemption géré (par exemple SIGTERM ou SIGUSR1), le gestionnaire appelle mark_preempting(), et le processus se termine avec un code non nul | PREEMPTED ; le run est placé en file d’attente pour la prochaine requête d’agent |