ClearML Intégration
À propos de ClearML
ClearML est une boîte à outils open-source conçue pour te faire gagner du temps ⏱️.
🔨 Effectue le suivi de chaque entraînement YOLOv5 dans le gestionnaire d'expériences.
🔧 Versionne et accède facilement à tes données de formation personnalisées grâce à l'outil de versionnage des données intégré ClearML .
🔦 Entraîne-toi à distance et surveille tes courses d'entraînement YOLOv5 à l'aide de ClearML Agent.
🔬 Obtenir le meilleur mAP en utilisant ClearML Optimisation des hyperparamètres.
🔭 Transforme ton modèleYOLOv5 nouvellement entraîné en une API en quelques commandes à l'aide de ClearML Serving.
Et bien d'autres choses encore. C'est à toi de décider combien de ces outils tu veux utiliser, tu peux t'en tenir au gestionnaire d'expériences, ou les enchaîner tous ensemble dans un pipeline impressionnant !
🦾 Mettre les choses en place
Pour garder une trace de tes expériences et/ou de tes données, ClearML a besoin de communiquer avec un serveur. Tu as deux options pour en obtenir un :
Tu peux t'inscrire gratuitement au service hébergé deClearML ou installer ton propre serveur, voir ici. Même le serveur est open-source, donc même si tu as affaire à des données sensibles, tu devrais pouvoir t'en sortir !
-
Installe le
clearml
python paquet : -
Connecte le SDK ClearML au serveur en créant des identifiants (va en haut à droite à Paramètres -> Espace de travail -> Créer de nouveaux identifiants), puis exécute la commande ci-dessous et suis les instructions :
Voilà ! Tu as terminé 😎
🚀 Formation YOLOv5 Avec ClearML
Pour activer le suivi des expériences sur ClearML , il suffit d'installer le paquet pip ClearML .
Cela permettra l'intégration avec le script de formation YOLOv5 . À partir de maintenant, chaque formation sera capturée et stockée par le gestionnaire d'expériences ClearML .
Si tu veux changer le project_name
ou task_name
, utilise le --project
et --name
les arguments de la train.py
par défaut, le projet s'appellera YOLOv5
et la tâche Training
. VEUILLEZ NOTER : ClearML utilise /
comme délimiteur pour les sous-projets, alors fais attention quand tu utilises /
dans le nom de ton projet !
ou avec un nom de projet et de tâche personnalisé :
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
Cela permettra de capturer :
- Code source + changements non validés
- Paquets installés
- (Hyper)paramètres
- Fichiers modèles (utiliser
--save-period n
pour enregistrer un point de contrôle toutes les n époques) - Sortie de la console
- Scalaires (mAP_0.5, mAP_0.5:0.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, tels que le corrélogramme des étiquettes et la matrice de confusion.
- Images avec boîtes de délimitation par époque
- Mosaïque par époque
- Images de validation par époch
Ça fait beaucoup, non ? 🤯 Maintenant, nous pouvons visualiser toutes ces informations dans l'interface utilisateur ClearML pour avoir une vue d'ensemble de la progression de notre formation. Ajoute des colonnes personnalisées à la vue du tableau (comme par exemple mAP_0,5) pour pouvoir facilement trier sur le modèle le plus performant. Tu peux aussi sélectionner plusieurs expériences et les comparer directement !
Il y a encore plus de choses que nous pouvons faire avec toutes ces informations, comme l'optimisation des hyperparamètres et l'exécution à distance, alors continue de lire si tu veux voir comment cela fonctionne !
🔗 Gestion des versions des jeux de données
Versionner tes données séparément de ton code est généralement une bonne idée et permet également d'acquérir facilement la dernière version. Ce référentiel prend en charge la fourniture d'un identifiant de version du jeu de données, et il s'assurera d'obtenir les données si elles n'existent pas encore. En outre, ce flux de travail enregistre également l'identifiant du jeu de données utilisé dans les paramètres de la tâche, de sorte que tu sauras toujours avec certitude quelles données ont été utilisées dans quelle expérience !
Prépare ton jeu de données
Le dépôt YOLOv5 prend en charge un certain nombre d'ensembles de données différents en utilisant des fichiers YAML contenant leurs informations. Par défaut, les ensembles de données sont téléchargés dans le répertoire ../datasets
par rapport au dossier racine du référentiel. Ainsi, si tu as téléchargé le coco128
en utilisant le lien dans le YAML ou avec les scripts fournis par yolov5, tu obtiens cette structure de dossier :
Mais il peut s'agir de n'importe quel ensemble de données que tu souhaites. N'hésite pas à utiliser les tiens, tant que tu respectes la structure de ce dossier.
Ensuite,⚠️copy le fichier YAML correspondant à la racine du jeu de données folder⚠️. Ce fichier YAML contient les informations dont ClearML aura besoin pour utiliser correctement le jeu de données. Tu peux aussi le faire toi-même, bien sûr, il te suffit de suivre la structure des exemples de fichiers YAML.
En gros, nous avons besoin des clés suivantes : path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Télécharger ton jeu de données
Pour intégrer ce jeu de données dans ClearML en tant que jeu de données versionné, va dans le dossier racine du jeu de données et exécute la commande suivante :
La commande clearml-data sync
est en fait une commande abrégée. Tu peux aussi exécuter ces commandes l'une après l'autre :
# Optionally add --parent <parent_dataset_id> 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 close
Entraînement à la course à l'aide d'un ensemble de données ClearML
Maintenant que tu as un ensemble de données ClearML , tu peux très simplement l'utiliser pour entraîner des modèles YOLOv5 🚀 personnalisés !
python train.py --img 640 --batch 16 --epochs 3 --data clearml://<your_dataset_id> --weights yolov5s.pt --cache
👀 Optimisation des hyperparamètres
Maintenant que nos expériences et nos données sont versionnées, il est temps de jeter un coup d'œil à ce que nous pouvons construire par-dessus !
En utilisant les informations sur le code, les paquets installés et les détails de l'environnement, l'expérience elle-même est maintenant complètement reproductible. En fait, ClearML te permet de cloner une expérience et même de changer ses paramètres. Il suffit ensuite de la réexécuter automatiquement avec ces nouveaux paramètres, c'est en gros ce que fait HPO !
Pour exécuter l'optimisation des hyperparamètres localement, nous avons inclus un script préétabli pour toi. Assure-toi simplement qu'une tâche d'apprentissage a été exécutée au moins une fois, de sorte qu'elle se trouve dans le gestionnaire d'expériences ClearML . Nous allons essentiellement la cloner et modifier ses hyperparamètres.
Tu devras remplir l'identifiant de ce fichier. template task
dans le script qui se trouve à utils/loggers/clearml/hpo.py
et exécute-le :) Tu peux changer task.execute_locally()
à task.execute()
pour le mettre dans une file d'attente ClearML et demander à un agent distant de travailler dessus à la place.
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.py
🤯 Exécution à distance (avancée)
Exécuter HPO localement est vraiment pratique, mais que se passe-t-il si nous voulons plutôt exécuter nos expériences sur une machine distante ? Tu as peut-être accès à une machine GPU très puissante sur place, ou tu disposes d'un certain budget pour utiliser des GPU dans le nuage. C'est là que l'agent ClearML entre en jeu. Découvre ce que l'agent peut faire ici :
En bref : chaque expérience suivie par le gestionnaire d'expériences contient suffisamment d'informations pour la reproduire sur une machine différente (paquets installés, changements non validés, etc.). C'est ce que fait un agent ClearML : il écoute une file d'attente pour les tâches entrantes et lorsqu'il en trouve une, il recrée l'environnement et l'exécute tout en continuant à rapporter les scalaires, les tracés, etc. au gestionnaire d'expériences.
Tu peux transformer n'importe quelle machine (une VM dans le nuage, une machine locale GPU , ton propre ordinateur portable ... ) en un agent ClearML en l'exécutant simplement :
Clonage, édition et mise en file d'attente
Notre agent étant en marche, nous pouvons lui donner un peu de travail. Tu te souviens dans la section HPO que nous pouvons cloner une tâche et modifier les hyperparamètres ? Nous pouvons aussi le faire à partir de l'interface !
🪄 Clone l'expérience en faisant un clic droit dessus.
🎯 Modifie les hyperparamètres en fonction de ce que tu souhaites qu'ils soient.
⏳ Enqueue la tâche dans l'une des files d'attente en cliquant dessus avec le bouton droit de la souris.
Exécuter une tâche à distance
Tu peux maintenant cloner une tâche comme nous l'avons expliqué plus haut, ou simplement marquer ton script actuel en ajoutant task.execute_remotely()
et une fois exécutée, elle sera placée dans une file d'attente, pour que l'agent puisse commencer à travailler dessus !
Pour exécuter le script de formation YOLOv5 à distance, il te suffit d'ajouter cette ligne au script training.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) # loggers instance
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ ADD THIS LINE
# Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML
data_dict = loggers.clearml.data_dict
# ...
Lorsque tu exécuteras le script de formation après cette modification, python exécutera le script jusqu'à cette ligne, après quoi il emballera le code et l'enverra dans la file d'attente à la place !
Mise à l'échelle automatique des travailleurs
ClearML vient aussi avec des autoscalers ! Cet outil démarre automatiquement de nouvelles machines distantes dans le nuage de ton choix (AWS, GCP, Azure) et les transforme en agents ClearML pour toi dès qu'il y a des expériences détectées dans la file d'attente. Une fois les tâches traitées, l'autoscaler éteindra automatiquement les machines distantes, et tu arrêteras de payer !
Regarde la vidéo de démarrage des autoscalers ci-dessous.