Intégration ClearML
À propos de ClearML
ClearML est une plateforme MLOps open source conçue pour rationaliser votre flux de travail d'apprentissage automatique et vous faire gagner du temps ⏱️.
🔨 Suivez chaque exécution d'entraînement YOLOv5 dans le gestionnaire d'expériences.
🔧 Versionnez et accédez facilement à vos données d'entraînement personnalisées grâce à l'outil de gestion des versions de données ClearML intégré.
🔦 Entraînez et surveillez à distance vos exécutions d'entraînement YOLOv5 à l'aide de ClearML Agent
🔬 Obtenez le meilleur mAP possible grâce à l'optimisation des hyperparamètres ClearML.
🔭 Transformez votre modèle YOLOv5 nouvellement entraîné en une API en quelques commandes grâce à ClearML Serving.
Et bien plus 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 dans un pipeline impressionnant !
🦾 Mise en place
Pour assurer le suivi de vos expériences et/ou de vos données, ClearML doit communiquer avec un serveur. Vous avez 2 options pour en obtenir un :
Inscrivez-vous gratuitement au service hébergé ClearML ou configurez votre propre serveur ClearML. Même le serveur est open source, donc même si vous traitez des données sensibles, vous devriez être tranquille !
-
Installez le
clearml
package python :pip install clearml
-
Connectez le SDK ClearML au serveur en créant des identifiants (allez en haut à droite dans Paramètres -> Espace de travail -> Créer de nouveaux identifiants), puis exécutez la commande ci-dessous et suivez les instructions :
clearml-init
C'est tout ! Vous avez terminé 😎
🚀 Entraînement de YOLOv5 avec ClearML
Pour activer le suivi des expériences ClearML, installez simplement le package pip ClearML.
pip install clearml
Cela permettra l'intégration avec le script d'entraînement YOLOv5. Chaque exécution d'entraînement sera désormais capturée et stockée par le gestionnaire d'expériences ClearML.
Si vous souhaitez modifier le project_name
ou task_name
, utilisez le --project
et --name
arguments du train.py
script, par défaut, le projet sera nommé YOLOv5
et la tâche Training
. VEUILLEZ NOTER : ClearML utilise /
comme délimiteur pour les sous-projets, soyez donc prudent lorsque vous utilisez /
dans le nom de votre projet !
python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
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 + modifications non validées
- Paquets installés
- (Hyper)paramètres
- Fichiers de modèle (utiliser
--save-period n
pour enregistrer un checkpoint toutes les n epochs) - 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, l'exécution, la date de création, etc.
- Tous les graphiques produits tels que le corrélogramme d'étiquettes et la matrice de confusion
- Images avec des cadres de délimitation par époque
- Mosaïque par époque
- Images de validation par époque
C'est beaucoup, n'est-ce pas ? 🤯 Maintenant, nous pouvons visualiser toutes ces informations dans l'interface utilisateur de ClearML pour avoir un aperçu de notre progression de l'entraînement. Ajoutez des colonnes personnalisées à la vue de tableau (par exemple, mAP_0.5) afin de pouvoir facilement trier le modèle le plus performant. Ou sélectionnez plusieurs expériences et comparez-les directement !
Nous pouvons faire encore plus avec toutes ces informations, comme l'optimisation des hyperparamètres et l'exécution à distance. Continuez votre lecture si vous voulez voir comment cela fonctionne !
🔗 Gestion des versions de l'ensemble de données
Le contrôle de version de vos données séparément de votre code est généralement une bonne idée et facilite également l'acquisition de la dernière version. Ce référentiel prend en charge la fourniture d'un ID de version de l'ensemble de données, et il s'assurera d'obtenir les données si elles ne sont pas encore là. De plus, ce flux de travail enregistre également l'ID de l'ensemble de données utilisé dans le cadre des paramètres de la tâche, vous saurez donc 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 ../datasets
dossier par rapport au dossier racine du référentiel. Donc, si vous avez téléchargé le coco128
jeu de données en utilisant le lien dans le YAML ou avec les scripts fournis par yolov5, vous obtenez cette structure de dossiers :
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Mais il peut s'agir de n'importe quel ensemble de données de votre choix. N'hésitez pas à utiliser le vôtre, à condition de respecter cette structure de dossiers.
Ensuite, ⚠️copiez le fichier YAML correspondant à la racine du dossier de l'ensemble de données⚠️. Ce fichier YAML contient les informations dont ClearML aura besoin pour utiliser correctement l'ensemble de données. Vous pouvez également le créer vous-même, bien sûr, il 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 votre ensemble de données
Pour intégrer cet ensemble de données dans ClearML en tant qu’ensemble de données versionné, accédez au dossier racine de l’ensemble de données et exécutez la commande suivante :
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
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
Exécuter l'entraînement à l'aide d'un jeu de données ClearML
Maintenant que vous avez 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 jeter un coup d'œil à ce que nous pouvons construire par-dessus !
Grâce aux informations de code, aux packages installés et aux détails de l'environnement, l'expérience elle-même est désormais entièrement reproductible. En fait, ClearML vous permet de cloner une expérience et même de modifier ses paramètres. Nous pouvons ensuite simplement la relancer avec ces nouveaux paramètres automatiquement, c'est essentiellement ce que fait HPO !
Pour exécuter l'optimisation des hyperparamètres localement, nous avons inclus un script pré-fait pour vous. Assurez-vous simplement qu'une tâche de formation a été exécutée au moins une fois, afin qu'elle se trouve dans le gestionnaire d'expériences ClearML, nous allons essentiellement la cloner et modifier ses hyperparamètres.
Vous devrez indiquer l'ID de cet élément. template task
dans le script trouvé à l'adresse utils/loggers/clearml/hpo.py
et ensuite, exécutez-le simplement. Vous pouvez modifier task.execute_locally()
à task.execute()
pour le placer dans une file d’attente ClearML et demander à un agent distant de s’en charger.
# 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é)
L'exécution de HPO en local est très pratique, mais que se passe-t-il si nous voulons exécuter nos expériences sur une machine distante ? Peut-être avez-vous accès à une machine GPU très puissante sur site, ou avez-vous un budget pour utiliser des GPU dans le cloud. 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 autre machine (packages installés, modifications non validées, etc.). Un agent ClearML fait donc exactement cela : 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 signalant les scalaires, les tracés, etc. au gestionnaire d'expériences.
Vous pouvez transformer n'importe quelle machine (une VM cloud, une machine GPU locale, votre propre ordinateur portable...) en un agent ClearML en exécutant simplement :
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]
Clonage, édition et mise en file d'attente
Maintenant que notre agent est en cours d'exécution, nous pouvons lui donner du travail. Vous vous souvenez de la section HPO où nous pouvions cloner une tâche et modifier les hyperparamètres ? Nous pouvons le faire aussi depuis l'interface !
🪄 Clonez l'expérience en effectuant un clic droit dessus
🎯 Modifiez les hyperparamètres selon vos souhaits
⏳ Mettre la tâche en file d'attente dans l'une des files d'attente en cliquant dessus avec le bouton droit de la souris
Exécution d'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 lors de l'exécution, il sera placé dans une file d'attente, pour que l'agent commence à travailler dessus !
Pour exécuter le script d'entraînement YOLOv5 à distance, il vous 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 d'entraînement après cette modification, python exécutera le script jusqu'à cette ligne, après quoi il empaquetera le code et l'enverra à la file d'attente !
Workers à mise à l'échelle automatique
ClearML est également livré avec des autoscalers ! Cet outil lancera automatiquement de nouvelles machines distantes dans le cloud de votre choix (AWS, GCP, Azure) et les transformera 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 arrêtera automatiquement les machines distantes, et vous arrêtez de payer !
Consultez la vidéo de démarrage des autoscalers ci-dessous.
En savoir plus
Pour plus d'informations sur l'intégration de ClearML avec les modèles Ultralytics, consultez notre guide d'intégration ClearML et découvrez comment vous pouvez améliorer votre flux de travail MLOps avec d'autres outils de suivi des expériences.