Maîtriser la gestion de configuration en apprentissage automatique avec Hydra.
Master ML configuration management with Hydra.
Maîtrise de l’apprentissage automatique
Explorez des exemples concrets pour transformer la gestion de la configuration dans vos applications d’apprentissage automatique
Aperçu
Bienvenue dans « Maîtrise de la gestion de la configuration de l’apprentissage automatique avec Hydra » ! Ce tutoriel complet est conçu pour vous initier aux bases de Hydra et aux techniques avancées pour gérer les configurations dans vos projets d’apprentissage automatique. Nous explorerons également l’intégration de Hydra avec des environnements informatiques haute performance et des frameworks d’apprentissage automatique populaires. Que vous soyez novice en apprentissage automatique ou praticien expérimenté, ce tutoriel vous dotera des connaissances et des compétences pour optimiser votre flux de travail en apprentissage automatique.

Table des matières
· I. Introduction · II. Bases de Hydra ∘ Installation de Hydra ∘ Anatomie d’une application Hydra ∘ Compréhension des principaux composants de Hydra · III. Configurations hiérarchiques ∘ Définition et compréhension des fichiers de configuration hiérarchiques · IV. Groupes de configuration ∘ Compréhension du concept de groupes de configuration ∘ Définition de différentes configurations : développement, mise en scène, production ∘ Mise en évidence de l’impact sur la reproductibilité et le débogage · V. Configurations dynamiques ∘ Explication des configurations dynamiques ∘ Création de règles pour l’ajustement dynamique des hyperparamètres ∘ Implémentation de configurations dynamiques dans un contexte d’apprentissage automatique · VI. Variables d’environnement ∘ Besoin de variables d’environnement dans Hydra ∘ Gestion des données sensibles ou fréquemment modifiées ∘ Utilisation des variables d’environnement dans Hydra : un guide étape par étape · VII. Configuration du journal ∘ Importance du journal dans les expériences d’apprentissage automatique ∘ Utilisation de Hydra pour configurer le framework de journalisation de Python ∘ Comment créer des fichiers journaux pour différents modules avec différents niveaux de verbosité · VIII. Multirun et Sweeps ∘ Introduction à la fonction Multirun de Hydra ∘ Conception et configuration de balayages d’hyperparamètres ∘ Application de Multirun et Sweeps à des projets d’apprentissage automatique · IX. Gestion des erreurs ∘ Importance de la gestion des erreurs dans la gestion de la configuration ∘ Utilisation de Hydra pour une gestion avancée des erreurs ∘ Personnalisation du comportement pour les configurations manquantes ou incorrectes · X. Command Line Overrides ∘ Compréhension des remplacements de ligne de commande dans Hydra ∘ Modification des configurations en temps d’exécution à l’aide d’arguments de ligne de commande ∘ Exemples pratiques d’utilisation des remplacements de ligne de commande dans les expériences d’apprentissage automatique · XI. Utilisation de Hydra sur un cluster HPC basé sur Slurm ∘ Hydra et SLURM : un bref aperçu ∘ Installation ∘ Configuration ∘ Exécution de votre application ∘ Sujets avancés : exécutions parallèles avec Slurm · XII. Hydra avec la conteneurisation (Docker/Kubernetes) ∘ Hydra avec Docker ∘ Hydra avec Kubernetes · XIII. Intégration avec les frameworks d’apprentissage automatique ∘ Hydra avec PyTorch · XIV. Conclusion · XV. Annexe : commandes et astuces utiles d’Hydra ∘ Commandes couramment utilisées d’Hydra ∘ Astuces et conseils
I. Introduction
La gestion des configurations peut être complexe, des hyperparamètres de modèle aux paramètres d’expérience. Suivre tous ces détails peut rapidement devenir écrasant. C’est là que la bibliothèque de configuration Hydra de Facebook entre en jeu. Hydra est un framework Python open-source qui simplifie la gestion des configurations dans vos applications, assurant une meilleure reproductibilité et modularité.
Hydra offre un mécanisme puissant et flexible pour gérer les configurations des applications complexes. Cela facilite la maintenance et l’optimisation des projets d’apprentissage automatique par les développeurs et les chercheurs.
- AI Telephone – Une Bataille de Modèles Multimodaux
- Des pipelines CI/CD transparents avec GitHub Actions sur GCP vos outils pour un MLOps efficace.
- Détection de la croissance du cancer à l’aide de l’IA et de la vision par ordinateur
Dans ce tutoriel, nous présentons les bases de Hydra et vous guidons à travers ses fonctionnalités avancées. À la fin de ce tutoriel, vous serez en mesure de gérer efficacement et efficacement les configurations de votre projet.
II. Bases de Hydra
Installation de Hydra
Hydra est une bibliothèque Python et peut être facilement installée avec pip :
pip install hydra-core
Anatomie d’une application Hydra
Une application Hydra a un script et un ou plusieurs fichiers de configuration. Les fichiers de configuration sont écrits en YAML et stockés dans une structure de répertoire. Cela crée une configuration hiérarchique.
# my_app.pyimport [email protected](config_name="config")def my_app(cfg): print(cfg.pretty())if __name__ == "__main__": my_app()
Le fichier YAML d’accompagnement pourrait ressembler à ceci :
# config.yamldb: driver: mysql user: test password: test
Le script Python my_app.py
utilise le décorateur @hydra.main()
pour indiquer qu’il s’agit d’une application Hydra. Le paramètre config_name
spécifie le fichier de configuration à utiliser. Notez qu’il suppose que le type de fichier est YAML, donc il n’est pas nécessaire de sélectionner l’extension.
Compréhension des composants principaux d’Hydra
Hydra comprend des configurations, des interpolations et des overrides.
Les configurations sont les paramètres de votre application spécifiés dans un ou plusieurs fichiers YAML.
Les interpolations sont des références à d’autres parties de votre configuration. Par exemple, dans le fichier YAML ci-dessous, la valeur de full
interpole name
et surname
.
name: Johnsurname: Doefull: ${name} ${surname}db: user: ${surname}.${name}
Les overrides vous permettent de modifier votre configuration à l’exécution sans modifier vos fichiers YAML. Vous pouvez spécifier des overrides sur la ligne de commande lors de l’exécution de votre application, comme le montre l’exemple suivant :
python my_app.py db.user=root
Dans la commande ci-dessus, nous remplaçons la valeur user
sous db
dans la configuration.

