Ultralytics YOLOv5 mit ClearML remote trainieren und überwachen

21. Oktober 2022
Entdecken Sie unsere Partnerschaft mit ClearML für eine verbesserte Ultralytics YOLOv5-Erfahrung mit nahtloser ML-Integration, Experimentverfolgung und mehr.

21. Oktober 2022
Entdecken Sie unsere Partnerschaft mit ClearML für eine verbesserte Ultralytics YOLOv5-Erfahrung mit nahtloser ML-Integration, Experimentverfolgung und mehr.
Wir bei Ultralytics arbeiten kommerziell mit anderen Startups zusammen, um die Forschung und Entwicklung unserer großartigen Open-Source-Tools wie YOLOv5 zu finanzieren, damit diese für alle kostenlos bleiben. Dieser Artikel kann Affiliate-Links zu diesen Partnern enthalten.
ClearML ist unser neuester Partner: eine Open-Source-Toolbox, die Ihnen Zeit sparen soll.
Mit dem Ziel, die ML-Einführung zu beschleunigen, macht ClearML die ML-Integration in jede Software und Hardware nahtlos.
Diese Integration macht es noch einfacher, ein YOLOv5-Modell zu trainieren und den ClearML-Experimentmanager zu verwenden, um es automatisch zu verfolgen. Sie können einfach eine ClearML-Datensatzversions-ID als Dateneingabe angeben, und diese wird automatisch zum Trainieren Ihres Modells verwendet.
Es liegt an Ihnen, wie viele dieser Tools Sie verwenden möchten. Sie können sich an den Experiment Manager halten oder sie alle zu einer beeindruckenden Pipeline zusammenfügen.
Damit ClearML Ihre Experimente und Daten verfolgen kann, muss es mit einem Server kommunizieren. Hierfür haben Sie zwei Möglichkeiten: entweder Sie melden sich kostenlos für den ClearML Hosted Service an oder Sie richten Ihren eigenen Server ein, siehe hier.
Sogar der Server ist Open-Source, wenn Sie also mit sensiblen Daten umgehen, ist das kein Problem!
Et voilà! Sie sind startklar...
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-Experimentmanager erfasst und gespeichert. Wenn Sie den project_name oder task_name ändern möchten, gehen Sie zu unserem benutzerdefinierten Logger, wo Sie ihn ändern können: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
Dies erfasst:
Nicht schlecht! 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 leicht nach dem Modell mit der besten Leistung sortieren können. Oder wählen Sie mehrere Experimente aus und vergleichen Sie sie direkt!
Es gibt noch mehr, was wir mit all diesen Informationen tun können, wie z. B. Hyperparameter-Optimierung und Remote-Ausführung. Lesen Sie also weiter, um zu erfahren, wie!
Es ist im Allgemeinen eine gute Idee, Ihre Daten getrennt von Ihrem Code zu versionieren, und es erleichtert auch das Abrufen der neuesten Version. Dieses Repository unterstützt die Angabe einer Datensatz-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 Datensatz-ID als Teil der Aufgabenparameter, sodass Sie immer sicher wissen, welche Daten in welchem Experiment verwendet wurden!
Das YOLOv5-Repository unterstützt eine Reihe verschiedener Datensätze mithilfe von YAML-Dateien, die deren Informationen enthalten. Standardmäßig werden Datensätze in den Ordner ../datasets im Verhältnis zum Stammordner des Repositorys heruntergeladen. Wenn Sie also den coco128-Datensatz über den Link in der YAML-Datei oder mit den von yolov5 bereitgestellten Skripten heruntergeladen haben, erhalten Sie diese Ordnerstruktur:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Dies kann jedoch jeder beliebige Datensatz sein. Sie können gerne Ihre 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-Dateien enthalten die Informationen, die ClearML benötigt, um den Datensatz ordnungsgemäß zu verwenden. Sie können dies natürlich auch selbst erstellen, folgen Sie einfach der Struktur der Beispiel-YAMLs.
Im Wesentlichen benötigen wir die folgenden Schlüssel: path, train, test, val, nc, names.
..
|_ yolov5
|_ Datensätze
|_ coco128
|_ Bilder
|_ Beschriftungen
|_ coco128.yaml # ← HIER!
|_ LIZENZ
|_ README.txt
Um diesen Datensatz als versionierten Datensatz in ClearML zu übernehmen, 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:
# Optional --parent hinzufügen, wenn Sie es basieren möchten
# diese Version auf einer anderen Datensatzversion, sodass keine doppelten Dateien hochgeladen werden!
clearml-data create --name coco128 --project YOLOv5/p>
clearml-data add --files .
clearml-data close
Nachdem Sie nun ein ClearML-Dataset haben, können Sie es ganz einfach verwenden, um benutzerdefinierte YOLOv5-Modelle zu trainieren.
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache
Nachdem wir nun unsere Experimente und Datenversion haben, ist es an der Zeit, einen Blick darauf zu werfen, worauf wir aufbauen können!
Durch die Verwendung der Code-Informationen, 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, was im Grunde das ist, was HPO macht!
Um die Hyperparameter-Optimierung lokal auszuführen, haben wir ein vorgefertigtes Skript beigefügt. Stellen Sie einfach sicher, dass eine Trainingsaufgabe mindestens einmal ausgeführt wurde, damit sie sich im ClearML-Experimentmanager befindet. Wir werden sie im Wesentlichen klonen und ihre Hyperparameter ändern.
Sie müssen die ID dieser Vorlagenaufgabe in das Skript unter utils/loggers/clearml/hpo.py eintragen und es dann einfach ausführen. Sie können task.execute_locally() in task.execute() ändern, um es in eine ClearML-Warteschlange einzustellen und einen Remote-Agenten daran arbeiten zu lassen.
# Um optuna zu verwenden, installieren Sie es zuerst, andernfalls können Sie den Optimierer einfach in RandomSearch ändern pip install optuna python utils/loggers/clearml/hpo.py
Das lokale Ausführen von HPO ist wirklich praktisch, aber was ist, wenn wir unsere Experimente stattdessen auf einem Remote-Rechner ausführen wollen? Vielleicht haben Sie Zugriff auf eine sehr leistungsstarke GPU-Maschine vor Ort, oder Sie haben ein Budget, um Cloud-GPUs zu nutzen. Hier kommt der ClearML Agent ins Spiel.
Sehen Sie hier, was der Agent leisten kann:
Kurz gesagt: Jedes vom Experimentmanager 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 hört auf eine Warteschlange nach eingehenden 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 Experimentmanager 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 [--docker]
Wenn unser Agent läuft, können wir ihm 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
⏳ Die Aufgabe durch Rechtsklick in eine beliebige Warteschlange einreihen
Jetzt können Sie eine Aufgabe wie oben beschrieben klonen oder einfach Ihr aktuelles Skript mit task.execute_remotely() markieren. Bei der Ausführung wird es 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!
ClearML verfügt auch über Auto-Scaler! Dieses Tool startet automatisch neue Remote-Maschinen in der Cloud Ihrer Wahl (AWS, GCP, Azure) und verwandelt sie in ClearML-Agenten, sobald Experimente in der Warteschlange erkannt werden. Sobald die Aufgaben verarbeitet sind, schaltet der Auto-Scaler die Remote-Maschinen automatisch ab, und Sie zahlen nicht mehr! Sehen Sie sich das Video zum Einstieg in die Auto-Scaler unten an.
Haben Sie Fragen? Treten Sie unserer Community bei und stellen Sie noch heute Ihre Frage!