Intégration ClearML

ClearML MLOps experiment tracking platform

À propos de ClearML

ClearML est une plateforme MLOps open-source conçue pour rationaliser les flux de travail d'apprentissage automatique et économiser du temps d'ingénierie.

  • 🔨 Suis chaque exécution d'entraînement YOLOv5 dans le gestionnaire d'expériences.
  • 🔧 Versionne et accède à tes données d'entraînement personnalisées avec l'outil de versionnage de données intégré de ClearML.
  • 🔦 Entraîne et surveille à distance les exécutions YOLOv5 en utilisant l'agent ClearML.
  • 🔬 Trouve le meilleur mAP avec l'optimisation des hyperparamètres de ClearML.
  • 🔭 Transforme ton modèle YOLOv5 entraîné en une API en quelques commandes en utilisant ClearML Serving.

Utilise autant ou aussi peu de ces outils que tu en as besoin — commence par le gestionnaire d'expériences seul, ou enchaîne tout dans un pipeline complet.

Tableau de bord des scalaires ClearML montrant les métriques d'entraînement YOLOv5

🦾 Configuration

ClearML doit communiquer avec un serveur pour suivre tes expériences et tes données. Tu as deux options :

Ensuite, installe le package Python clearml et connecte le SDK à ton serveur :

pip install clearml