Dans les sections suivantes, nous examinerons les fonctionnalités avancées et comment les utiliser dans vos projets d’apprentissage automatique.
III. Configurations Hiérarchiques
Hydra offre une manière intuitive de structurer vos fichiers de configuration de manière hiérarchique, reflétant la structure de votre répertoire de projet. Les configurations hiérarchiques sont essentielles pour la gestion de projets complexes, facilitant la maintenance, l’extension et la réutilisation de vos configurations.
Définition et Compréhension des Fichiers de Configuration Hiérarchiques
La hiérarchie des configurations est définie par la structure de répertoire de vos fichiers de configuration.
Par exemple, la disposition d’un projet pourrait être structurée comme suit :
config.yamlpreprocessing/ - standard.yaml - minmax.yamlmodel/ - linear.yaml - svm.yaml
Ainsi, les fichiers standard.yaml
et minmax.yaml
pourraient contenir des paramètres différents pour la prétraitement de données; les fichiers linear.yaml
et svm.yaml
pourraient avoir des configurations pour différents types de modèles.
Dans config.yaml
, vous pouvez spécifier quelles configurations de prétraitement et de modèles utiliser par défaut :
defaults: - preprocessing: standard - model: linear
Hydra fusionne automatiquement les configurations spécifiées, vous pouvez donc toujours remplacer le choix par défaut lors du lancement de l’application, comme le montre le code suivant :
python my_app.py preprocessing=minmax model=svm
La commande ci-dessus exécute l’application avec les configurations de prétraitement minmax
et de modèle svm
.
IV. Groupes de Configurations
Les groupes de configurations dans Hydra fournissent une manière de gérer les ensembles de configurations qui peuvent être facilement échangées. Cette fonctionnalité est pratique pour la gestion de divers paramètres, environnements et configurations, tels que le développement, les tests, la mise en scène et la production.
Compréhension du Concept de Groupes de Configuration
Un groupe de configuration est un répertoire contenant des configurations alternatives. Lors de la définition d’un groupe de configuration, spécifiez une configuration par défaut dans votre fichier de configuration principal ( config.yaml
), mais vous pouvez facilement la remplacer lors de l’exécution de votre application.
Définition de Différentes Configurations : Développement, Mise en Scène, Production
Considérez un projet de machine learning où vous avez des paramètres distincts pour les environnements de développement, de mise en scène et de production. Vous pouvez créer un groupe de configuration pour chaque environnement :
config.yamlenv/ - development.yaml - staging.yaml - production.yaml
Chaque fichier YAML dans le répertoire env
contiendrait les paramètres spécifiques à cet environnement. Par exemple, le fichier development.yaml
pourrait définir des paramètres de journalisation verbose et de débogage, tandis que le fichier production.yaml
pourrait contenir des paramètres de performance optimisés et de journalisation d’erreur.
Dans config.yaml
, vous spécifiez l’environnement par défaut :
defaults: - env: development
Avec cette configuration, Hydra appliquera automatiquement les paramètres de development.yaml
lors de l’exécution de votre application.
Mise en évidence de l’impact sur la reproductibilité et le débogage
Les groupes de configuration sont un outil puissant pour améliorer la reproductibilité de vos projets. Vous pouvez vous assurer que votre application se comporte de manière cohérente dans différents environnements en définissant des configurations de développement, de mise en scène et de production spécifiques.
De plus, les groupes de configuration peuvent considérablement simplifier le débogage. Vous pouvez rapidement reproduire et isoler les problèmes en utilisant différents groupes de configuration pour différentes étapes de votre projet. Par exemple, si un problème survient dans l’environnement de mise en scène, vous pouvez passer à la configuration de staging
pour reproduire le problème sans affecter vos paramètres de développement ou de production.
Le passage d’un environnement à l’autre est aussi simple que de spécifier un groupe de configuration différent lors du lancement de votre application :
python my_app.py env=production
Cette commande exécute l’application avec les paramètres définis dans production.yaml
.

