L’ordine alleggerisce il lavoro.
Proverbio Italiano
Lavorare con i dati significa eseguire decine, se non centinaia, di esperimenti. Una volta ottenuto il modello e il codice per l’addestramento, resta la parte di tuning, ossia trovare dei valori soddisfacenti da assegnare agli iperparametri. Spesso capita che le ultime prove fatte non siano le migliori e serva ripescare esperimenti intermedi: serve perciò uno strumento di controllo delle versioni dedicato agli esperimenti.
Esistono varie soluzioni di Data Version Control, ognuna con le proprie caratteristiche. Nel mondo open source ne possiamo citare tre:
In questa serie di articoli vedremo Sumatra, a mio avviso il meno invasivo da utilizzare e molto pratico. Si tratta di un software (al momento della scrittura è arrivato alla versione 0.7.4) per tracciare le elaborazioni dati ed è pensato per scopi scientifici. Il codice è versionato su Github e scritto in Python, si integra con vari gestori di versione, funziona da linea di comando e ha un’interfaccia web per consultare i risultati. In questo articolo vedremo come eseguire il setup di un semplice progetto da linea di comando.
Sumatra – Come Funziona
Prima di passare alla parte operativa vera e propria, vediamo i principi di funzionamento di Sumatra e come se può fare al caso nostro.
Quello che ci piacerebbe avere è un sistema leggero e facile da usare che tenga traccia dei parametri di input e dei file di output di un’esecuzione, senza dover creare infrastrutture impegnative come Docker. Per fare questo Sumatra richiede che il nostro programma abbia le seguenti caratteristiche:
- venga eseguito da linea di comando
- il codice venga eseguito da un interprete (ES: python)
- i parametri vengano letti da file
- l’output venga scritto su file all’interno di una directory
- consigliato il versionamento dei sorgenti con Git
Potrebbero sembrare limitazioni forti, ma molto spesso i programmi di elaborazione dati hanno già questa forma. Inoltre queste piccole linee guida tornano utili per mettere in ordine il vostro programma, con sicuri benefici per il futuro utilizzo.
L’ultimo punto da valutare è la consultazione dei risultati e la riproducibilità: vedremo che è possibile consultare tutti gli esperimenti da linea di comando, da web e creare export in Latex.
Sumatra – Setup
Per prima cosa occorre avere Python installato e disponibile nel proprio ambiente. Per poter utilizzare sumatra su progetti versionati con Git occorre installare un paio di moduli attraverso Pip
pip install gitpython sumatra
Fatto questo avremo a disposizione il comando smt. Ora possiamo clonare il nostro repository via git clone e inizializzare il progetto Sumatra
git clone https://github.com/ognibit/SumatraTemplate.git
cd SumatraTemplate
smt init SumatraTemplate
Il comando di init genera due directory: .smt e Data. Nella prima Sumatra salva le proprie informazioni, esattamente come Git. In Data invece non c’è nulla e serve come directory di output del nostro programma. Sumatra la monitora e ne versiona il contenuto.
A questo punto si può configurare il progetto per un uso più agevole. Nel mio caso configuro anche la cartella archive per far in modo che l’output di ogni esperimento venga raccolto in un archivio (tar.gz). Alla fine dell’esecuzione non troveremo quindi i file in Data ma in archive. Può sembrare scomodo all’inizio, ma torna molto utile sia per tenere traccia e ordine, sia per scaricare i risultati da remoto.
mkdir archive
smt configure \
--executable=/home/omar/.virtualenvs/cv/bin/python \
--main=main.py \
--archive ./archive
Nel mio caso ho configurato come esecutore l’interprete Python del mio ambiente virtuale cv. Il file main.py è il punto d’ingresso che elabora i parametri e una volta configurato non servirà più indicarlo. Per avere un quadro generale della configurazione del progetto basta dare il comando:
smt info
Sumatra – Primo esperimento
Ora che il progetto Sumatra è configurato non ci resta che utilizzarlo. I parametri di esecuzione sono salvati in formato YAML, ma Sumatra ne supporta altri. Ho sperimentato il file piatto e il config, ma il primo è troppo spartano e il secondo ha qualche bug nella sovrascrittura dei parametri (la vedremo tra pochissimo).
smt run -o ./Data/run.log conf/default.yaml
smt list -l
ls Data
ls archive
L’esecuzione del programma avviene tramite il comando run. L’opzione serve per reindirizzare l’output dentro la cartella Data in modo che anche esso sia salvato nell’archivio. Il comando list mostra tutti gli esperimenti lanciati. In Data non si troveranno file perchè saranno archiviati in archive
Per cambiare un parametro di lancio basta inserirlo come secondo argomento di run
smt run -o ./Data/run.log conf/default.yaml task=check
Nei prossimo articoli vedremo più nel dettaglio le opzioni di lancio e gestione degli esperimenti.
2 thoughts on “Tracciatura degli Esperimenti con Sumatra – Intro”
Comments are closed.