Skip to content

ClearML Intégration

Clair|MLClair|ML

À 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 pour former un pipeline impressionnant !

ClearML tableau de bord des scalaires



🦾 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 :

    pip install clearml
    
  • 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 :

    clearml-init
    

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 .

pip install clearml>=1.2.0

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 !

python train.py --img 640 --batch 16 --epochs 3 --data coco128.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 coco128.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 !

ClearML Interface de l'ensemble de données

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 :

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ LICENSE
        |_ README.txt

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 :

cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .

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'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.

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

HPO

🤯 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 ? Peut-être que tu as accès à une machine GPU très puissante sur place, ou que 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 GPU locale, ton propre ordinateur portable... ) en un agent ClearML en l'exécutant simplement :

clearml-agent daemon --queue <queues_to_listen_to> [--docker]

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.

Enqueue une tâche à partir de l'interface utilisateur

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.

Regarde la vidéo



Créé le 2023-11-12, Mis à jour le 2024-01-12
Auteurs : glenn-jocher (5), chr043416@gmail.com (1)

Commentaires