ClearML Integratie
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!
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: -
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:
Dat is het! Je bent klaar 😎
🚀 Training YOLOv5 Met ClearML
Om ClearML experiment tracking in te schakelen, installeer je eenvoudig het pip-pakket ClearML .
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_name
gebruik 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!
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!
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:
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:
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
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:
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 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.