Génère des identifiants dans Paramètres → Espace de travail → Créer de nouveaux identifiants (en haut à droite de l'interface utilisateur ClearML), puis exécute :

clearml-init

Suis les instructions. C'est tout — la configuration est terminée.

🚀 Entraînement de YOLOv5 avec ClearML

Pour activer le suivi des expériences, installe le package pip ClearML si tu ne l'as pas déjà fait :

pip install clearml

Cela permettra l'intégration avec le script d'entraînement YOLOv5. Chaque exécution d'entraînement à partir de maintenant sera capturée et stockée par le gestionnaire d'expériences de ClearML.

Pour personnaliser les noms du projet et de la tâche, passe --project et --name à train.py. Les valeurs par défaut sont YOLOv5 et Training. ClearML utilise / comme délimiteur de sous-projet, donc évite les / dans les noms de projets personnalisés.

python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

Ou avec des noms personnalisés :

python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

Chaque exécution capture :

  • Le code source et les modifications non validées
  • Les packages installés
  • Les hyperparamètres
  • Les checkpoints du modèle (utilise --save-period n pour sauvegarder toutes les n époques)
  • La sortie de la console
  • Les scalaires (mAP_0.5, mAP_0.5:0.95, précision, rappel, pertes, taux d'apprentissage)
  • Les détails de la machine, le temps d'exécution et la date de création
  • Les graphiques générés tels que le corrélogramme des étiquettes et la matrice de confusion
  • Les images avec les boîtes englobantes par époque
  • Les visualisations en mosaïque par époque
  • Les images de validation par époque

Tout apparaît dans l'interface utilisateur ClearML afin que tu puisses surveiller l'entraînement à un seul endroit. Ajoute des colonnes personnalisées (par exemple, mAP_0.5) pour trier par le modèle le plus performant, ou sélectionne plusieurs expériences pour les comparer côte à côte.

Continue ta lecture pour l'optimisation des hyperparamètres et l'exécution à distance.

🔗 Gestion du versionnage des jeux de données

Versionner les données séparément du code facilite la récupération de la dernière version et garantit une reproductibilité totale. Ce dépôt accepte un ID de version de jeu de données, récupère les données automatiquement si elles sont manquantes, et enregistre l'ID comme paramètre de tâche afin que tu saches toujours quelles données ont été utilisées dans quelle expérience.

Interface de gestion du versionnage de jeux de données ClearML

Prépare ton jeu de données

Le dépôt YOLOv5 prend en charge de nombreux jeux de données via des fichiers de configuration YAML. Par défaut, les jeux de données sont téléchargés dans le dossier ../datasets relatif à la racine du dépôt. Après avoir téléchargé coco128, la structure du dossier ressemble à ceci :

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

N'importe quel jeu de données fonctionne, à condition de préserver cette structure.

Ensuite, copie le fichier YAML du jeu de données dans le dossier racine du jeu de données — ClearML lit ce fichier pour utiliser le jeu de données correctement. Tu peux écrire ton propre YAML en suivant l'exemple de mise en page, en t'assurant qu'il définit path, train, test, val, nc et names.

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ coco128.yaml  # <---- HERE
        |_ LICENSE
        |_ README.txt

Télécharge ton jeu de données

Pour enregistrer le jeu de données en tant que jeu de données versionné ClearML, place-toi dans son dossier racine et exécute :

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

clearml-data sync est un raccourci pour la séquence suivante, que tu peux également exécuter explicitement :

# Add --parent <parent_dataset_id> to base this version on a previous one.
# Duplicate files are not re-uploaded.
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close

Entraîne-toi sur un jeu de données ClearML

Une fois le jeu de données enregistré, pointe l'entraînement vers celui-ci par ID :

python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache

👀 Optimisation des hyperparamètres

Avec des expériences et des données versionnées, tu peux construire par-dessus. Comme chaque expérience suivie capture l'environnement complet — code, packages installés et configuration — les exécutions sont totalement reproductibles. ClearML te permet de cloner une expérience, de modifier ses paramètres et de la relancer automatiquement, ce qui est le fondement de l'optimisation des hyperparamètres (HPO).

Pour exécuter l'HPO localement, utilise le script fourni. Assure-toi d'abord qu'une tâche d'entraînement existe dans le gestionnaire d'expériences — le script la clone et fait varier ses hyperparamètres.

Remplis l'ID de la tâche modèle dans utils/loggers/clearml/hpo.py, puis exécute :

# Install Optuna or change the optimizer to RandomSearch.
pip install optuna
python utils/loggers/clearml/hpo.py

Passe task.execute_locally() à task.execute() pour envoyer le travail vers une file d'attente ClearML afin qu'un agent distant le récupère.

Tableau de bord HPO ClearML avec les métriques YOLOv5

🤯 Exécution à distance (avancé)

Exécuter l'HPO localement est pratique, mais tu voudras souvent effectuer des expériences sur du matériel plus puissant — une machine GPU sur site ou une instance cloud. C'est le rôle de l'agent ClearML :

Chaque expérience suivie contient tout ce qui est nécessaire pour la reproduire sur une autre machine (packages installés, modifications non validées et configuration). Un agent ClearML écoute une file d'attente, récupère les tâches entrantes, recrée l'environnement, exécute le travail et renvoie les scalaires et les graphiques au gestionnaire d'expériences.

Transforme n'importe quelle machine — une machine virtuelle cloud, une machine GPU locale ou un ordinateur portable — en un agent ClearML avec :

clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]

Clonage, édition et mise en file d'attente

Avec un agent en cours d'exécution, tu peux lui assigner du travail directement depuis l'interface utilisateur :

  • 🪄 Fais un clic droit sur une expérience et clone-la.
  • 🎯 Modifie ses hyperparamètres.
  • ⏳ Fais un clic droit sur la tâche clonée et mets-la dans une file d'attente cible.

Mettre une tâche en file d'attente depuis l'UI

Exécution d'une tâche à distance

Tu peux également marquer un script en cours d'exécution pour une exécution à distance par programmation en ajoutant task.execute_remotely() après que le logger ClearML ait été instancié. Ajoute la ligne en surbrillance à train.py :

# ...
# 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 None unless the user selected a ClearML dataset, in which case ClearML fills it in.
        data_dict = loggers.clearml.data_dict
# ...

Après cette modification, l'exécution du script d'entraînement se fait jusqu'à cette ligne, empaquette le code et l'envoie à la file d'attente.

Auto-scaling des workers

ClearML est fourni avec des autoscalers qui démarrent des machines distantes sur AWS, GCP ou Azure lorsqu'une file d'attente a des expériences en attente, les convertissent en agents ClearML et les arrêtent lorsque le travail est terminé — ainsi tu ne paies que pour le calcul qui est réellement en cours d'exécution.

Regarde la vidéo de démarrage ci-dessous :

Regarder la vidéo

En savoir plus

Pour plus d'informations sur l'intégration de ClearML avec les modèles Ultralytics, consulte notre guide d'intégration ClearML et explore comment tu peux améliorer ton flux de travail MLOps avec d'autres outils de suivi d'expériences.

Commentaires