Définissez votre configuration de sweep dans un fichier YAML si vous souhaitez initialiser un sweep et démarrer un agent de sweep depuis la ligne de commande. Définissez votre sweep dans un dictionnaire Python si vous initialisez et démarrez un sweep entièrement depuis un script Python ou un notebook.
Structure de base
Les configurations de sweep se définissent en YAML ou à l’aide d’un dictionnaire Python, avec des paires clé-valeur et des structures imbriquées. Utilisez des clés de premier niveau dans votre configuration de sweep pour définir les caractéristiques de la recherche effectuée par votre sweep, comme le nom du sweep (name), les paramètres à explorer (parameters) et la méthode de recherche (method).
Par exemple, les extraits de code suivants présentent la même configuration de sweep, définie dans un fichier YAML puis dans un dictionnaire Python. Cette configuration de sweep spécifie cinq clés de premier niveau : program, name, method, metric et parameters.
- CLI
- Script Python ou notebook
Pour gérer des sweeps de manière interactive depuis la ligne de commande, définissez une configuration de sweep dans un fichier YAML.
config.yaml
parameters contient les clés imbriquées suivantes : learning_rate, batch_size, epochs et optimizer. Pour chaque clé imbriquée que vous spécifiez, vous pouvez fournir une ou plusieurs valeurs, une distribution, une probabilité, etc. Pour plus d’informations, voir la section parameters de la page Options de configuration de sweep.
Paramètres doublement imbriqués
Utilisez des paramètres imbriqués pour regrouper des hyperparamètres apparentés ou lorsque votre code d’entraînement attend une structure de configuration imbriquée. Pour définir un paramètre imbriqué, ajoutez une cléparameters supplémentaire sous le nom du paramètre de premier niveau.
L’exemple suivant présente une configuration de sweep comportant les paramètres imbriqués nested_category_1, nested_category_2 et nested_category_3, qui contiennent chacun les paramètres supplémentaires momentum et weight_decay. Les exemples de code ci-dessous présentent cette configuration sous forme de fichier YAML et de dictionnaire Python :
- CLI
- Script Python ou notebook
Modèle de configuration de sweep
Utilisez ce modèle comme point de départ pour une nouvelle configuration de sweep. Il présente les schémas les plus courants pour la définition des paramètres et l’arrêt anticipé. Remplacezhyperparameter_name par le nom de votre hyperparamètre, ainsi que toutes les valeurs entre crochets.
config.yaml
!!float, qui convertit la valeur en nombre à virgule flottante. Par exemple, min: !!float 1e-5. Pour plus d’informations, voir Exemple d’arguments de macro et de commande personnalisée.
Exemples de configuration de sweep
Les configurations de sweep suivantes illustrent des scénarios courants. Inspirez-vous-en pour adapter un sweep à votre propre script d’entraînement.- CLI
- Script Python ou notebook
config.yaml
Exemple Bayes avec Hyperband
L’exemple suivant combine la recherche bayésienne et l’arrêt anticipé Hyperband afin d’interrompre tôt les runs peu performants et de réserver les ressources aux configurations plus prometteuses.early_terminate :
- Nombre minimum d’itérations
- Nombre maximum d’itérations
Dans cet exemple, les paliers (brackets) sont
[3, 3*eta, 3*eta*eta, 3*eta*eta*eta], soit [3, 9, 27, 81].Exemple de macros et d’arguments de commande personnalisés
Cet exemple montre comment construire la commande que l’agent de sweep exécute pour chaque essai lorsque vous avez besoin d’un contrôle plus fin que celui offert par l’invocation par défaut. Pour des arguments de ligne de commande plus complexes, vous pouvez utiliser des macros afin de transmettre des variables d’environnement, l’interpréteur Python et des arguments supplémentaires. W&B prend en charge des macros prédéfinies ainsi que des arguments de ligne de commande personnalisés, que vous pouvez spécifier dans votre configuration de sweep. Par exemple, la configuration de sweep suivante (sweep.yaml) définit une commande qui exécute un script Python (run.py) ; les macros ${env}, ${interpreter} et ${program} y sont remplacées par les valeurs appropriées lors de l’exécution du sweep.
Les arguments --batch_size=${batch_size}, --test=True et --optimizer=${optimizer} utilisent des macros personnalisées pour transmettre les valeurs des paramètres batch_size, test et optimizer définis dans la configuration de sweep.
sweep.yaml
run.py peut ensuite analyser ces arguments de ligne de commande à l’aide du module argparse :
run.py
Arguments booléens
Si votre sweep transmet des flags booléens via les arguments de commande, votre script d’entraînement nécessite une gestion supplémentaire, carargparse n’interprète pas par défaut les chaînes booléennes.
Par défaut, le module argparse ne prend pas en charge les arguments booléens. Pour définir un argument booléen, utilisez le paramètre action ou une fonction personnalisée qui convertit la représentation textuelle de la valeur booléenne en type booléen.
Par exemple, vous pouvez utiliser l’extrait de code suivant pour définir un argument booléen. Passez store_true ou store_false comme argument à ArgumentParser :
str2bool, qui convertit une chaîne en valeur booléenne :