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 dans 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 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 + 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'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

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



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (7), RizwanMunawar (1)

Commentaires