Zum Inhalt springen

ClearML Integration

Klar|MLKlar|ML

Über ClearML

ClearML ist eine Open-Source-Toolbox, mit der du Zeit sparen kannst ⏱️.

🔨 Verfolge jeden YOLOv5 Trainingslauf im Experimentmanager

🔧 Versioniere deine benutzerdefinierten Trainingsdaten und greife einfach darauf zu mit dem integrierten ClearML Data Versioning Tool

🔦 Trainiere und überwache deine YOLOv5 Trainingsläufe aus der Ferne mit ClearML Agent

🔬 Erhalte die beste mAP mit ClearML Hyperparameter-Optimierung

🔭 Verwandle dein neu trainiertes YOLOv5 Modell mit nur wenigen Befehlen in eine API mit ClearML Serving


Und so viel mehr. Es liegt an dir, wie viele dieser Tools du nutzen möchtest. Du kannst dich auf den Experimentiermanager beschränken oder sie alle zu einer beeindruckenden Pipeline zusammenfügen!

ClearML Dashboard für Skalare



🦾 Dinge einrichten

Um den Überblick über deine Experimente und/oder Daten zu behalten, muss ClearML mit einem Server kommunizieren. Du hast 2 Möglichkeiten, einen zu bekommen:

Entweder meldest du dich kostenlos beim ClearML Hosted Service an oder du kannst deinen eigenen Server einrichten, siehe hier. Sogar der Server ist quelloffen, also auch wenn du mit sensiblen Daten hantierst, solltest du damit zurechtkommen!

  • Installieren Sie die clearml python Paket:

    pip install clearml
    
  • Verbinde das ClearML SDK mit dem Server, indem du Zugangsdaten erstellst (gehe oben rechts zu Einstellungen -> Arbeitsbereich -> Neue Zugangsdaten erstellen), führe dann den unten stehenden Befehl aus und befolge die Anweisungen:

    clearml-init
    

Das war's! Du bist fertig 😎.


🚀 Ausbildung YOLOv5 mit ClearML

Um die ClearML Experimentverfolgung zu aktivieren, installiere einfach das ClearML pip-Paket.

pip install clearml>=1.2.0

Dies ermöglicht die Integration mit dem YOLOv5 Trainingsskript. Jeder Trainingslauf wird von nun an vom ClearML experiment manager erfasst und gespeichert.

Wenn du die project_name oder task_nameverwenden Sie die --project und --name Argumente der train.py Skript, wird das Projekt standardmäßig als YOLOv5 und die Aufgabe Training. BITTE BEACHTEN: ClearML verwendet / als Begrenzungszeichen für Unterprojekte, also sei vorsichtig, wenn du / in deinem Projektnamen!

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

oder mit einem eigenen Projekt- und Aufgabennamen:

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

Damit wirst du erfasst:

  • Quellcode + unbestätigte Änderungen
  • Installierte Pakete
  • (Hyper)Parameter
  • Modelldateien (verwenden --save-period n um alle n Epochen einen Kontrollpunkt zu speichern)
  • Konsolenausgabe
  • Skalen (mAP_0.5, mAP_0.5:0.95, Präzision, Recall, Verluste, Lernraten, ...)
  • Allgemeine Informationen wie Maschinendetails, Laufzeit, Erstellungsdatum usw.
  • Alle erstellten Diagramme wie das Label-Korrelogramm und die 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üge der Tabellenansicht benutzerdefinierte Spalten hinzu (wie z.B. mAP_0.5), damit du ganz einfach nach dem leistungsstärksten Modell sortieren kannst. Oder wähle mehrere Experimente aus und vergleiche sie direkt!

Es gibt noch mehr, was wir mit all diesen Informationen machen können, z. B. Hyperparameter-Optimierung und Remote-Ausführung. Lies also weiter, wenn du wissen willst, wie das funktioniert!

🔗 Verwaltung von Datensatzversionen

Es ist generell eine gute Idee, deine Daten getrennt von deinem Code zu versionieren, denn so ist es einfach, die neueste Version zu erhalten. Dieses Repository unterstützt die Angabe der Versions-ID eines Datensatzes und sorgt dafür, dass die Daten beschafft werden, wenn sie noch nicht vorhanden sind. Außerdem speichert dieser Workflow die ID des verwendeten Datensatzes als Teil der Aufgabenparameter, sodass du immer genau weißt, welche Daten in welchem Experiment verwendet wurden!

ClearML Dataset-Schnittstelle

Bereite deinen Datensatz vor

Das YOLOv5 Repository unterstützt eine Reihe verschiedener Datensätze, indem es YAML-Dateien mit deren Informationen verwendet. Standardmäßig werden die Datensätze in das ../datasets Ordner in Bezug auf den Stammordner des Repositorys. Wenn du also den coco128 Datensatzes über den Link in der YAML oder mit den von yolov5 bereitgestellten Skripten, erhältst du diese Ordnerstruktur:

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

Aber das kann jeder Datensatz sein, den du möchtest. Du kannst auch deine eigenen verwenden, solange du dich an diese Ordnerstruktur hältst.

Als Nächstes legst du unter⚠️copy die entsprechende YAML-Datei im Stammverzeichnis des Datasets folder⚠️ ab.Diese YAML-Datei enthält die Informationen, die ClearML benötigt, um das Dataset richtig zu nutzen. Du kannst sie natürlich auch selbst erstellen, folge einfach der Struktur der Beispiel-YAMLs.

