Entraîner et surveiller Ultralytics YOLOv5 à distance avec ClearML
Apprends à suivre tes expériences, à versionner tes jeux de données, à régler les hyperparamètres et à entraîner des modèles Ultralytics YOLOv5 sur des machines distantes avec ClearML.
Nuvola Ladi7 min de lecture
Chez Ultralytics, nous nouons des partenariats commerciaux avec d’autres startups afin de financer la recherche et le développement de nos outils open source, comme YOLOv5, et de les garder gratuits pour tout le monde. Cet article peut contenir des liens d’affiliation vers ces partenaires.
ClearML est notre nouveau partenaire : une boîte à outils open source conçue pour te faire gagner du temps.
Avec pour mission d’accélérer l’adoption du ML, ClearML facilite l’intégration du ML à tout produit logiciel ou matériel.
Cette intégration simplifie encore davantage l’entraînement d’un modèle YOLOv5 et l’utilisation du gestionnaire d’expériences ClearML pour en assurer le suivi automatiquement. Tu peux facilement spécifier l’ID d’une version d’un jeu de données ClearML comme entrée de données ; celle-ci sera automatiquement utilisée pour entraîner ton modèle.
Passe au niveau supérieur pour le suivi de tes expériences#
- Suis chaque exécution d’entraînement YOLOv5 dans le gestionnaire d’expériences.
- Versionne et accède facilement à tes données d’entraînement personnalisées grâce à l’outil intégré de gestion des versions des données ClearML.
- Obtiens le meilleur mAP possible grâce à l’optimisation des hyperparamètres de ClearML.
- Transforme ton modèle YOLOv5 fraîchement entraîné en API en quelques commandes avec ClearML Serving.
À toi de choisir le nombre d’outils que tu veux utiliser : tu peux t’en tenir au gestionnaire d’expériences ou les enchaîner pour créer un pipeline impressionnant.
Configuration#
Pour suivre tes expériences et tes données, ClearML doit communiquer avec un serveur. Tu as deux options : créer gratuitement un compte sur le service hébergé ClearML ou configurer ton propre serveur.
Le serveur est lui aussi open source : si tu traites des données sensibles, ce n’est donc pas un problème !
- Installe le paquet Python ClearML :
pip install clearml - Connecte le SDK ClearML au serveur en créant des identifiants (en haut à droite, va dans Settings → Workspace → Create new credentials), puis exécute la commande ci-dessous et suis les instructions :
clearml-init
Tu es maintenant prêt à te lancer.
Entraîner YOLOv5 avec ClearML#
Pour activer le suivi des expériences ClearML, il suffit d’installer le paquet pip ClearML.
pip install clearmlCela activera l’intégration avec le script d’entraînement YOLOv5. À partir de maintenant, chaque exécution d’entraînement sera enregistrée et stockée par le gestionnaire d’expériences ClearML. Pour modifier project_name ou task_name, accède à notre logger personnalisé, où tu peux les changer : utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cacheCela enregistrera :
- Code source + modifications non validées
- Packages installés
- (Hyper)paramètres
- Fichiers du modèle (utilise --save-period n pour enregistrer un checkpoint toutes les n époques)
- Sortie de la console
- Valeurs scalaires (mAP50, mAP50-95, précision, rappel, pertes, taux d’apprentissage, ...)
- Informations générales telles que les détails de la machine, la durée d’exécution, la date de création, etc.
- Tous les graphiques produits, comme le corrélogramme des labels et la matrice de confusion
- Images avec des boîtes englobantes par époque
- Mosaïque par époque
- Images de validation par époque
Maintenant, nous pouvons visualiser toutes ces informations dans l’interface de ClearML pour obtenir une vue d’ensemble de la progression de notre entraînement. Ajoute des colonnes personnalisées à la vue tableau (comme mAP50) pour trier facilement les modèles selon leurs performances. Ou sélectionne plusieurs expériences et compare-les directement !
Nous pouvons faire encore plus avec toutes ces informations, par exemple optimiser les hyperparamètres et exécuter des tâches à distance ; continue donc à lire pour découvrir comment !
Gestion des versions des jeux de données#
Il est généralement judicieux de versionner tes données séparément de ton code, ce qui facilite également l’accès à la version la plus récente. Ce dépôt permet de fournir l’ID d’une version du jeu de données et veille à récupérer les données si elles ne sont pas encore présentes. De plus, ce workflow enregistre également l’ID du jeu de données utilisé dans les paramètres de la tâche ; tu sauras donc toujours avec certitude quelles données ont été utilisées pour chaque expérience !
Préparer ton jeu de données#
Le dépôt YOLOv5 prend en charge différents jeux de données grâce à des fichiers YAML qui contiennent leurs informations. Par défaut, les jeux de données sont téléchargés dans le dossier ../datasets, situé à la racine du dépôt. Ainsi, si tu as téléchargé le jeu de données COCO128 à l’aide du lien dans le fichier YAML ou des scripts fournis par YOLOv5, tu obtiens cette structure de dossiers :
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtTu peux toutefois utiliser n’importe quel jeu de données. N’hésite pas à utiliser le tien, à condition de respecter cette structure de dossiers.
Ensuite, copie le fichier YAML correspondant à la racine du dossier du jeu de données. Ces fichiers YAML contiennent les informations dont ClearML a besoin pour utiliser correctement le jeu de données. Tu peux bien sûr aussi créer toi-même ce fichier ; il te suffit de suivre la structure des exemples de fichiers YAML.
Le fichier YAML doit contenir les clés suivantes : path, train, test, val, nc et names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txtTéléverser ton jeu de données#
Pour ajouter ce jeu de données à ClearML en tant que jeu de données versionné, accède au dossier racine du jeu de données et exécute la commande suivante :
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .La commande clearml-data sync est en fait une commande raccourcie. Tu peux aussi exécuter ces commandes l’une après l’autre :
# Optionally add --parent if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data closeLancer l’entraînement à l’aide d’un jeu de données ClearML#
Maintenant que tu disposes d’un jeu de données ClearML, tu peux l’utiliser pour entraîner des modèles YOLOv5 personnalisés.
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cacheOptimisation des hyperparamètres#
Maintenant que nous avons nos expériences et une version des données, voyons ce que nous pouvons construire à partir de là !
Grâce aux informations sur le code, aux paquets installés et aux détails de l’environnement, l’expérience est désormais entièrement reproductible. ClearML te permet même de cloner une expérience et d’en modifier les paramètres. Tu peux ensuite la relancer automatiquement avec ces nouveaux paramètres, ce qui correspond essentiellement à l’optimisation des hyperparamètres (HPO).
Pour effectuer localement l’optimisation des hyperparamètres, nous avons inclus un script prêt à l’emploi. Assure-toi simplement qu’une tâche d’entraînement a été exécutée au moins une fois afin qu’elle figure dans le gestionnaire d’expériences ClearML ; le script la clone et modifie ses hyperparamètres.
Tu dois renseigner l’ID de cette tâche modèle dans le script situé à utils/loggers/clearml/hpo.py, puis l’exécuter. Tu peux remplacer task.execute_locally() par task.execute() pour placer la tâche dans une file d’attente ClearML et la faire exécuter à distance par un agent.
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.pyExécution à distance (avancé)#
Lancer l’optimisation des hyperparamètres en local est très pratique, mais que faire si nous voulons plutôt exécuter nos expériences sur une machine distante ? Tu as peut-être accès à une machine équipée d’un GPU très puissant sur site, ou un budget pour utiliser des GPU dans le cloud. C’est là que l’agent ClearML entre en jeu.
Découvre ici ce que l’agent peut faire :
En bref : chaque expérience suivie par le gestionnaire d’expériences contient suffisamment d’informations pour être reproduite sur une autre machine (packages installés, modifications non validées, etc.). Un agent ClearML s’en charge : il surveille une file d’attente pour détecter les nouvelles tâches et, lorsqu’il en trouve une, recrée l’environnement et l’exécute tout en transmettant les scalaires, les graphiques, etc. au gestionnaire d’expériences.
Tu peux transformer n’importe quelle machine (une VM cloud, une machine locale équipée d’un GPU ou ton propre ordinateur portable) en agent ClearML en exécutant simplement :
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]Cloner, modifier et mettre en file d’attente#
Maintenant que notre agent est opérationnel, nous pouvons lui confier du travail. Tu te souviens de la section sur l’optimisation des hyperparamètres ? Nous pouvons cloner une tâche et modifier ses hyperparamètres. Nous pouvons aussi le faire depuis l’interface !
- Clone l’expérience en faisant un clic droit dessus.
- Modifie les hyperparamètres pour leur attribuer les valeurs souhaitées.
- Mets la tâche en file d’attente dans l’une des files en faisant un clic droit dessus.
Exécuter une tâche à distance#
Tu peux maintenant cloner une tâche comme expliqué plus haut, ou simplement marquer ton script actuel en ajoutant task.execute_remotely() ; lors de son exécution, il sera placé dans une file d’attente afin que l’agent puisse commencer à travailler dessus !
Pour exécuter le script d’entraînement YOLOv5 à distance, il te suffit d’ajouter cette ligne au script train.py, après l’instanciation du logger ClearML :
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # instance des loggers
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ AJOUTE CETTE LIGNEDes questions ? Rejoins notre communauté et pose ta question dès aujourd’hui !
Écrit par
Commentaires
Pose une question, partage tes résultats ou aide quelqu’un.










