Le contrôleur d’hyperparamètres est hébergé par défaut par Weights & Biases en tant que service cloud. Les agents W&B communiquent avec le contrôleur pour déterminer le prochain ensemble de paramètres à utiliser pour l’entraînement. Le contrôleur est également chargé d’exécuter les algorithmes d’arrêt anticipé afin de déterminer quels runs peuvent être arrêtés.
La fonctionnalité de contrôleur local vous permet d’exécuter localement les algorithmes de recherche et d’arrêt. Le contrôleur local vous permet d’inspecter et d’instrumenter le code afin de déboguer les problèmes et de développer de nouvelles fonctionnalités pouvant être intégrées au service cloud.
Cette fonctionnalité est proposée pour accélérer le développement et le débogage de nouveaux algorithmes pour l’outil Sweeps. Elle n’est pas destinée à des charges de travail réelles d’optimisation des hyperparamètres.
Avant de commencer, vous devez installer le SDK W&B (wandb). Saisissez l’extrait de code suivant dans votre ligne de commande :
Les exemples suivants supposent que vous disposez déjà d’un fichier de configuration et d’une boucle d’entraînement définis dans un script Python ou un notebook Jupyter. Pour en savoir plus sur la définition d’un fichier de configuration, voir Définir la configuration d’un balayage.
Exécuter le contrôleur local depuis la ligne de commande
Initialisez un balayage de la même manière que vous le feriez normalement lorsque vous utilisez des contrôleurs d’hyperparamètres hébergés par W&B comme service cloud. Spécifiez l’indicateur du contrôleur (controller) pour indiquer que vous souhaitez utiliser le contrôleur local pour les jobs de balayage W&B :
wandb sweep --controller config.yaml
Vous pouvez également scinder en deux étapes l’initialisation d’un balayage et la spécification de l’utilisation d’un contrôleur local.
Pour séparer ces étapes, ajoutez d’abord la paire clé-valeur suivante au fichier de configuration YAML de votre balayage :
Ensuite, initialisez le balayage :
wandb sweep génère un ID de balayage. Une fois le balayage initialisé, démarrez un contrôleur avec wandb controller :
wandb controller {user}/{entity}/{sweep_id}
Une fois que vous avez indiqué que vous souhaitez utiliser un contrôleur local, démarrez un ou plusieurs agents de balayage pour exécuter le balayage. Démarrez un W&B balayage comme vous le feriez habituellement. Voir Démarrer des agents de balayage pour plus d’informations.
Exécuter un contrôleur local avec le SDK Python de W&B
Les extraits de code suivants illustrent comment spécifier et utiliser un contrôleur local avec le SDK Python de W&B.
La manière la plus simple d’utiliser un contrôleur avec le SDK Python consiste à transmettre l’ID du balayage à la méthode wandb.controller. Utilisez ensuite la méthode run de l’objet renvoyé pour démarrer le job de balayage :
sweep = wandb.controller(sweep_id)
sweep.run()
Si vous souhaitez avoir plus de contrôle sur la boucle du contrôleur :
import wandb
sweep = wandb.controller(sweep_id)
while not sweep.done():
sweep.print_status()
sweep.step()
time.sleep(5)
Ou un contrôle encore plus poussé sur les paramètres exposés :
import wandb
sweep = wandb.controller(sweep_id)
while not sweep.done():
params = sweep.search()
sweep.schedule(params)
sweep.print_status()
Si vous souhaitez définir entièrement votre balayage en code, vous pouvez faire quelque chose comme ceci :
import wandb
sweep = wandb.controller()
sweep.configure_search("grid")
sweep.configure_program("train-dummy.py")
sweep.configure_controller(type="local")
sweep.configure_parameter("param1", value=3)
sweep.create()
sweep.run()