V. Configurations dynamiques
En plus de la gestion de configuration statique, Hydra permet des configurations dynamiques. Les configurations dynamiques sont incroyablement précieuses dans les scénarios où certains paramètres dépendent des autres ou doivent être calculés à l’exécution.
Explication des configurations dynamiques
Les configurations dynamiques dans Hydra sont activées grâce à deux fonctionnalités principales : les interpolations et la bibliothèque OmegaConf.
Les interpolations sont des références à d’autres parties de votre configuration, permettant un ensemble dynamique de valeurs. Elles sont indiquées par ${}
dans vos fichiers de configuration. Par exemple :
name: Alicegreeting: Hello, ${name}!
Dans cet exemple, la valeur greeting
inclura dynamiquement la valeur name
.
OmegaConf est une bibliothèque de configuration flexible que Hydra utilise. Elle prend en charge non seulement les interpolations, mais aussi les substitutions de variables et même des expressions complexes :
dimensions: width: 10 height: 20area: ${dimensions.width} * ${dimensions.height}
Dans l’exemple ci-dessus, la surface
est calculée dynamiquement en fonction de la largeur
et de la hauteur
sous dimensions
.
Création de règles pour l’ajustement dynamique des hyperparamètres
En machine learning, les configurations dynamiques peuvent être bénéfiques pour ajuster les hyperparamètres. Par exemple, nous voulons que le taux d’apprentissage dépende de la taille du lot. Nous pourrions définir une règle pour cela dans notre fichier de configuration :
training: batch_size: 32 learning_rate: 0.001 * ${training.batch_size}
Si le taux d’apprentissage est ajusté dynamiquement en fonction de la taille du lot
, le taux d’apprentissage augmentera automatiquement proportionnellement si vous améliorez la taille du lot.
Mise en œuvre de configurations dynamiques dans un contexte de machine learning
Prenons en compte un scénario de machine learning plus complexe où la taille de la première couche de notre réseau neuronal dépend de la taille d’entrée de nos données.
data: input_size: 100model: layer1: ${data.input_size} * 2 layer2: 50
Ici, la taille de la première couche (layer1
) est dynamiquement définie pour être deux fois la input_size
. Si nous changeons la input_size
, layer1
s’ajustera automatiquement.
Les configurations dynamiques offrent une plus grande flexibilité et adaptabilité pour les applications.

VI. Variables d’environnement
Hydra prend en charge l’utilisation de variables d’environnement dans les fichiers de configuration, offrant une flexibilité et une sécurité supplémentaires. Cette fonctionnalité peut être bénéfique pour gérer des données sensibles ou fréquemment modifiées.
La nécessité de variables d’environnement dans Hydra
Les variables d’environnement sont un moyen courant de transmettre des informations de configuration à votre application. Elles sont pratiques dans les situations suivantes:
- Données sensibles: Les mots de passe, les clés secrètes et les jetons d’accès ne doivent pas être codés en dur dans votre application ou vos fichiers de configuration. Au lieu de cela, ils peuvent être stockés de manière sécurisée en tant que variables d’environnement.
- Données fréquemment modifiées: Si des paramètres spécifiques changent fréquemment ou dépendent de l’environnement du système (par exemple, les chemins d’accès de fichiers qui diffèrent entre les environnements de développement et de production), il est plus pratique de les gérer en tant que variables d’environnement.
- Portabilité et scalabilité: Les variables d’environnement peuvent faciliter le déplacement de vos applications entre différents environnements (par exemple, d’un environnement de développement local à un environnement de production basé sur le cloud).
Gestion des données sensibles ou fréquemment modifiées
Les informations sensibles telles que les informations d’identification de la base de données ne doivent jamais être stockées directement dans vos fichiers de configuration. Au lieu de cela, vous pouvez les conserver en tant que variables d’environnement et les référencer dans vos configurations Hydra en utilisant des interpolations. Cette pratique améliore la sécurité en empêchant les données sensibles d’être exposées dans votre code ou votre système de contrôle de version.
De même, les données fréquemment modifiées, telles que les chemins de fichiers ou de répertoires qui varient entre les environnements, peuvent être gérées en tant que variables d’environnement. Cette approche réduit la nécessité de modifications manuelles lors du passage d’un environnement à un autre.
Utilisation de variables d’environnement : un guide étape par étape
Pour utiliser une variable d’environnement dans Hydra, suivez ces étapes:
- Définissez une variable d’environnement dans votre shell. Par exemple, dans un système basé sur Unix, vous pourriez utiliser la commande
export
:
export DATABASE_URL=mysql://user:password@localhost/db
2. Référencez la variable d’environnement dans votre fichier de configuration Hydra en utilisant la syntaxe ${env:VARIABLE}
:
database: url: ${env:DATABASE_URL}
Dans cet exemple, le champ url
de la configuration de la base de données
sera défini sur la valeur de la variable d’environnement DATABASE_URL
.
Rappelez-vous, ne stockez jamais d’informations sensibles directement dans vos fichiers de configuration ou votre code. Utilisez toujours des variables d’environnement ou une autre méthode sécurisée pour gérer les données sensibles.

