Passer au contenu principal
Ce guide fournit des recommandations pour intégrer W&B à votre script d’entraînement Python ou à votre notebook afin d’optimiser la recherche d’hyperparamètres. En suivant ces recommandations, vous pouvez utiliser les balayages W&B pour explorer les valeurs d’hyperparamètres, journaliser les métriques d’entraînement et de validation, et identifier la configuration qui permet d’obtenir de bonnes performances du modèle. Ce guide s’adresse aux praticiens du machine learning qui disposent déjà d’un script d’entraînement Python et souhaitent ajouter la prise en charge des balayages d’hyperparamètres. Les sections suivantes présentent un exemple de script d’entraînement, puis montrent comment le mettre à jour pour qu’il fonctionne avec les balayages W&B.

Script d’entraînement original

Supposons que vous disposiez d’un script Python qui entraîne un modèle (voir le code ci-dessous). Votre objectif est de trouver les hyperparamètres qui maximisent la précision de validation (val_acc). Dans votre script Python, vous définissez deux fonctions : train_one_epoch et evaluate_one_epoch. La fonction train_one_epoch simule l’entraînement sur une époque et renvoie la précision et la perte d’entraînement. La fonction evaluate_one_epoch simule l’évaluation du modèle sur l’ensemble de données de validation et renvoie la précision et la perte de validation. Vous définissez un dictionnaire de configuration nommé config qui contient des valeurs d’hyperparamètres telles que le taux d’apprentissage, la taille de lot et le nombre d’époques. Les valeurs de ce dictionnaire de configuration contrôlent le processus d’entraînement. Ensuite, vous définissez une fonction appelée main qui reproduit une boucle d’entraînement classique. À chaque époque, le script calcule la précision et la perte sur les ensembles de données d’entraînement et de validation.
Ce code est un script d’entraînement fictif. Il n’entraîne pas réellement de modèle, mais simule le processus d’entraînement en générant des valeurs aléatoires de précision et de perte. L’objectif de ce code est de montrer comment intégrer W&B dans votre script d’entraînement.
La section suivante montre comment ajouter W&B à votre script Python afin de suivre les hyperparamètres et les métriques pendant l’entraînement. Vous souhaitez utiliser W&B pour trouver les meilleurs hyperparamètres afin de maximiser la précision de validation (val_acc).

Ajoutez W&B à votre script d’entraînement

Cette section montre comment modifier le script d’entraînement original afin que l’agent de balayage puisse transmettre des valeurs d’hyperparamètre à chaque run et que W&B puisse enregistrer les métriques obtenues. La manière d’intégrer W&B à votre script Python ou notebook dépend de la façon dont vous gérez les Sweeps. Pour utiliser le W&B Python SDK afin de démarrer, d’arrêter et de gérer les Sweeps, suivez les instructions de l’onglet Python script or notebook. Pour utiliser le W&B CLI à la place, suivez les instructions de l’onglet CLI.
Créez un fichier de configuration YAML pour votre sweep. Ce fichier contient les hyperparamètres que vous voulez explorer avec le sweep. Dans l’exemple suivant, le sweep fait varier les hyperparamètres batch_size, epochs et lr à chaque exécution.
Pour plus d’informations, voir Définir la configuration du sweep.Vous devez fournir le nom de votre script Python pour la clé program dans votre fichier YAML.Ensuite, ajoutez ce qui suit à l’exemple de code :
  1. Importez le SDK Python de W&B (wandb) et PyYAML (yaml). Utilisez PyYAML pour lire votre fichier de configuration YAML.
  2. Chargez le fichier de configuration.
  3. Utilisez wandb.init() pour démarrer un processus d’arrière-plan afin de synchroniser et d’enregistrer les données en tant que W&B Run. Passez l’objet config au paramètre config.
  4. Définissez les valeurs des hyperparamètres à partir de wandb.Run.config au lieu d’utiliser des valeurs codées en dur.
  5. Enregistrez la métrique que vous souhaitez optimiser avec wandb.Run.log(). Vous devez enregistrer la métrique définie dans votre configuration. Dans le dictionnaire de configuration (sweep_configuration dans cet exemple), vous définissez le sweep de manière à maximiser la valeur val_acc.
Après avoir mis à jour votre script d’entraînement, initialisez et démarrez le sweep depuis votre CLI :
  1. Initialisez le sweep avec la commande wandb sweep. Fournissez le nom du fichier YAML. Si vous le souhaitez, définissez l’option --project sur le nom du projet :
    Cela renvoie un ID de sweep. Pour plus d’informations, voir Initialiser les sweeps.
  2. Copiez l’ID du sweep et remplacez [SWEEP-ID] dans la commande suivante pour démarrer le job du sweep avec la commande wandb agent. Remplacez [YOUR-ENTITY] par le nom de votre entité W&B. Si vous le souhaitez, définissez --count pour limiter le nombre de runs que l’agent lance (cet exemple le définit sur cinq) :
L’agent de sweep exécute votre script d’entraînement de façon répétée, chaque fois avec une combinaison différente de valeurs d’hyperparamètres issues de votre configuration YAML, et journalise les résultats dans W&B. Pour plus d’informations, voir Démarrer des jobs de sweep.
Journal des métriques dans W&B lors d’un balayageVous devez journaliser la métrique que vous définissez et que vous optimisez, à la fois dans votre configuration de balayage et avec wandb.Run.log(). Par exemple, si vous définissez val_acc comme métrique à optimiser dans votre configuration de balayage, vous devez également journaliser val_acc dans W&B. Si vous ne journalisez pas cette métrique, W&B ne peut pas effectuer l’optimisation.
L’exemple suivant montre une journalisation incorrecte de la métrique dans W&B. La métrique optimisée dans la configuration de balayage est val_acc, mais le code journalise val_acc dans un dictionnaire imbriqué sous la clé validation. Vous devez journaliser la métrique directement, et non dans un dictionnaire imbriqué.