ClearML Integrazione
Circa ClearML
ClearML è un toolbox open-source progettato per farvi risparmiare tempo ⏱️.
🔨 Traccia ogni allenamento YOLOv5 nel gestore degli esperimenti.
🔧 Versione e facile accesso ai dati di formazione personalizzati con lostrumento di versione dei dati integrato ClearML .
🔦 Allenatevi e monitorate in remoto gli allenamenti di YOLOv5 utilizzando l'agente ClearML .
🔬 Ottenere la migliore mAP utilizzando l'ottimizzazione degli iperparametri di ClearML
🔭 Trasformare il modelloYOLOv5 appena addestrato in un'API con pochi comandi utilizzando ClearML Serving.
E molto altro ancora. Sta a voi decidere quanti di questi strumenti volete usare, potete limitarvi al gestore di esperimenti o concatenarli tutti insieme in una pipeline impressionante!
🦾 Impostazione delle cose
Per tenere traccia degli esperimenti e/o dei dati, ClearML deve comunicare con un server. Ci sono due opzioni per ottenerne uno:
Potete iscrivervi gratuitamente al servizioClearML Hosted Service oppure configurare il vostro server, vedi qui. Anche il server è open-source, quindi anche se avete a che fare con dati sensibili, dovreste essere a posto!
-
Installare il
clearml
python pacchetto: -
Collegare l'SDK ClearML al server creando le credenziali (andare in alto a destra su Impostazioni -> Area di lavoro -> Crea nuove credenziali), quindi eseguire il comando sottostante e seguire le istruzioni:
Ecco fatto! Avete finito 😎
🚀 Formazione YOLOv5 Con ClearML
Per abilitare il tracciamento degli esperimenti di ClearML , è sufficiente installare il pacchetto pip ClearML .
Ciò consentirà l'integrazione con lo script di addestramento YOLOv5 . D'ora in poi, ogni allenamento sarà catturato e memorizzato dal gestore di esperimenti ClearML .
Se si desidera modificare il project_name
o task_name
, utilizzare l'opzione --project
e --name
argomenti del train.py
per impostazione predefinita il progetto si chiamerà YOLOv5
e il compito Training
. NOTA BENE: ClearML utilizza /
come delimitatore per i sottoprogetti, quindi fate attenzione quando usate /
nel nome del progetto!
o con un nome di progetto e di attività personalizzato:
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
Questo cattura:
- Codice sorgente + modifiche non impegnate
- Pacchetti installati
- (Iper)parametri
- File di modello (utilizzare
--save-period n
per salvare un checkpoint ogni n epoche) - Uscita console
- Scalari (mAP_0.5, mAP_0.5:0.95, precisione, richiamo, perdite, tassi di apprendimento, ...)
- Informazioni generali come i dettagli della macchina, il tempo di esecuzione, la data di creazione, ecc.
- Tutti i grafici prodotti, quali il correlogramma delle etichette e la matrice di confusione
- Immagini con riquadri di delimitazione per epoca
- Mosaico per epoca
- Immagini di convalida per epoch
È molto, vero? Ora possiamo visualizzare tutte queste informazioni nell'interfaccia utente di ClearML per avere una panoramica dei progressi dell'allenamento. Aggiungete colonne personalizzate alla visualizzazione della tabella (come ad esempio mAP_0,5) in modo da poter ordinare facilmente il modello più performante. Oppure selezionare più esperimenti e confrontarli direttamente!
Possiamo fare ancora di più con tutte queste informazioni, come l'ottimizzazione degli iperparametri e l'esecuzione remota, quindi continuate a leggere se volete vedere come funziona!
🔗 Gestione della versione del set di dati
La versione dei dati separata da quella del codice è generalmente una buona idea e facilita l'acquisizione dell'ultima versione. Questo repository supporta la fornitura di un ID di versione del dataset e si assicurerà di ottenere i dati se non sono ancora presenti. Inoltre, questo flusso di lavoro salva anche l'ID del set di dati utilizzato come parte dei parametri dell'attività, in modo da sapere sempre con certezza quali dati sono stati utilizzati in quale esperimento!
Preparare il set di dati
Il repository YOLOv5 supporta diversi set di dati utilizzando file YAML contenenti le loro informazioni. Per impostazione predefinita, i set di dati vengono scaricati nella cartella ../datasets
rispetto alla cartella principale del repository. Quindi, se si è scaricato il file coco128
utilizzando il link nello YAML o con gli script forniti da yolov5, si ottiene questa struttura di cartelle:
Ma questo può essere qualsiasi set di dati che si desidera. Sentitevi liberi di usare i vostri, purché vi atteniate a questa struttura di cartelle.
Quindi,⚠️copy il file YAML corrispondente alla radice del dataset folder⚠️.Questo file YAML contiene le informazioni di cui ClearML avrà bisogno per utilizzare correttamente il dataset. Si può fare anche da soli, naturalmente, basta seguire la struttura degli YAML di esempio.
Fondamentalmente abbiamo bisogno delle seguenti chiavi: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Caricare il set di dati
Per inserire il dataset in ClearML come dataset versionato, accedere alla cartella principale del dataset ed eseguire il seguente comando:
Il comando clearml-data sync
è in realtà un comando abbreviato. È anche possibile eseguire questi comandi uno dopo l'altro:
# 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
Eseguire l'addestramento con un set di dati ClearML
Ora che si dispone di un dataset ClearML , è possibile utilizzarlo in modo molto semplice per addestrare modelli YOLOv5 🚀 personalizzati!
python train.py --img 640 --batch 16 --epochs 3 --data clearml://<your_dataset_id> --weights yolov5s.pt --cache
👀 Ottimizzazione degli iperparametri
Ora che abbiamo i nostri esperimenti e i dati in versione, è il momento di dare un'occhiata a ciò che possiamo costruire sopra!
Utilizzando le informazioni sul codice, i pacchetti installati e i dettagli dell'ambiente, l'esperimento stesso è ora completamente riproducibile. Infatti, ClearML consente di clonare un esperimento e di modificarne i parametri. Possiamo poi eseguirlo di nuovo con i nuovi parametri in modo automatico: questo è ciò che fa HPO!
Per eseguire l'ottimizzazione degli iperparametri a livello locale, abbiamo incluso uno script già pronto. Assicuratevi che un compito di addestramento sia stato eseguito almeno una volta, in modo che si trovi nel gestore degli esperimenti di ClearML . In sostanza, lo cloneremo e modificheremo i suoi iperparametri.
È necessario inserire l'ID di questo file template task
nello script che si trova all'indirizzo utils/loggers/clearml/hpo.py
e poi eseguirlo :) È possibile modificare task.execute_locally()
a task.execute()
di metterlo in una coda di ClearML e di farlo lavorare da un agente remoto.
# 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
🤯 Esecuzione remota (avanzata)
L'esecuzione di HPO in locale è davvero comoda, ma se invece volessimo eseguire i nostri esperimenti su una macchina remota? Forse si ha accesso a una macchina GPU molto potente in loco, oppure si dispone di un budget per utilizzare le GPU del cloud. È qui che entra in gioco l'agente ClearML . Scoprite cosa può fare l'agente qui:
In breve: ogni esperimento tracciato dall'experiment manager contiene informazioni sufficienti per riprodurlo su una macchina diversa (pacchetti installati, modifiche non impegnate, ecc.). Un agente di ClearML fa proprio questo: ascolta una coda per i task in arrivo e quando ne trova uno, ricrea l'ambiente e lo esegue, continuando a riportare scalari, grafici ecc. al gestore degli esperimenti.
È possibile trasformare qualsiasi macchina (una macchina virtuale del cloud, una macchina locale GPU , il proprio portatile...) in un agente ClearML semplicemente eseguendo:
Clonazione, modifica e inserimento in lista
Con il nostro agente in esecuzione, possiamo fargli fare un po' di lavoro. Ricordate nella sezione HPO che possiamo clonare un task e modificare gli iperparametri? Possiamo farlo anche dall'interfaccia!
🪄 Clonare l'esperimento facendo clic con il tasto destro del mouse.
🎯 Modificate gli iperparametri in base a ciò che desiderate.
⏳ Inviare l'attività a una qualsiasi delle code facendo clic con il tasto destro del mouse.
Esecuzione di un'attività in remoto
Ora è possibile clonare un task come abbiamo spiegato sopra, oppure semplicemente marcare lo script corrente aggiungendo task.execute_remotely()
e al momento dell'esecuzione verrà messo in coda, affinché l'agente possa iniziare a lavorarci!
Per eseguire lo script di addestramento YOLOv5 da remoto, è sufficiente aggiungere questa riga allo script training.py dopo che il logger clearml è stato istanziato:
# ...
# 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
# ...
Quando si esegue lo script di addestramento dopo questa modifica, python esegue lo script fino a quella riga, dopodiché impacchetta il codice e lo invia alla coda!
Lavoratori in autoscala
ClearML è dotato anche di autoscaler! Questo strumento avvia automaticamente nuove macchine remote nel cloud di vostra scelta (AWS, GCP, Azure) e le trasforma in agenti ClearML per voi ogni volta che vengono rilevati esperimenti in coda. Una volta elaborate le attività, l'autoscaler spegnerà automaticamente le macchine remote e voi smetterete di pagare!
Guardate il video di avvio degli autoscaler qui sotto.