VII. Configuration des journaux
La journalisation est une partie essentielle des expériences d’apprentissage automatique. Elle permet de visualiser les performances et le comportement de vos modèles et algorithmes au fil du temps. La configuration de mécanismes de journalisation appropriés peut aider à déboguer le modèle, à l’optimiser et à comprendre le processus d’apprentissage.
Hydra prend en charge la configuration intégrée du module de journalisation de Python, ce qui facilite le contrôle de la verbosité des journaux, la mise en place de différents gestionnaires et la mise en forme des messages de journal.
L’importance de la journalisation dans les expériences d’apprentissage automatique
La journalisation pour l’apprentissage automatique peut servir à diverses fins :
- Débogage du modèle : Les journaux peuvent contenir des informations précieuses sur le comportement du modèle, ce qui peut aider à diagnostiquer et à résoudre les problèmes.
- Suivi des performances : La journalisation des métriques au fil du temps permet d’observer le processus d’apprentissage du modèle, de détecter la surajustement ou le sous-ajustement et d’ajuster les hyperparamètres en conséquence.
- Audit et reproductibilité : Les journaux documentent les détails du processus de formation, ce qui facilite la reproduction des résultats et la compréhension de ce qui a été fait dans le passé.
Utiliser Hydra pour configurer le framework de journalisation de Python
Le module de journalisation intégré à Python est robuste et hautement configurable, et Hydra peut aider à gérer cette complexité.
Pour configurer la journalisation avec Hydra, créez un fichier hydra.yaml
dans votre répertoire de configuration et définissez vos paramètres de journalisation sous la clé hydra.job_logging
:
hydra: job_logging: root: level: INFO handlers: console: level: INFO formatter: basic file: level: DEBUG formatter: basic filename: ./logs/${hydra:job.name}.log
Dans cette configuration :
- Le journal racine est défini au niveau
INFO
, capturant les messagesINFO
,WARNING
,ERROR
etCRITICAL
. - Il y a deux gestionnaires : un pour la sortie console et un pour l’écriture dans un fichier. Le gestionnaire de console ne journalise que les messages de niveau
INFO
et plus élevé, tandis que le gestionnaire de fichier journalise les messages de niveauDEBUG
et plus élevé. - Le
filename
du gestionnaire de fichier utilise l’interpolation pour créer dynamiquement un fichier journal pour chaque tâche en fonction du nom de la tâche.
Comment créer des fichiers journaux pour différents modules avec des niveaux de verbosité variables
Vous pouvez définir des niveaux de journalisation différents pour différents modules de votre application. Supposons que vous ayez les modules moduleA
et moduleB
, et que vous vouliez que moduleA
journalise des messages de niveau DEBUG
et plus élevé, mais que moduleB
ne journalise que des messages de niveau ERROR
et plus élevé. Voici comment le configurer:
hydra: job_logging: root: level: INFO loggers: moduleA: level: DEBUG moduleB: level: ERROR handlers: console: level: INFO formatter: basic file: level: DEBUG formatter: basic filename: ./logs/${hydra:job.name}.log
De cette façon, vous pouvez contrôler la quantité de sortie de journal pour différentes parties de l’application.

