Overslaan naar inhoud

ClearML Integratie

Duidelijk|MLDuidelijk|ML

Over ClearML

ClearML is een open-source toolbox die is ontworpen om je tijd te besparen ⏱️.

Volg elke YOLOv5 trainingsrun in de experimentmanager

🔧 Versie en eenvoudige toegang tot je aangepaste trainingsgegevens met de geïntegreerde ClearML Data Versioning Tool

🔦 Train en bewaak je YOLOv5 trainingsruns op afstand met ClearML Agent

Krijg het allerbeste mAP met ClearML Hyperparameteroptimalisatie

🔭 Zet je pas getrainde YOLOv5 model om in een API met slechts een paar commando's met ClearML Serving.


En nog veel meer. Het is aan jou hoeveel van deze tools je wilt gebruiken, je kunt het bij de experimentmanager houden of ze allemaal aan elkaar koppelen tot een indrukwekkende pijplijn!

ClearML scalars dashboard



Dingen opzetten

Om je experimenten en/of gegevens bij te houden, moet ClearML communiceren met een server. Je hebt 2 opties om er een te krijgen:

Je kunt je gratis aanmelden voor de ClearML Hosted Service of je kunt je eigen server opzetten, zie hier. Zelfs de server is open-source, dus zelfs als je te maken hebt met gevoelige gegevens, zou je goed moeten zijn om te gaan!

  • Installeer de clearml python verpakking:

    pip install clearml
    
  • Verbind de ClearML SDK met de server door credentials aan te maken (ga rechtsboven naar Instellingen -> Werkruimte -> Nieuwe credentials aanmaken), voer dan het onderstaande commando uit en volg de instructies:

    clearml-init
    

Dat is het! Je bent klaar 😎


🚀 Training YOLOv5 Met ClearML

Om ClearML experiment tracking in te schakelen, installeer je eenvoudig het pip-pakket ClearML .

pip install clearml>=1.2.0

Dit maakt integratie met het YOLOv5 trainingsscript mogelijk. Elke trainingsrun wordt vanaf nu vastgelegd en opgeslagen door de ClearML experimentmanager.

Als je de project_name of task_namegebruik de --project en --name argumenten van de train.py script wordt het project standaard YOLOv5 en de taak Training. LET OP: ClearML gebruikt / als scheidingsteken voor subprojecten, dus wees voorzichtig bij het gebruik van / in je projectnaam!

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

of met een aangepaste project- en taaknaam:

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

Dit legt vast:

  • Broncode + niet-vastgelegde wijzigingen
  • Geïnstalleerde pakketten
  • (Hyper)parameters
  • Modelbestanden (gebruik --save-period n om elke n epochs een controlepunt op te slaan)
  • Uitgang console
  • Scalars (mAP_0.5, mAP_0.5:0.95, precisie, recall, verliezen, leerpercentages, ...)
  • Algemene informatie zoals machinegegevens, runtime, aanmaakdatum enz.
  • Alle geproduceerde plots zoals labelcorrelogram en verwarringmatrix
  • Afbeeldingen met bounding boxes per tijdvak
  • Mozaïek per tijdperk
  • Validatiebeelden per epoch

Dat is veel, toch? Nu kunnen we al deze informatie visualiseren in de ClearML UI om een overzicht te krijgen van onze trainingsvoortgang. Voeg aangepaste kolommen toe aan de tabelweergave (zoals bijvoorbeeld mAP_0.5) zodat je eenvoudig kunt sorteren op het best presterende model. Of selecteer meerdere experimenten en vergelijk ze direct!

We kunnen nog meer doen met al deze informatie, zoals hyperparameter optimalisatie en uitvoering op afstand, dus blijf lezen als je wilt zien hoe dat werkt!

Versiebeheer dataset

Het is over het algemeen een goed idee om je gegevens apart van je code te versiebeheer en het maakt het gemakkelijk om ook de laatste versie te verkrijgen. Deze repository ondersteunt het leveren van een dataset versie ID, en zal ervoor zorgen dat de data wordt verkregen als die er nog niet is. Daarnaast slaat deze workflow ook de gebruikte dataset ID op als onderdeel van de taakparameters, zodat je altijd zeker weet welke gegevens in welk experiment zijn gebruikt!

ClearML Interface dataset

Je dataset voorbereiden

Het YOLOv5 archief ondersteunt een aantal verschillende datasets door gebruik te maken van YAML bestanden die hun informatie bevatten. Standaard worden datasets gedownload naar de ../datasets map ten opzichte van de hoofdmap van het archief. Dus als je de coco128 dataset met behulp van de link in de YAML of met de scripts van yolov5 krijg je deze mapstructuur:

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

Maar dit kan elke dataset zijn die je wilt. Voel je vrij om je eigen dataset te gebruiken, zolang je je maar aan deze mappenstructuur houdt.

