Gestione facile dei modelli di apprendimento approfondito tramite configurazioni TOML

Easy management of deep learning models with TOML configurations.

Potresti non aver mai bisogno di quegli argomenti CLI lunghi per il tuo train.py

Foto di Scott Graham su Unsplash

Gestire modelli di deep learning può essere difficile a causa dell’enorme quantità di parametri e impostazioni necessari per tutti i moduli. Il modulo di addestramento potrebbe avere bisogno di parametri come batch_size o il num_epochs o parametri per lo scheduler del tasso di apprendimento. Allo stesso modo, il modulo di pre-elaborazione dei dati potrebbe avere bisogno di train_test_split o parametri per l’aumento dell’immagine.

Un approccio ingenuo per gestire o introdurre questi parametri nella pipeline è quello di utilizzarli come argomenti CLI durante l’esecuzione degli script. Gli argomenti della riga di comando potrebbero essere difficili da inserire e la gestione di tutti i parametri in un singolo file potrebbe non essere possibile. I file TOML forniscono un modo più pulito per gestire le configurazioni e gli script possono caricare le parti necessarie della configurazione sotto forma di un dict Python senza la necessità di codice boilerplate per leggere/analizzare gli argomenti della riga di comando.

In questo blog, esploreremo l’uso di TOML nei file di configurazione e come possiamo utilizzarli in modo efficiente attraverso script di addestramento e di distribuzione.

Cosa sono i file TOML?

TOML, acronimo di Tom’s Obvious Minimal Language, è un formato di file progettato specificamente per i file di configurazione. Il concetto di un file TOML è abbastanza simile ai file YAML/YML che hanno la capacità di archiviare coppie chiave-valore in una gerarchia a forma di albero. Un vantaggio di TOML rispetto a YAML è la sua leggibilità che diventa importante quando ci sono più livelli nidificati.

Fig.1. Le stesse configurazioni del modello scritte in TOML (a sinistra) e YAML (a destra). TOML ci consente di scrivere coppie chiave-valore allo stesso livello di rientro indipendentemente dalla gerarchia.

Personalmente, a parte una maggiore leggibilità, non trovo alcun motivo pratico per preferire TOML a YAML. Utilizzare YAML va benissimo, ecco un pacchetto Python per l’analisi di YAML.

Perché abbiamo bisogno di configurazioni in TOML?

Ci sono due vantaggi nell’utilizzo di TOML per archiviare la configurazione del modello/dati/deployment per i modelli di ML:

Gestione di tutte le configurazioni in un singolo file: con i file TOML, possiamo creare più gruppi di impostazioni necessari per diversi moduli. Ad esempio, nella figura 1, le impostazioni relative alla procedura di addestramento del modello sono nidificate sotto l’attributo [train], allo stesso modo, la porta e l’host richiesti per il deployment del modello sono archiviati sotto deploy. Non è necessario passare da train.py o deploy.py per modificare i loro parametri, invece possiamo globalizzare tutte le impostazioni da un singolo file di configurazione TOML.

Questo potrebbe essere super utile se stiamo addestrando il modello su una macchina virtuale, dove gli editor di codice o gli IDE non sono disponibili per la modifica dei file. Un singolo file di configurazione è facile da modificare con vim o nano disponibili sulla maggior parte delle VM.

Come leggiamo le configurazioni da TOML?

Per leggere la configurazione da un file TOML, è possibile utilizzare due pacchetti Python, toml e munch. toml ci aiuterà a leggere il file TOML e restituire il contenuto del file come un dict Python. munch convertirà il contenuto del dict per consentire l’accesso con stile di attributi degli elementi. Ad esempio, invece di scrivere, config[ "training" ][ "num_epochs" ], possiamo semplicemente scrivere config.training.num_epochs che migliora la leggibilità.

Considera la seguente struttura di file,

- config.py- train.py- project_config.toml

project_config.toml contiene la configurazione per il nostro progetto di ML, come ad esempio,

[data]vocab_size = 5589seq_length = 10test_split = 0.3data_path = "dataset/"data_tensors_path = "data_tensors/"[model]embedding_dim = 256num_blocks = 5num_heads_in_block = 3[train]num_epochs = 10batch_size = 32learning_rate = 0.001checkpoint_path = "auto"

In config.py, creiamo una funzione che restituisce la versione “munchified” di questa configurazione, utilizzando toml e munch,

$> pip install toml munch

import tomlimport munchdef load_global_config( filepath : str = "project_config.toml" ):    return munch.munchify( toml.load( filepath ) )def save_global_config( new_config , filepath : str = "project_config.toml" ):    with open( filepath , "w" ) as file:        toml.dump( new_config , file )

Ora, in qualsiasi dei nostri file di progetto, come train.py o predict.py, possiamo caricare questa configurazione,

from config import load_global_configconfig = load_global_config()batch_size = config.train.batch_sizelr = config.train.learning_rateif config.train.checkpoint_path == "auto":    # Crea una directory con il nome dell'ora corrente    pass

L’output di print(toml.load(filepath)) è:

{'data': {'data_path': 'dataset/',          'data_tensors_path': 'data_tensors/',          'seq_length': 10,          'test_split': 0.3,          'vocab_size': 5589}, 'model': {'embedding_dim': 256, 'num_blocks': 5, 'num_heads_in_block': 3}, 'train': {'batch_size': 32,           'checkpoint_path': 'auto',           'learning_rate': 0.001,           'num_epochs': 10}}

Se si utilizzano strumenti MLOps come W&B Tracking o MLFlow, mantenere la configurazione come un dict potrebbe essere utile poiché possiamo passarlo direttamente come argomento.

Fine

Speriamo che considererete di utilizzare le configurazioni TOML nel vostro prossimo progetto di ML! È un modo pulito per gestire le impostazioni che sono globali o locali ai vostri script di addestramento / distribuzione o inferenza.

Invece di scrivere lunghi argomenti CLI, gli script potrebbero caricare direttamente la configurazione dal file TOML. Se desideriamo addestrare due versioni di un modello con diversi iperparametri, dobbiamo solo modificare il file TOML in config.py. Ho iniziato a utilizzare i file TOML nei miei progetti recenti e l’esperimentazione è diventata più veloce. Gli strumenti MLOps possono gestire anche le versioni di un modello insieme alle loro configurazioni, ma la semplicità dell’approccio sopra discusso è unica e richiede una modifica minima nei progetti esistenti.

Speriamo che abbiate apprezzato la lettura. Buona giornata!