VIII. Multirun et Sweeps
L’apprentissage automatique implique souvent l’exécution d’expériences avec différents ensembles d’hyperparamètres pour trouver la solution optimale. Bienvenue à la fonctionnalité multirun
de Hydra. Elle vous permet d’exécuter votre application plusieurs fois avec des configurations différentes, ce qui est bénéfique pour l’optimisation des hyperparamètres.
Introduction à la fonctionnalité Multirun de Hydra
Pour utiliser multirun
, passez le drapeau -m
ou --multirun
lors de l’exécution de votre application. Ensuite, spécifiez les paramètres que vous souhaitez faire varier entre les exécutions en utilisant la syntaxe clé=valeur
:
python my_app.py --multirun training.batch_size=32,64,128
Cela exécutera votre application trois fois : une fois avec training.batch_size=32
, une fois avec training.batch_size=64
et une fois avec training.batch_size=128
.
Conception et configuration de balayages d’hyperparamètres
Un balayage d’hyperparamètres est une série d’exécutions avec différents hyperparamètres.
Hydra prend en charge différents types de balayages :
- Balayages de plage : Spécifie une plage de valeurs pour un paramètre. Par exemple,
learning_rate=0.01,0.001,0.0001
- Balayages d’intervalle : Définit un intervalle et une taille de pas. Par exemple,
epoch=1:10:1
(début:fin:pas
) - Balayages de choix : Définit une liste de valeurs à choisir. Par exemple,
optimizer=adam,sgd,rmsprop
- Balayages de grille : Définit plusieurs paramètres à balayer. Cela exécutera votre application pour toutes les combinaisons des paramètres.
Ces types de balayage peuvent être combinés et utilisés de manière complexe pour explorer en profondeur l’espace d’hyperparamètres de votre modèle.
Application de Multirun et Sweeps aux projets de Machine Learning
Prenons un projet de machine learning simple où vous souhaitez régler le taux d’apprentissage et la taille du lot. Vous pouvez utiliser la fonctionnalité multirun
pour configurer et exécuter facilement cette recherche d’hyper-paramètres :
python my_app.py --multirun training.batch_size=32,64,128 training.learning_rate=0.01,0.001,0.0001
Cette commande exécutera votre application pour chaque combinaison de taille de lot et de taux d’apprentissage, pour un total de neuf exécutions (3 tailles de lot * 3 taux d’apprentissage).
La fonctionnalité multirun
de Hydra peut simplifier considérablement le processus d’exécution de recherches d’hyperparamètres, vous aidant à trouver la meilleure configuration pour vos modèles de machine learning.