Vervolgens⚠️copy je het bijbehorende YAML-bestand naar de root van de dataset folder⚠️.Dit YAML-bestand bevat de informatie die ClearML nodig heeft om de dataset goed te kunnen gebruiken. Je kunt dit natuurlijk ook zelf maken, volg gewoon de structuur van de voorbeeld YAML's.

In principe hebben we de volgende sleutels nodig: path, train, test, val, nc, names.

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

Je dataset uploaden

Om deze dataset als een geversioneerde dataset in ClearML te krijgen, ga je naar de hoofdmap van de dataset en voer je het volgende commando uit:

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

De opdracht clearml-data sync is eigenlijk een steno commando. Je kunt deze commando's ook achter elkaar uitvoeren:

# 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 uitvoeren met een ClearML dataset

Nu je een ClearML dataset hebt, kun je deze heel eenvoudig gebruiken om aangepaste YOLOv5 🚀 modellen te trainen!

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


Hyperparameteroptimalisatie

Nu we onze experimenten en gegevens in versie hebben, is het tijd om te kijken wat we er bovenop kunnen bouwen!

Met behulp van de code-informatie, geïnstalleerde pakketten en omgevingsdetails is het experiment zelf nu volledig reproduceerbaar. Met ClearML kun je zelfs een experiment klonen en de parameters veranderen. We kunnen het dan gewoon automatisch opnieuw uitvoeren met deze nieuwe parameters, dit is in feite wat HPO doet!

Om hyperparameter optimalisatie lokaal uit te voeren, hebben we een kant-en-klaar script voor je bijgevoegd. Zorg ervoor dat een trainingstaak ten minste één keer is uitgevoerd, zodat deze in de ClearML experimentmanager staat. We zullen deze in wezen klonen en de hyperparameters ervan wijzigen.

Je moet de ID hiervan invullen template task in het script dat te vinden is op utils/loggers/clearml/hpo.py en voer het dan gewoon uit :) Je kunt task.execute_locally() naar task.execute() om het in een ClearML wachtrij te zetten en er een agent op afstand aan te laten werken.

# 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

Executie op afstand (geavanceerd)

HPO lokaal uitvoeren is erg handig, maar wat als we onze experimenten op een externe machine willen uitvoeren? Misschien heb je toegang tot een zeer krachtige GPU machine op locatie, of heb je wat budget om cloud GPU's te gebruiken. Dit is waar de ClearML Agent om de hoek komt kijken. Bekijk hier wat de agent kan doen:

In het kort: elk experiment dat wordt bijgehouden door de experimentmanager bevat genoeg informatie om het te reproduceren op een andere machine (geïnstalleerde pakketten, niet-vastgelegde wijzigingen, enzovoort). Dus een ClearML agent doet precies dat: hij luistert naar een wachtrij voor binnenkomende taken en als hij er een vindt, recreëert hij de omgeving en voert die uit terwijl hij nog steeds scalars, plots enz. rapporteert aan de experimentmanager.

Je kunt elke machine (een cloud VM, een lokale GPU machine, je eigen laptop ... ) veranderen in een ClearML agent door deze simpelweg uit te voeren:

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

Klonen, bewerken en enqueuing

Nu onze agent draait, kunnen we hem aan het werk zetten. Weet je nog uit het HPO gedeelte dat we een taak kunnen klonen en de hyperparameters kunnen bewerken? Dat kunnen we ook vanuit de interface doen!

Kloon het experiment door er met de rechtermuisknop op te klikken

🎯 Bewerk de hyperparameters naar wat je wilt dat ze zijn

⏳ Zet de taak in een wachtrij door er met de rechtermuisknop op te klikken

Een taak enqueue-en vanuit de UI

Een taak op afstand uitvoeren

Nu kun je een taak klonen zoals we hierboven hebben uitgelegd, of gewoon je huidige script markeren door het volgende toe te voegen task.execute_remotely() en bij uitvoering wordt het in een wachtrij geplaatst, zodat de agent ermee aan de slag kan!

Om het YOLOv5 trainingsscript op afstand uit te voeren, hoef je alleen maar deze regel toe te voegen aan het training.py script nadat de clearml logger is geïnstantieerd:

# ...
# 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
# ...

Bij het uitvoeren van het trainingsscript na deze wijziging, zal python het script tot aan die regel uitvoeren, waarna het de code zal verpakken en in plaats daarvan naar de wachtrij zal sturen!

Werkers automatisch schalen

ClearML komt ook met autoscalers! Deze tool zal automatisch nieuwe externe machines opstarten in de cloud van jouw keuze (AWS, GCP, Azure) en ze voor jou veranderen in ClearML agents wanneer er experimenten in de wachtrij worden gedetecteerd. Zodra de taken zijn verwerkt, sluit de autoscaler de externe machines automatisch af en stop je met betalen!

Bekijk de video over het opstarten van autoscalers hieronder.

Bekijk de video



Gemaakt op 2023-11-12, Bijgewerkt op 2024-06-02
Auteurs: glenn-jocher (7), RizwanMunawar (1)

Reacties