Grundsätzlich brauchen wir die folgenden Schlüssel: path, train, test, val, nc, names.

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

Hochladen deines Datensatzes

Um diesen Datensatz als versionierten Datensatz in ClearML zu erhalten, gehst du zum Stammordner des Datensatzes und führst den folgenden Befehl aus:

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

Der Befehl clearml-data sync ist eigentlich ein Kurzbefehl. Du kannst 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

Jetzt, wo du einen ClearML Datensatz hast, kannst du ihn ganz einfach benutzen, um eigene YOLOv5 🚀 Modelle zu trainieren!

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


👀 Hyperparameter-Optimierung

Jetzt, da wir unsere Experimente und Daten versioniert haben, ist es an der Zeit, einen Blick darauf zu werfen, was wir darauf aufbauen können!

Mithilfe der Code-Informationen, der installierten Pakete und der Umgebungsdetails ist das Experiment selbst nun vollständig reproduzierbar. Unter ClearML kannst du ein Experiment klonen und sogar seine Parameter ändern. Wir können es dann einfach mit diesen neuen Parametern automatisch wiederholen, das ist im Grunde das, was HPO macht!

Um die Hyperparameter-Optimierung lokal durchzuführen, haben wir ein vorgefertigtes Skript für dich bereitgestellt. Vergewissere dich einfach, dass eine Trainingsaufgabe mindestens einmal gelaufen ist, damit sie sich im ClearML Experimentmanager befindet. Wir klonen sie und ändern ihre Hyperparameter.

Du musst die ID dieser Datei ausfüllen template task in dem Skript, das du unter utils/loggers/clearml/hpo.py und führe es dann einfach aus :) Du kannst ändern task.execute_locally() zu task.execute() um sie in eine ClearML Warteschlange zu stellen und stattdessen einen Remote-Agenten daran arbeiten 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

HPO

🤯 Remote Execution (fortgeschritten)

HPO lokal auszuführen ist wirklich praktisch, aber was ist, wenn wir unsere Experimente stattdessen auf einem entfernten Rechner durchführen wollen? Vielleicht hast du Zugang zu einer sehr leistungsstarken GPU-Maschine vor Ort oder du hast ein gewisses Budget, um Cloud-GPUs zu nutzen. An dieser Stelle kommt der ClearML Agent ins Spiel. Was der Agent alles kann, erfährst du hier:

Kurz gesagt: Jedes Experiment, das vom Experiment-Manager verfolgt wird, enthält genügend Informationen, um es auf einem anderen Rechner zu reproduzieren (installierte Pakete, unbestätigte Änderungen usw.). Ein ClearML -Agent macht genau das: Er wartet in einer Warteschlange auf eingehende Aufgaben und wenn er eine findet, erstellt er die Umgebung neu und führt sie aus, während er weiterhin Skalare, Plots usw. an den Experimentmanager meldet.

Du kannst jeden Rechner (eine Cloud-VM, einen lokalen GPU-Rechner, deinen eigenen Laptop ... ) in einen ClearML -Agenten verwandeln, indem du ihn einfach ausführst:

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

Klonen, Bearbeiten und Enqueuing

Wenn unser Agent läuft, können wir ihm etwas Arbeit abnehmen. Erinnerst du dich an den Abschnitt über HPO, in dem wir eine Aufgabe klonen und die Hyperparameter bearbeiten können? Das können wir auch über die Benutzeroberfläche tun!

🪄 Klone das Experiment, indem du es mit der rechten Maustaste anklickst

🎯 Bearbeite die Hyperparameter so, wie du sie haben möchtest

⏳ Stelle die Aufgabe in eine der Warteschlangen ein, indem du sie mit der rechten Maustaste anklickst.

Eine Aufgabe von der Benutzeroberfläche aus in die Warteschlange stellen

Eine Aufgabe aus der Ferne ausführen

Jetzt kannst du eine Aufgabe klonen, wie wir es oben erklärt haben, oder einfach dein aktuelles Skript markieren, indem du task.execute_remotely() und bei der Ausführung wird sie in eine Warteschlange gestellt, damit der Agent mit der Arbeit beginnen kann!

Um das Trainingsskript YOLOv5 aus der Ferne auszuführen, musst du nur diese Zeile in das Skript training.py einfügen, nachdem der Logger clearml instanziiert worden ist:

# ...
# 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 du das Trainingsskript nach dieser Änderung ausführst, führt python das Skript bis zu dieser Zeile aus. Danach wird der Code verpackt und stattdessen an die Warteschlange gesendet!

Automatisch skalierende Arbeiter

ClearML kommt auch mit Autoscalern! Dieses Tool richtet automatisch neue Remote-Maschinen in der Cloud deiner Wahl (AWS, GCP, Azure) ein und verwandelt sie in ClearML Agenten für dich, sobald Experimente in der Warteschlange entdeckt werden. Sobald die Aufgaben abgearbeitet sind, schaltet der Autoscaler die Remote-Maschinen automatisch ab, und du hörst auf zu zahlen!

Sieh dir unten das Video zu den ersten Schritten des Autoscalers an.

Das Video anschauen



Erstellt am 2023-11-12, Aktualisiert am 2024-04-18
Autoren: glenn-jocher (6), RizwanMunawar (1)

Kommentare