IX. Gestion d’erreurs
La gestion d’erreurs appropriée est un aspect crucial de la gestion de la configuration. Elle fournit des informations précieuses en cas de problème, aidant à prévenir ou à diagnostiquer rapidement les problèmes pouvant affecter le succès de vos projets de machine learning. Hydra peut être utilisé pour faciliter une gestion d’erreurs avancée.
Importance de la gestion des erreurs dans la gestion de la configuration
La gestion des erreurs dans la gestion de la configuration sert à diverses fins :
- Prévention des erreurs : En validant les configurations avant leur utilisation, vous pouvez détecter et corriger les erreurs tôt, les empêchant de causer des problèmes plus importants.
- Débogage rapide : Lorsque des erreurs se produisent, des messages d’erreur détaillés peuvent vous aider à identifier rapidement la cause et à résoudre le problème.
- Robustesse : Une gestion d’erreurs complète rend votre code plus robuste et fiable, améliorant sa capacité à gérer des situations inattendues.
Utilisation de Hydra pour une gestion d’erreurs avancée
Hydra propose plusieurs fonctionnalités pour une gestion d’erreurs avancée :
- Validation stricte : Hydra effectue une validation stricte de vos configurations par défaut. Si vous essayez d’accéder à un champ non défini dans votre configuration, Hydra lèvera une erreur. Cela peut aider à détecter les fautes de frappe ou les champs manquants tôt.
from omegaconf import OmegaConfimport [email protected](config_path="conf", config_name="config")def my_app(cfg): print(cfg.field_that_does_not_exist) # Raises an errorif __name__ == "__main__": my_app()
- Messages d’erreur : messages d’erreur détaillés lorsqu’une erreur se produit. Ces messages incluent souvent l’emplacement exact de l’erreur dans votre configuration, facilitant le diagnostic et la résolution du problème.
Personnalisation du comportement pour les configurations manquantes ou incorrectes
Alors que le comportement par défaut de Hydra est de lever une erreur pour les configurations manquantes ou incorrectes, vous pouvez personnaliser ce comportement en fonction de vos besoins. Par exemple :
- Champs facultatifs : Vous pouvez utiliser la méthode
OmegaConf.select
pour accéder à un champ de manière à ne pas lever d’erreur si le champ est manquant :
value = OmegaConf.select(cfg, "field_that_may_or_may_not_exist", default="default_value")
- Ignorer les types invalides : Si vous chargez des configurations à partir d’un fichier et que vous voulez que Hydra ignore les champs avec des types invalides, vous pouvez définir le drapeau
ignore_invalid_types
lors de l’appel deOmegaConf.load
:
cfg = OmegaConf.load("config.yaml", ignore_invalid_types=True)
En utilisant les capacités de gestion d’erreurs de Hydra, vous pouvez rendre votre processus de gestion de la configuration plus robuste et plus facile à déboguer.
X. Remplacements en ligne de commande
Les substitutions en ligne de commande sont une fonctionnalité puissante qui vous permet de modifier les configurations d’exécution. Cela peut être particulièrement utile dans les expériences d’apprentissage automatique, où vous devez souvent ajuster les hyperparamètres, changer de modèles ou changer l’ensemble de données.
Comprendre les Substitutions en Ligne de Commande
Vous pouvez remplacer n’importe quelle partie de votre configuration à partir de la ligne de commande. Pour ce faire, passez une pair clé=valeur
lors de l’exécution de votre application :
python my_app.py db.driver=postgresql db.user=my_user
Ainsi, votre application s’exécute avec db.driver
défini sur postgresq
et db.user
défini sur my_user
, remplaçant toutes les valeurs définies dans les fichiers de configuration ou les valeurs par défaut.
Modification des Configurations en Temps Réel en Utilisant des Arguments en Ligne de Commande
Les substitutions en ligne de commande peuvent être utilisées pour modifier les configurations de diverses manières :
- Modification de Valeurs Simples : Comme indiqué dans l’exemple précédent, vous pouvez modifier la valeur d’un seul champ dans votre configuration.
- Modification de Valeurs Nidifiées : Vous pouvez également modifier la valeur d’un champ imbriqué en utilisant la notation point :
python my_app.py training.optimizer.lr=0.01
- Ajout de Nouveaux Champs : Si vous spécifiez un champ qui n’existe pas dans votre configuration, Hydra l’ajoutera :
python my_app.py new_field=new_value
- Suppression de Champs : Vous pouvez supprimer un champ de votre configuration en le définissant sur
null
:python my_app.py field_to_remove=null
- Modification de Listes : Vous pouvez modifier la valeur d’un champ de liste :
python my_app.py data.transforms=[transform1,transform2]
Exemples Pratiques d’Utilisation de Subsitiutions en Ligne de Commande dans les Expériences d’Apprentissage Automatique
Les substitutions en ligne de commande sont particulièrement utiles en apprentissage automatique, où vous devez souvent ajuster les configurations pour différentes expériences :
- Optimisation des Hyperparamètres : Ajustez facilement les hyperparamètres pour différentes exécutions :
python train.py model.lr=0.01 model.batch_size=64
- Sélection du Modèle : Passez d’un modèle à l’autre :
python train.py model.type=resnet50
- Sélection des Données : Changez l’ensemble de données ou la division utilisée pour l’entraînement :
python train.py data.dataset=cifar10 data.split=train
L’utilisation de substitutions en ligne de commande peut grandement augmenter la flexibilité et la facilité de vos expériences d’apprentissage automatique.
XI. Utilisation d’Hydra sur un Cluster HPC Basé sur Slurm
Les clusters de calcul haute performance (HPC) sont couramment utilisés pour gérer les tâches d’apprentissage automatique à grande échelle. Ces clusters utilisent souvent l’outil de gestion des ressources Linux simple (Slurm) pour gérer la planification des tâches. Voyons comment nous pouvons utiliser Hydra sur un cluster HPC basé sur Slurm.
Hydra et Slurm : Un Bref Aperçu
Hydra comprend un plugin appelé hydra-submitit-launcher
, qui permet une intégration transparente avec la planification des tâches Slurm. Avec ce plugin, vous pouvez soumettre vos applications Hydra en tant que tâches Slurm, ce qui vous permet de tirer parti de la puissance des clusters HPC pour vos expériences d’apprentissage automatique.
Installation
Pour utiliser le lanceur Submitit avec Hydra, vous devez d’abord l’installer :
pip install hydra-submitit-launcher
Configuration
Une fois le lanceur installé, vous pouvez le configurer dans vos fichiers de configuration Hydra. Voici un exemple de configuration :
defaults: - hydra/launcher: submitit_slurm
hydra: launcher: _target_: hydra_plugins.hydra_submitit_launcher.config.SubmitterConf slurm: time: 60 nodes: 1 gpus_per_node: 2 tasks_per_node: 1 mem_per_node: 10GB cpus_per_task: 10 submitit_folder: /path/to/your/log/folder
Au-dessus, nous avons défini la limite de temps pour nos travaux à 60 minutes, en utilisant un nœud avec 2 GPU, et en consacrant 10 Go de mémoire et 10 CPU par tâche. Ajustez ces paramètres en fonction des ressources disponibles dans votre cluster.
Exécution de votre application
Vous pouvez maintenant exécuter votre application Hydra comme d’habitude :
python my_app.py
Avec le lanceur Submitit configuré, Hydra peut soumettre des travaux Slurm.
Sujets avancés : exécutions parallèles avec Slurm
La fonction multirun de Hydra et le lanceur Submitit vous permettent d’exécuter plusieurs travaux en parallèle. Par exemple, vous pouvez effectuer une recherche d’hyperparamètres sur plusieurs nœuds Slurm :
python my_app.py --multirun model.lr=0.01,0.001,0.0001
Cela soumettrait trois travaux Slurm, chacun avec un taux d’apprentissage différent.
Lecture complémentaire :
Plugin de lanceur Submitit | Hydra
PyPI
hydra.cc
Pour des informations générales sur l’utilisation de Slurm :
Gestionnaire de charge de travail Slurm
REMARQUE : Cette documentation concerne la version 23.02 de Slurm. La documentation pour les anciennes versions de Slurm est distribuée avec…
slurm.schedmd.com
XII. Hydra avec la conteneurisation (Docker/Kubernetes)
La conteneurisation à l’aide d’outils tels que Docker et Kubernetes est largement utilisée en apprentissage automatique en raison de ses avantages en termes de cohérence, de reproductibilité et de scalabilité. Cette section vous guidera sur l’utilisation de Hydra en conjonction avec Docker ou Kubernetes, en montrant comment générer des fichiers Docker dynamiquement ou des manifestations Kubernetes en fonction de la configuration.
Hydra avec Docker
Lorsque vous utilisez Docker, vous devez souvent créer des fichiers Docker avec différentes configurations. Hydra peut simplifier ce processus :
1. Dockerfile
Créez un Dockerfile avec des espaces réservés pour les options de configuration. Voici un exemple simplifié :
FROM python:3.8
WORKDIR /appCOPY . .RUN pip install -r requirements.txtCMD ["python", "my_app.py", "${CMD_ARGS}"]
Dans ce Dockerfile, ${CMD_ARGS}
est un espace réservé pour les arguments de ligne de commande que Hydra fournira.
2. Configuration de Hydra
Dans votre fichier de configuration Hydra, définissez les options de configuration à transmettre à Docker. Par exemple :
docker: image: python:3.8 cmd_args: db.driver=postgresql db.user=my_user
3. Script d’exécution de Docker
Enfin, créez un script qui utilise Hydra pour générer la commande d’exécution de Docker :
@hydra.main(config_path="config.yaml")def main(cfg): cmd = f'docker run -it {cfg.docker.image} python my_app.py {cfg.docker.cmd_args}' os.system(cmd)
if __name__ == "__main__": main()
Exécutez ce script, et Hydra lancera un conteneur Docker avec les options de configuration que vous avez spécifiées.
Hydra avec Kubernetes
L’utilisation de Hydra avec Kubernetes est un peu plus complexe, mais l’idée de base est similaire. Tout d’abord, vous créeriez une manifestation Kubernetes avec des espaces réservés pour les options de configuration, puis utilisez Hydra pour générer la commande d’application de Kubernetes.
Envisagez d’utiliser le plugin Hydra-KubeExecutor pour intégrer Hydra et Kubernetes directement.
Lecture complémentaire :
Docs Docker : Comment construire, partager et exécuter des applications
La documentation Docker est la bibliothèque officielle de Docker des ressources, des tutoriels et des guides pour vous aider à construire, partager et…
docs.docker.com
Documentation Kubernetes
Kubernetes est un moteur d’orchestration de conteneurs open source pour automatiser le déploiement, le dimensionnement et la gestion de…
kubernetes.io
XIII. Intégration avec les frameworks ML
Hydra peut considérablement simplifier le processus de gestion des configurations dans les projets d’apprentissage automatique. Cette section montrera comment intégrer Hydra avec des frameworks d’apprentissage automatique populaires tels que PyTorch, TensorFlow ou scikit-learn. Vous apprendrez comment utiliser des fichiers de configuration pour gérer les différentes étapes d’un pipeline d’apprentissage automatique, du prétraitement des données à la formation et à l’évaluation du modèle.
Hydra avec PyTorch
Lorsque vous utilisez PyTorch (ou tout autre framework ML), vous pouvez utiliser Hydra pour gérer les configurations de votre modèle, jeu de données, optimiseur et autres composants. Voici un exemple simplifié :
@hydra.main(config_path="config.yaml")def main(cfg): # Load dataset dataset = load_dataset(cfg.data)
# Initialize model model = MyModel(cfg.model) # Initialize optimizer optimizer = torch.optim.SGD(model.parameters(), lr=cfg.optim.lr) # Train and evaluate model train(model, dataset, optimizer, cfg.train) evaluate(model, dataset, cfg.eval)if __name__ == "__main__": main()
Dans cet exemple, config.yaml
contiendrait des sections distinctes pour data
, model
, optim
, train
et eval
. Cette structure permet de garder vos configurations organisées et modulaires, vous permettant d’ajuster facilement les configurations pour les différents composants de votre pipeline d’apprentissage automatique.
Par exemple, vous pourriez définir différentes architectures de modèle, jeux de données ou régimes d’entraînement dans des fichiers de configuration séparés, puis sélectionner ceux que vous souhaitez utiliser avec des substitutions de ligne de commande.
Voici des groupes de configuration d’exemple pour PyTorch :
defaults: - model: resnet50 - dataset: imagenet - optimizer: sgd
model: resnet50: num_layers: 50 alexnet: num_layers: 8dataset: imagenet: root: /path/to/imagenet cifar10: root: /path/to/cifar10optimizer: sgd: lr: 0.01 momentum: 0.9 adam: lr: 0.001
Avec ces configurations, vous pourriez facilement passer d’un ResNet-50 à AlexNet, ou d’ImageNet à CIFAR-10 simplement en modifiant les arguments de ligne de commande lorsque vous exécutez votre application.
Lecture complémentaire :
Documentation PyTorch – Documentation PyTorch 2.0
Stable : Ces fonctionnalités seront maintenues à long terme et il ne devrait généralement pas y avoir de limitations de performance majeures ou…
pytorch.org
XIV. Conclusion
Dans ce tutoriel, nous avons plongé profondément dans Hydra, un outil puissant pour la gestion de configuration dans les applications Python, y compris les projets ML. Nous avons couvert les bases, les configurations hiérarchiques, les groupes de configuration et les configurations dynamiques. Nous avons également appris comment gérer les variables d’environnement et utiliser Hydra pour le journalisation, la gestion des erreurs et les substitutions de ligne de commande.
Nous avons également exploré certaines des fonctionnalités plus avancées de Hydra, telles que multirun et les balayages, qui sont particulièrement utiles pour la gestion des expériences d’apprentissage automatique. Enfin, nous avons vu comment Hydra pourrait être utilisé sur un HPC, avec Docker et Kubernetes, et intégré à un autre package open-source de Facebook pour faire de l’apprentissage profond (c’est-à-dire PyTorch). Tout au long de ce tutoriel, nous avons vu que Hydra peut grandement simplifier la gestion des configurations, rendant votre code plus souple, robuste et maintenable.
Maîtriser un outil comme Hydra prend de la pratique. Alors continuez à expérimenter, à essayer de nouvelles choses et à repousser les limites de ce que vous pouvez faire avec vos configurations.
XV. Annexe : Commandes et astuces utiles pour Hydra
Voici quelques commandes, astuces et techniques couramment utilisées pour travailler efficacement avec Hydra dans des projets de machine learning.
Commandes Hydra couramment utilisées
- Exécuter une application avec Hydra :
python my_app.py
- Utiliser des remplacements en ligne de commande :
python my_app.py db.driver=postgresql
- Exécuter une application avec multirun :
python my_app.py — multirun training.batch_size=32,64,128
Astuces
1. Tirez parti des configurations hiérarchiques : les configurations hiérarchiques peuvent vous aider à gérer des configurations complexes et éviter la duplication. Utilisez-les pour définir des paramètres standard qui peuvent être partagés entre différentes parties de votre application.
2. Utilisez des remplacements en ligne de commande : les remplacements en ligne de commande sont un outil puissant pour ajuster les configurations en temps d’exécution. Utilisez-les pour modifier des hyperparamètres, changer de modèle ou de jeu de données pour différentes expériences.
3. Mettez en œuvre la gestion des erreurs : Hydra offre des capacités avancées de gestion des erreurs. Utilisez-les pour rendre votre code plus robuste et plus facile à déboguer.
4. Utilisez Multirun pour les balayages d’hyperparamètres : la fonction multirun de Hydra peut simplifier considérablement le processus de balayage d’hyperparamètres. Utilisez-la pour explorer l’espace d’hyperparamètres de votre modèle.
5. Continuez à explorer : Hydra a de nombreuses autres fonctionnalités à découvrir. Consultez la documentation et GitHub de Hydra pour plus d’idées et d’exemples.
Commencer | Hydra
Introduction
hydra.cc
GitHub – facebookresearch/hydra: Hydra est un framework pour configurer élégamment des applications complexes…
Hydra est un framework pour configurer élégamment des applications complexes – GitHub – facebookresearch/hydra: Hydra est un…
github.com
Partagez vos réflexions, cas d’utilisation et questions via la section de commentaires ci-dessous.
Contact
Vous souhaitez vous connecter ? Suivez le Dr. Robinson sur LinkedIn, Twitter, Facebook et Instagram. Visitez ma page d’accueil pour des articles, des blogs, des inscriptions par e-mail et plus encore !
Ingénieur en recherche en IA et entrepreneur | Joseph P. Robinson
Chercheur et entrepreneur Salutations ! En tant que chercheur, le Dr. Robinson a proposé et utilisé une IA avancée pour comprendre…
www.jrobs-vision.com.
We will continue to update IPGirl; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Problème du Gradient Disparu Causes, Conséquences et Solutions
- Classer et localiser les différentes formes de harcèlement sexuel.
- Recherche de similarité, Partie 2 Quantification de Produit
- Suppression et distillation architecturales une voie vers une compression efficace dans les modèles de diffusion texte-image d’IA
- Google AI dévoile Imagen Editor et EditBench pour améliorer et évaluer l’Inpainting d’image guidée par le texte.
- Forged in Flames Une start-up fusionne l’IA générative et la vision par ordinateur pour lutter contre les incendies de forêt.
- AI Voit Ce Que Vous Voyez Mind’s Eye est un Modèle d’IA Qui Peut Reconstruire des Scans Cérébraux en Images