Zum Inhalt springen

ClearML Integration

Klar|MLKlar|ML

Über ClearML

ClearML ist eine Open-Source-Toolbox, mit der Sie Zeit sparen können ⏱️.

🔨 Verfolgen Sie jeden YOLOv5 Trainingslauf im Experimentmanager

🔧 Versionieren Sie Ihre benutzerdefinierten Trainingsdaten und greifen Sie einfach darauf zu mit dem integrierten ClearML Data Versioning Tool

🔦 Trainieren und überwachen Sie Ihre YOLOv5 Trainingsläufe aus der Ferne mit ClearML Agent

🔬 Erzielen Sie die beste mAP mit ClearML Hyperparameter-Optimierung

🔭 Verwandeln Sie Ihr neu trainiertes YOLOv5 Modell mit nur wenigen Befehlen in eine API mit ClearML Serving


Und so vieles mehr. Es liegt an Ihnen, wie viele dieser Tools Sie verwenden möchten. Sie können sich auf den Experimentiermanager beschränken oder sie alle zu einer beeindruckenden Pipeline zusammenfügen!

ClearML Dashboard mit Skalaren



🦾 Dinge einrichten

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

Entweder melden Sie sich kostenlos für den ClearML Hosted Service an oder Sie können Ihren eigenen Server einrichten, siehe hier. Sogar der Server ist quelloffen, so dass Sie auch bei sensiblen Daten keine Probleme haben sollten!

  • Installieren Sie die clearml python Paket:

    pip install clearml
    
  • Verbinden Sie das ClearML SDK mit dem Server, indem Sie Anmeldeinformationen erstellen (gehen Sie oben rechts zu Einstellungen -> Arbeitsbereich -> Neue Anmeldeinformationen erstellen), führen Sie dann den unten stehenden Befehl aus und folgen Sie den Anweisungen:

    clearml-init
    

Das war's! Du bist fertig 😎.


🚀 Ausbildung YOLOv5 mit ClearML

Um die ClearML Experimentverfolgung zu aktivieren, installieren Sie einfach das Pip-Paket ClearML .

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 Sie die project_name oder task_nameverwenden Sie die --project und --name Argumente des train.py Skript, wird das Projekt standardmäßig als YOLOv5 und die Aufgabe Training. BITTE BEACHTEN: ClearML verwendet / als Begrenzungszeichen für Unterprojekte, also Vorsicht bei der Verwendung von / in Ihrem Projektnamen!

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

oder mit benutzerdefiniertem 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 werden Sie erfasst:

  • Quellcode + unbestätigte Änderungen
  • Installierte Pakete
  • (Hyper-)Parameter
  • Modelldateien (verwenden Sie --save-period n um alle n Epochen einen Kontrollpunkt zu speichern)
  • Ausgabe auf der Konsole
  • 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 Korrelogramm der Bezeichnungen und die Konfusionsmatrix
  • Bilder mit Begrenzungsrahmen pro Epoche
  • Mosaik pro Epoche
  • Validierungsbilder pro Epoche

Das ist eine Menge, oder? 🤯 Nun 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 (wie z. B. mAP_0.5), damit Sie einfach nach dem Modell mit der besten Leistung sortieren können. Oder wählen Sie mehrere Experimente aus und vergleichen Sie sie direkt!

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

🔗 Verwaltung von Datensatzversionen

Die Versionierung Ihrer Daten getrennt von Ihrem Code ist im Allgemeinen eine gute Idee und macht es einfach, auch die neueste Version zu erhalten. Dieses Repository unterstützt die Angabe einer Datensatzversions-ID 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, so dass Sie immer sicher wissen, welche Daten in welchem Experiment verwendet wurden!

ClearML Dataset-Schnittstelle

Bereiten Sie Ihren Datensatz vor

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

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

Dies kann aber jeder beliebige Datensatz sein. Sie können gerne Ihre eigenen verwenden, solange Sie sich an diese Ordnerstruktur halten.

Als NächsteslegenSie 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. Sie können diese 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
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ coco128.yaml  # <---- HERE!
        |_ LICENSE
        |_ README.txt

Hochladen Ihres Datensatzes

Um diesen Datensatz als versionierten Datensatz in ClearML zu erhalten, 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önnen 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, da Sie 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

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

Anhand der Codeinformationen, der installierten Pakete und der Umgebungsdetails ist das Experiment selbst nun vollständig reproduzierbar. Mit ClearML können Sie 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 tut!

Um die Hyperparameter-Optimierung lokal durchzuführen, haben wir ein vorgefertigtes Skript für Sie bereitgestellt. Stellen Sie einfach sicher, dass eine Trainingsaufgabe mindestens einmal ausgeführt wurde, damit sie sich im ClearML Experiment-Manager befindet. Wir werden sie im Wesentlichen klonen und ihre Hyperparameter ändern.

Sie müssen die ID der folgenden Datei eingeben template task in dem Skript, das Sie unter utils/loggers/clearml/hpo.py und führen Sie es dann einfach aus :) Sie können ändern task.execute_locally() zu task.execute() in eine ClearML Warteschlange zu stellen und stattdessen einen entfernten 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

🤯 Fernausführung (fortgeschritten)

HPO lokal auszuführen ist wirklich praktisch, aber was ist, wenn wir unsere Experimente stattdessen auf einem entfernten Rechner durchführen wollen? Vielleicht haben Sie Zugang zu einem sehr leistungsstarken GPU Rechner vor Ort, oder Sie haben ein gewisses Budget, um Cloud-GPUs zu nutzen. An dieser Stelle kommt der ClearML Agent ins Spiel. Sehen Sie sich hier an, was der Agent leisten kann:

Kurz gesagt: Jedes vom Experiment-Manager verfolgte Experiment enthält genügend Informationen, um es auf einem anderen Rechner zu reproduzieren (installierte Pakete, nicht übertragene Änderungen usw.). Ein ClearML -Agent tut also 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, Diagramme usw. an den Experiment-Manager meldet.

Sie können jeden Rechner (eine Cloud-VM, einen lokalen GPU Rechner, Ihren eigenen Laptop ... ) in einen ClearML Agenten verwandeln, indem Sie ihn einfach ausführen:

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

Klonen, Editieren und Einreihen

Wenn unser Agent läuft, können wir ihm etwas Arbeit abnehmen. 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 es mit der rechten Maustaste anklicken

🎯 Ändern Sie die Hyperparameter so, wie Sie sie haben möchten

⏳ Stellen Sie die Aufgabe in eine der Warteschlangen ein, indem Sie sie mit der rechten Maustaste anklicken

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

Eine Aufgabe aus der Ferne ausführen

Jetzt können Sie eine Aufgabe klonen, wie oben beschrieben, oder einfach Ihr aktuelles Skript markieren, indem Sie 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 ferngesteuert auszuführen, müssen Sie nur diese Zeile in das Skript training.py einfügen, nachdem der Logger clearml 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 das Trainingsskript nach dieser Änderung ausgeführt wird, 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 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 entdeckt werden. Sobald die Aufgaben abgearbeitet sind, schaltet der Autoscaler die Remote-Maschinen automatisch ab, und Sie zahlen nicht mehr!

Sehen Sie sich unten das Video zu den ersten Schritten mit Autoscalern an.

Das Video ansehen

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare