ClearML-Integration
Über ClearML
ClearML ist eine Open-Source MLOps-Plattform, die entwickelt wurde, um Ihren Machine-Learning-Workflow zu optimieren und Ihnen Zeit ⏱️ zu sparen.
🔨 Verfolgen Sie jeden YOLOv5-Trainingslauf im Experiment Manager
🔧 Versionieren und greifen Sie einfach auf Ihre benutzerdefinierten Trainingsdaten mit dem integrierten ClearML Data Versioning Tool zu
🔦 Trainieren und überwachen Sie Ihre YOLOv5-Trainingsläufe remote mit ClearML Agent
🔬 Erhalten Sie die beste mAP mit ClearML Hyperparameter-Optimierung
🔭 Verwandeln Sie Ihr neu trainiertes YOLOv5-Modell mit nur wenigen Befehlen in eine API, indem Sie ClearML Serving verwenden.
Und so viel mehr. Es liegt an Ihnen, wie viele dieser Tools Sie verwenden möchten. Sie können sich an den Experimentmanager halten oder sie alle zu einer beeindruckenden Pipeline zusammenfügen!
🦾 Einrichtung
Um Ihre Experimente und/oder Daten zu verfolgen, muss ClearML mit einem Server kommunizieren. Sie haben 2 Möglichkeiten, einen zu erhalten:
Melden Sie sich entweder kostenlos für den ClearML Hosted Service an, oder richten Sie Ihren eigenen ClearML server ein. Selbst der Server ist Open-Source, sodass Sie auch bei sensiblen Daten auf der sicheren Seite sein sollten!
-
Installieren Sie das
clearml
python-Paket:pip install clearml
-
Verbinden Sie das ClearML SDK mit dem Server, indem Sie Anmeldedaten erstellen (gehen Sie oben rechts zu Einstellungen -> Workspace -> Neue Anmeldedaten erstellen), führen Sie dann den folgenden Befehl aus und befolgen Sie die Anweisungen:
clearml-init
Das ist alles! Sie sind fertig 😎
🚀 YOLOv5 mit ClearML trainieren
Um das ClearML-Experiment-Tracking zu aktivieren, installieren Sie einfach das ClearML-Pip-Paket.
pip install clearml
Dies ermöglicht die Integration mit dem YOLOv5-Trainingsskript. Jeder Trainingslauf wird von nun an vom ClearML Experiment Manager erfasst und gespeichert.
Wenn Sie das ändern möchten project_name
oder task_name
, verwenden Sie die --project
und --name
Argumente der train.py
Skript, standardmäßig wird das Projekt YOLOv5
und die Aufgabe Training
. BITTE BEACHTEN: ClearML verwendet /
als Trennzeichen für Teilprojekte, seien Sie also vorsichtig bei der Verwendung /
in Ihrem Projektnamen!
python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
oder mit benutzerdefiniertem Projekt- und Aufgabenname:
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
Dies erfasst:
- Quellcode + nicht übertragene Änderungen
- Installierte Pakete
- (Hyper-)Parameter
- Modelldateien (verwenden Sie
--save-period n
um alle n Epochen einen Checkpoint zu speichern) - Konsolenausgabe
- Skalare (mAP_0.5, mAP_0.5:0.95, Präzision, Recall, Verluste, Lernraten, ...)
- Allgemeine Informationen wie Maschinendetails, Laufzeit, Erstellungsdatum usw.
- Alle erstellten Diagramme wie Label-Correlogramm und Konfusionsmatrix
- Bilder mit Begrenzungsrahmen pro Epoche
- Mosaik pro Epoche
- Validierungsbilder pro Epoche
Das ist eine ganze Menge, oder? 🤯 Jetzt können wir all diese Informationen in der ClearML-UI visualisieren, um einen Überblick über unseren Trainingsfortschritt zu erhalten. Fügen Sie der Tabellenansicht benutzerdefinierte Spalten hinzu (z. B. mAP_0.5), damit Sie die Modelle mit der besten Leistung einfach sortieren können. Oder wählen Sie mehrere Experimente aus und vergleichen Sie sie direkt!
Wir können mit all diesen Informationen noch mehr machen, wie z. B. Hyperparameteroptimierung und Remote-Ausführung. Lesen Sie also weiter, wenn Sie sehen möchten, wie das funktioniert!
🔗 Versionsverwaltung von Datensätzen
Das Versionieren Ihrer Daten getrennt von Ihrem Code ist im Allgemeinen eine gute Idee und erleichtert auch das Abrufen der neuesten Version. Dieses Repository unterstützt die Angabe einer Dataset-Versions-ID und stellt sicher, dass die Daten abgerufen werden, falls sie noch nicht vorhanden sind. Darüber hinaus speichert dieser Workflow auch die verwendete Dataset-ID als Teil der Aufgabenparameter, sodass Sie immer sicher wissen, welche Daten in welchem Experiment verwendet wurden!
Bereiten Sie Ihren Datensatz vor
Das YOLOv5-Repository unterstützt eine Reihe verschiedener Datasets mithilfe von YAML-Dateien, die deren Informationen enthalten. Standardmäßig werden Datasets in den Ordner ../datasets
Ordner im Verhältnis zum Repository-Stammordner. Wenn Sie also das coco128
Datensatzes über den Link in der YAML-Datei oder mit den von YOLOv5 bereitgestellten Skripten verwenden, erhalten Sie diese Ordnerstruktur:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Dies kann aber jeder beliebige Datensatz sein. Sie können gerne Ihren eigenen verwenden, solange Sie sich an diese Ordnerstruktur halten.
Als Nächstes ⚠️kopieren Sie die entsprechende YAML-Datei in das Stammverzeichnis des Datensatzordners⚠️. Diese YAML-Datei enthält die Informationen, die ClearML benötigt, um den Datensatz ordnungsgemäß zu verwenden. Sie können diese natürlich auch selbst erstellen, folgen Sie einfach der Struktur der Beispiel-YAMLs.
Grundsätzlich benötigen wir die folgenden Schlüssel: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Laden Sie Ihren Datensatz hoch
Um diesen Datensatz als versionierten Datensatz in ClearML zu bekommen, gehen Sie zum Stammordner des Datensatzes und führen Sie den folgenden Befehl aus:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
Der Befehl clearml-data sync
ist eigentlich ein Kurzbefehl. Sie könnten diese Befehle auch nacheinander ausführen:
# 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
Training mit einem ClearML-Datensatz durchführen
Nachdem Sie nun einen ClearML-Datensatz haben, können Sie ihn ganz einfach verwenden, um benutzerdefinierte YOLOv5 🚀 Modelle zu trainieren!
python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache
👀 Hyperparameter-Optimierung
Nachdem unsere Experimente und Daten versioniert sind, ist es an der Zeit, einen Blick darauf zu werfen, worauf wir aufbauen können!
Mithilfe der Codeinformationen, der installierten Pakete und der Umgebungsdetails ist das Experiment selbst nun vollständig reproduzierbar. Tatsächlich ermöglicht ClearML das Klonen eines Experiments und sogar das Ändern seiner Parameter. Wir können es dann einfach mit diesen neuen Parametern automatisch erneut ausführen. Das ist im Grunde das, was HPO macht!
Um die Hyperparameter-Optimierung lokal auszuführen, haben wir ein vorgefertigtes Skript für Sie bereitgestellt. Stellen Sie einfach sicher, dass eine Trainingsaufgabe mindestens einmal ausgeführt wurde, sodass sie sich im ClearML-Experimentmanager befindet. Wir werden sie im Wesentlichen klonen und ihre Hyperparameter ändern.
Sie müssen die ID dieses template task
im Skript unter utils/loggers/clearml/hpo.py
und führen Sie es dann einfach aus. Sie können task.execute_locally()
zu task.execute()
, um sie in eine ClearML-Warteschlange einzustellen und von einem Remote-Agenten bearbeiten zu lassen.
# 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
🤯 Remote-Ausführung (fortgeschritten)
Lokales Ausführen von HPO ist wirklich praktisch, aber was ist, wenn wir unsere Experimente stattdessen auf einem Remote-Rechner ausführen möchten? Vielleicht haben Sie Zugriff auf einen sehr leistungsstarken GPU-Rechner vor Ort oder Sie haben ein Budget für die Nutzung von Cloud-GPUs. Hier kommt der ClearML Agent ins Spiel. Sehen Sie sich hier an, was der Agent alles kann:
Kurz gesagt: Jedes vom Experiment Manager verfolgte Experiment enthält genügend Informationen, um es auf einer anderen Maschine zu reproduzieren (installierte Pakete, nicht übertragene Änderungen usw.). Ein ClearML-Agent tut also genau das: Er überwacht eine Warteschlange auf eingehende Aufgaben, und wenn er eine findet, erstellt er die Umgebung neu und führt sie aus, während er weiterhin Skalare, Diagramme usw. an den Experiment Manager meldet.
Sie können jede Maschine (eine Cloud-VM, eine lokale GPU-Maschine, Ihren eigenen Laptop...) in einen ClearML-Agenten verwandeln, indem Sie einfach Folgendes ausführen:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]
Klonen, Bearbeiten und Einreihen in die Warteschlange
Wenn unser Agent läuft, können wir ihm etwas Arbeit geben. Erinnern Sie sich aus dem HPO-Abschnitt, dass wir eine Aufgabe klonen und die Hyperparameter bearbeiten können? Das können wir auch über die Schnittstelle tun!
🪄 Klonen Sie das Experiment, indem Sie mit der rechten Maustaste darauf klicken
🎯 Bearbeiten Sie die Hyperparameter nach Ihren Wünschen.
⏳ Stellen Sie die Aufgabe in eine der Warteschlangen, indem Sie mit der rechten Maustaste darauf klicken.
Eine Aufgabe remote ausführen
Jetzt können Sie eine Aufgabe wie oben beschrieben klonen oder einfach Ihr aktuelles Skript durch Hinzufügen von Folgendem markieren: task.execute_remotely()
und bei der Ausführung wird sie in eine Warteschlange gestellt, damit der Agent mit der Arbeit beginnen kann!
Um das YOLOv5-Trainingsskript remote auszuführen, müssen Sie lediglich diese Zeile zum training.py-Skript hinzufügen, nachdem der ClearML-Logger instanziiert wurde:
# ...
# 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
# ...
Wenn Sie das Trainingsskript nach dieser Änderung ausführen, führt python das Skript bis zu dieser Zeile aus. Danach wird der Code verpackt und stattdessen an die Warteschlange gesendet!
Automatische Skalierung von Workern
ClearML wird auch mit Autoscalern geliefert! Dieses Tool startet automatisch neue Remote-Maschinen in der Cloud Ihrer Wahl (AWS, GCP, Azure) und verwandelt sie in ClearML-Agenten für Sie, sobald Experimente in der Warteschlange erkannt werden. Sobald die Aufgaben verarbeitet sind, schaltet der Autoscaler die Remote-Maschinen automatisch ab, und Sie zahlen nicht mehr!
Sehen Sie sich das Video zum Einstieg in die Autoscaler unten an.
Mehr erfahren
Weitere Informationen zur Integration von ClearML in Ultralytics Modelle finden Sie in unserem ClearML-Integrationsleitfaden und erfahren Sie, wie Sie Ihren MLOps-Workflow mit anderen Tools zur Experimentverfolgung verbessern können.