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

🔬 Finde 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 coco128.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 coco128.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 ein (AWS, GCP, Azure) 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-01-12
Autoren: glenn-jocher (5), chr043416@gmail.com (1)

Kommentare