Script d’entraînement d’origine
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 le jeu 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 pilotent le processus d’entraînement.
Vous définissez ensuite 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 jeux de données d’entraînement et de validation.
Ce code est un script d’entraînement fictif. Il n’entraîne aucun modèle, mais simule le processus d’entraînement en générant des valeurs aléatoires de précision et de perte. Il a pour but de montrer comment intégrer W&B dans votre script d’entraînement.
val_acc).
Ajouter W&B à votre script d’entraînement
Cette section explique comment modifier le script d’entraînement d’origine pour que l’agent de sweep puisse transmettre des valeurs d’hyperparamètres à chaque run et que W&B puisse enregistrer les métriques obtenues. La manière d’intégrer W&B dans votre script Python ou votre notebook dépend de la façon dont vous gérez les sweeps. Si vous utilisez le SDK Python W&B pour démarrer, arrêter et gérer les sweeps, suivez les instructions de l’onglet Script Python ou notebook. Si vous préférez utiliser la CLI W&B, suivez les instructions de l’onglet CLI.- CLI
- Script Python ou notebook
Créez un fichier de configuration YAML contenant votre configuration de sweep. Ce fichier définit les hyperparamètres que le sweep doit explorer. Dans l’exemple suivant, le sweep fait varier les hyperparamètres Pour plus d’informations, voir Définir la configuration de sweep.Vous devez indiquer le nom de votre script Python comme valeur de la clé Après avoir mis à jour votre script d’entraînement, initialisez et démarrez le sweep depuis votre CLI :
batch_size, epochs et lr à chaque run.program
dans votre fichier YAML.Ajoutez ensuite les éléments suivants à l’exemple de code :- Importez le SDK Python W&B (
wandb) et PyYAML (yaml). Utilisez PyYAML pour lire votre fichier de configuration YAML. - Lisez le fichier de configuration.
- Utilisez
wandb.init()pour démarrer un processus en arrière-plan qui synchronise et journalise les données sous forme de run W&B. Passez l’objet de configuration au paramètre config. - Définissez les valeurs des hyperparamètres à partir de
wandb.Run.configau lieu d’utiliser des valeurs codées en dur. - Journalisez la métrique à optimiser avec
wandb.Run.log(). Vous devez journaliser la métrique définie dans votre configuration. Dans le dictionnaire de configuration (ici,sweep_configuration), le sweep est défini de manière à maximiser la valeurval_acc.
-
Initialisez le sweep avec la commande
wandb sweepen indiquant le nom du fichier YAML. Vous pouvez également définir l’option--projectsur le nom du projet :Cette commande renvoie un ID de sweep. Pour plus d’informations, voir Initialiser des sweeps. -
Copiez l’ID du sweep et remplacez
[SWEEP-ID]dans la commande suivante pour démarrer le job de sweep avec la commandewandb agent. Remplacez[YOUR-ENTITY]par le nom de votre entity W&B. Vous pouvez également définir--countpour limiter le nombre de runs que l’agent tente d’exécuter (ici, cinq) :
Consigner des métriques dans W&B lors d’un sweepLa métrique que vous définissez et que vous cherchez à optimiser doit être à la fois déclarée dans votre configuration de sweep et journalisée avec L’exemple suivant montre une manière incorrecte de journaliser la métrique dans W&B. La configuration de sweep optimise
wandb.Run.log(). Par exemple, si vous définissez val_acc comme métrique à optimiser dans votre configuration de sweep, vous devez également journaliser val_acc dans W&B. Si vous ne journalisez pas la métrique, W&B ne peut pas effectuer l’optimisation.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é.