Skip to main content
Un wandb.init() lent ou un téléversement lent des métriques sont généralement dus à la latence réseau, à des charges utiles multimédias volumineuses, à une fréquence de journalisation élevée ou au démarrage lent du processus du service W&B.

wandb.init() est lent

wandb.init() contacte l’API W&B pour créer le run et vérifier les identifiants d’authentification. S’il reste bloqué plus de quelques secondes :
  • Vérifiez la connectivité : exécutez curl -I https://api.wandb.ai pour confirmer que votre machine peut joindre l’API W&B. Les règles de pare-feu ou les configurations de proxy sur les clusters en sont souvent la cause.
  • Augmentez le délai d’expiration de l’initialisation : si la connexion est intermittente, accordez plus de temps à wandb.init() avant qu’il n’abandonne :
    import os
    os.environ["WANDB_INIT_TIMEOUT"] = "120"   # secondes
    
  • Utilisez le mode hors ligne pendant les tests : si vous n’avez pas besoin d’une synchronisation en temps réel pendant vos itérations, exécutez en mode hors ligne et synchronisez plus tard. Remplacez [TIMESTAMP] et [ID] par l’horodatage et l’ID de votre run :
    WANDB_MODE=offline python train.py
    wandb sync wandb/run-[TIMESTAMP]-[ID]
    

Téléversement lent des métriques pendant l’entraînement

W&B téléverse les métriques de manière asynchrone dans des threads d’arrière-plan afin de ne pas bloquer votre boucle d’entraînement. Les téléversements peuvent prendre du retard dans les cas suivants :
  • Vous journalisez trop fréquemment : appeler wandb.log() à chaque étape sur un GPU rapide peut générer plus de données que les threads d’arrière-plan ne peuvent en téléverser. Journalisez plutôt toutes les N étapes :
    if step % 50 == 0:
        wandb.log({"loss": loss}, step=step)
    
  • Vous journalisez des médias volumineux à chaque étape : les objets wandb.Image, wandb.Table et wandb.Video sont nettement plus volumineux que les métriques scalaires. Journalisez les médias enrichis à chaque époque ou toutes les N étapes, plutôt qu’à chaque étape.
  • Limites de débit : si vous rencontrez l’erreur 429 Rate limit exceeded, voir Comment puis-je corriger les erreurs de limite de débit dépassée ?.

La finalisation du run est lente

Une fois que votre script appelle wandb.finish() (ou se termine), W&B vide les données restantes encore en mémoire tampon. Cela peut prendre du temps si un volume important de données s’est accumulé pendant l’entraînement. Gardez une fréquence de journalisation raisonnable tout au long de l’entraînement, au lieu de tout regrouper à la fin.

Diagnostic à l’aide des journaux de débogage

Activez la journalisation de débogage pour voir où le temps est passé :
WANDB_DEBUG=true python train.py
Cela consigne des informations détaillées sur le temps d’exécution dans wandb/debug.log et wandb/debug-internal.log. Pour plus d’informations, voir Limites et performances d’Experiments et Comment puis-je gérer les problèmes de réseau ?.
Runs Experiments Connectivité