Passer au contenu principal
Un balayage combine une stratégie d’exploration des valeurs d’hyperparamètres avec le code qui les évalue. Cette stratégie peut être aussi simple que d’essayer chaque option, ou aussi complexe que l’optimisation bayésienne et Hyperband (BOHB). Ce guide vous montre comment définir une configuration de balayage qui précise quels hyperparamètres rechercher, quelle stratégie de recherche utiliser et comment évaluer chaque run. Utilisez-le lorsque vous configurez un nouveau balayage ou adaptez une configuration existante à une autre méthode de recherche ou à un autre espace de paramètres. Définissez la configuration de votre balayage soit dans un dictionnaire Python, soit dans un fichier YAML. La façon de définir cette configuration dépend de la manière dont vous souhaitez gérer votre balayage.
Définissez la configuration de votre balayage dans un fichier YAML si vous souhaitez initialiser un balayage et démarrer un agent de balayage depuis la ligne de commande. Définissez votre balayage dans un dictionnaire Python si vous initialisez un balayage et démarrez un agent de balayage entièrement dans un script ou notebook Python.
Les sections suivantes décrivent comment formater la configuration de votre balayage. Voir Sweep configuration options pour une liste complète des clés de configuration de balayage de premier niveau.

Structure de base

Les configurations de balayage sont définies soit à l’aide de YAML, soit d’un dictionnaire Python, avec des paires clé-valeur et des structures imbriquées. Utilisez les clés de premier niveau de votre configuration de balayage pour définir les propriétés de votre recherche, comme le name du balayage, les parameters à explorer et la method de recherche. Par exemple, les extraits de code ci-dessous montrent la même configuration de balayage définie dans un fichier YAML et dans un dictionnaire Python. La configuration de balayage spécifie cinq clés de premier niveau : program, name, method, metric et parameters.
Pour gérer des balayages de manière interactive depuis la ligne de commande, définissez une configuration de balayage dans un fichier YAML.
config.yaml
La clé parameters de premier niveau contient les clés imbriquées suivantes : learning_rate, batch_size, epochs et optimizer. Pour chacune des clés imbriquées que vous définissez, vous pouvez fournir une ou plusieurs valeurs, une distribution, une probabilité, etc. Pour plus d’informations, voir la section parameters de Sweep configuration options.

Paramètres imbriqués sur deux niveaux

Utilisez des paramètres imbriqués lorsque vous souhaitez regrouper des hyperparamètres associé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 montre une configuration de balayage avec les paramètres imbriqués nested_category_1, nested_category_2 et nested_category_3, chacun contenant les paramètres supplémentaires momentum et weight_decay. Les exemples de code suivants montrent la configuration dans un fichier YAML et dans un dictionnaire Python :
Les paramètres imbriqués définis dans la configuration du balayage écrasent les clés spécifiées dans une configuration de run W&B.Par exemple, supposons que vous ayez un script train.py qui initialise un run avec une valeur imbriquée par défaut :
Votre configuration de balayage définit des paramètres imbriqués sous une clé "parameters" de premier niveau :
Lors d’un run de balayage, run.config["nested_param"] reflète le sous-arbre défini par la configuration du balayage (learning_rate et double_nested_param). Il n’inclut pas manual_key, qui est défini dans wandb.init(config=...).

Modèle de configuration d’un balayage

Utilisez ce modèle comme point de départ pour une nouvelle configuration de balayage. Il illustre les modèles de paramètre et d’arrêt anticipé les plus courants. Remplacez hyperparameter_name par le nom de votre hyperparamètre, ainsi que par toutes les valeurs entre crochets.
config.yaml
Pour exprimer une valeur numérique en notation scientifique, ajoutez l’opérateur 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 balayage

Les configurations de balayage suivantes illustrent des scénarios courants. Utilisez-les comme références lorsque vous adaptez un balayage à votre propre script d’entraînement.
config.yaml

Exemple avec Bayes Hyperband

L’exemple suivant combine la recherche bayésienne avec l’arrêt anticipé Hyperband afin d’interrompre rapidement les runs les moins performants et de préserver les ressources pour des configurations plus prometteuses.
Les onglets ci-dessous montrent comment spécifier un nombre minimal ou maximal d’itérations pour early_terminate :
Les paliers de cet exemple sont : [3, 3*eta, 3*eta*eta, 3*eta*eta*eta], ce qui correspond à [3, 9, 27, 81].

Exemple de macros et d’arguments de ligne de commande personnalisés

Cet exemple montre comment construire la commande que l’agent de balayage exécute pour chaque essai lorsque vous avez besoin d’un contrôle plus précis que celui fourni par l’invocation par défaut. Pour des arguments de ligne de commande plus complexes, vous pouvez utiliser des macros pour 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 définir dans votre configuration de balayage. Par exemple, la configuration de balayage suivante (sweep.yaml) définit une commande qui exécute un script Python (run.py), les macros ${env}, ${interpreter} et ${program} étant remplacées par les valeurs appropriées lors de l’exécution du balayage. 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 balayage.
sweep.yaml
Le script Python associé run.py peut ensuite analyser ces arguments de la ligne de commande à l’aide du module argparse :
run.py
Voir la section Macros de commande de Sweep configuration options pour consulter la liste des macros prédéfinies que vous pouvez utiliser dans votre configuration de balayage.

Arguments booléens

Si votre balayage transmet des indicateurs booléens via des arguments de commande, votre script d’entraînement nécessite une gestion supplémentaire, car argparse n’interprète pas les chaînes booléennes par défaut. Le module argparse ne prend pas en charge les arguments booléens par défaut. Pour définir un argument booléen, vous pouvez utiliser le paramètre action ou une fonction personnalisée pour convertir la représentation sous forme de chaîne 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 :
Vous pouvez également définir une fonction personnalisée pour convertir la représentation textuelle d’une valeur booléenne en type booléen. Par exemple, l’extrait de code suivant définit la fonction str2bool, qui convertit une chaîne en valeur booléenne :