ClearML Intégration
A propos de ClearML
ClearML est une boîte à outils open-source conçue pour vous faire gagner du temps ⏱️.
🔨 Suivi de chaque entraînement YOLOv5 dans le gestionnaire d'expériences
🔧 Versionnez et accédez facilement à vos données de formation personnalisées grâce à l'outil intégré ClearML Data Versioning Tool.
🔦 Entraînez-vous à distance et surveillez vos parcours d'entraînement YOLOv5 à l'aide de ClearML Agent
🔬 Obtenir le meilleur mAP en utilisant ClearML Hyperparameter Optimization
🔭 Transformez votre modèleYOLOv5 nouvellement formé en une API en quelques commandes à l'aide de ClearML Serving
Et bien d'autres choses encore. C'est à vous de décider combien de ces outils vous voulez utiliser, vous pouvez vous en tenir au gestionnaire d'expériences, ou les enchaîner tous ensemble pour former un pipeline impressionnant !
🦾 La mise en place
Pour garder une trace de vos expériences et/ou de vos données, ClearML a besoin de communiquer avec un serveur. Vous avez deux options pour en obtenir un :
Vous pouvez soit vous inscrire gratuitement au service hébergé deClearML , soit installer votre propre serveur, voir ici. Même le serveur est open-source, donc même si vous traitez des données sensibles, vous devriez être en mesure de le faire !
-
Installer le
clearml
python l'emballage : -
Connectez le SDK ClearML au serveur en créant des identifiants (allez en haut à droite à Settings -> Workspace -> Create new credentials), puis exécutez la commande ci-dessous et suivez les instructions :
Voilà, c'est fait ! Vous avez 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 entraînement sera capturé et stocké par le gestionnaire d'expériences ClearML .
Si vous souhaitez modifier le project_name
ou task_name
, utiliser 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, il faut donc être prudent lors de l'utilisation de l'option /
dans le nom de votre 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
Il s'agit de capturer :
- Code source + modifications non validées
- 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 épisode
C'est beaucoup, n'est-ce pas ? 🤯 Maintenant, nous pouvons visualiser toutes ces informations dans l'interface utilisateur ClearML pour obtenir une vue d'ensemble de la progression de notre formation. Ajoutez des colonnes personnalisées à la vue du tableau (comme par exemple mAP_0,5) afin de pouvoir facilement trier le modèle le plus performant. Vous pouvez également sélectionner plusieurs expériences et les comparer directement !
Il y a encore plus à faire avec toutes ces informations, comme l'optimisation des hyperparamètres et l'exécution à distance, alors continuez à lire si vous voulez voir comment cela fonctionne !
🔗 Gestion des versions des ensembles de données
Versionner vos données séparément de votre code est généralement une bonne idée et facilite l'acquisition de 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 ne sont pas encore disponibles. En outre, ce flux de travail enregistre également l'ID du jeu de données utilisé dans les paramètres de la tâche, de sorte que vous saurez toujours avec certitude quelles données ont été utilisées dans quelle expérience !
Préparer votre 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 vous avez téléchargé le fichier coco128
en utilisant le lien dans le YAML ou avec les scripts fournis par yolov5, vous obtenez la structure de dossier suivante :
Mais il peut s'agir de n'importe quel ensemble de données. N'hésitez pas à utiliser les vôtres, tant que vous respectez cette structure de dossiers.
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. Vous pouvez bien sûr le créer vous-même, en suivant simplement la structure des exemples de fichiers YAML.
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 votre jeu de données
Pour intégrer ce jeu de données dans ClearML en tant que jeu de données versionné, allez dans le dossier racine du jeu de données et exécutez la commande suivante :
La commande clearml-data sync
est en fait une commande abrégée. Vous pouvez également 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 vous disposez d'un ensemble de données ClearML , vous pouvez 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 voir ce que nous pouvons construire au-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 vous 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. Il suffit de s'assurer qu'une tâche d'entraînement 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.
Vous devez remplir l'identifiant de ce fichier. template task
dans le script qui se trouve à l'adresse suivante utils/loggers/clearml/hpo.py
et l'exécuter :) Vous pouvez changer task.execute_locally()
à task.execute()
de le mettre dans une file d'attente ClearML et de 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é)
Exécuter HPO localement est très pratique, mais que faire si nous voulons exécuter nos expériences sur une machine distante ? Vous avez peut-être accès à une machine GPU très puissante sur site, ou vous disposez d'un budget pour utiliser des GPU en nuage. C'est là que l'agent ClearML entre en jeu. Découvrez 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.
Vous pouvez transformer n'importe quelle machine (une VM dans le nuage, une machine locale GPU , votre propre ordinateur portable ... ) en un agent ClearML en exécutant simplement :
Clonage, édition et mise en file d'attente
Une fois notre agent en marche, nous pouvons lui donner du travail. Vous vous souvenez dans la section HPO que nous pouvons cloner une tâche et éditer les hyperparamètres ? Nous pouvons également le faire à partir de l'interface !
🪄 Cloner l'expérience en cliquant dessus avec le bouton droit de la souris
🎯 Modifiez les hyperparamètres pour qu'ils correspondent à ce que vous souhaitez.
⏳ Enqueuter 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
Vous pouvez maintenant cloner une tâche comme nous l'avons expliqué ci-dessus, ou simplement marquer votre 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 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
# ...
Lors de l'exécution du script de formation après cette modification, python exécutera le script jusqu'à cette ligne, après quoi il empaquettera 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 votre choix (AWS, GCP, Azure) et les transforme en agents ClearML pour vous chaque fois que des expériences sont détectées dans la file d'attente. Une fois les tâches traitées, l'autoscaler fermera automatiquement les machines distantes, et vous cesserez de payer !
Regardez la vidéo de démarrage des autoscalers ci-dessous.