Gérer facilement les modèles d’apprentissage en profondeur avec des configurations TOML

Manage deep learning models easily with TOML configurations.

Vous n’aurez peut-être jamais besoin de ces longs arguments CLI pour votre train.py

Photo de Scott Graham sur Unsplash

La gestion des modèles d’apprentissage profond peut être difficile en raison du grand nombre de paramètres et de réglages nécessaires pour tous les modules. Le module d’entraînement peut nécessiter des paramètres tels que batch_size ou le num_epochs ou des paramètres pour le planificateur de taux d’apprentissage. De même, le module de prétraitement des données peut nécessiter train_test_split ou des paramètres pour l’augmentation d’image.

Une approche naïve pour gérer ou introduire ces paramètres dans le pipeline est de les utiliser en tant qu’arguments CLI lors de l’exécution des scripts. Les arguments de ligne de commande peuvent être difficiles à saisir et la gestion de tous les paramètres dans un seul fichier peut ne pas être possible. Les fichiers TOML fournissent une manière plus propre de gérer les configurations et les scripts peuvent charger les parties nécessaires de la configuration sous forme de dict Python sans avoir besoin de code de base pour lire/analyser les arguments de ligne de commande.

Dans ce blog, nous explorerons l’utilisation de TOML dans les fichiers de configuration et comment nous pouvons les utiliser efficacement dans les scripts d’entraînement/déploiement.

Qu’est-ce que les fichiers TOML?

TOML, signifie Tom’s Obvious Minimal Language, est un format de fichier conçu spécifiquement pour les fichiers de configuration. Le concept d’un fichier TOML est assez similaire aux fichiers YAML/YML qui ont la capacité de stocker des paires clé-valeur dans une hiérarchie en forme d’arbre. Un avantage de TOML par rapport à YAML est sa lisibilité qui devient importante lorsqu’il y a plusieurs niveaux imbriqués.

Fig.1. Les mêmes configurations de modèle écrites en TOML (à gauche) et en YAML (à droite). TOML nous permet d'écrire des paires clé-valeur au même niveau d'indentation indépendamment de la hiérarchie.

Personnellement, à part une lisibilité améliorée, je ne trouve aucune raison pratique de préférer TOML à YAML. L’utilisation de YAML est tout à fait acceptable, voici un package Python pour l’analyse de YAML.

Pourquoi avons-nous besoin de configurations en TOML?

Il y a deux avantages à utiliser TOML pour stocker la configuration du modèle/des données/de déploiement pour les modèles de ML :

Gestion de toutes les configurations dans un seul fichier : Avec les fichiers TOML, nous pouvons créer plusieurs groupes de paramètres qui sont nécessaires pour différents modules. Par exemple, dans la figure 1, les paramètres liés à la procédure d’entraînement du modèle sont imbriqués sous l’attribut [train], de même que le port et le host requis pour le déploiement du modèle sont stockés sous deploy. Nous n’avons pas besoin de sauter entre train.py ou deploy.py pour modifier leurs paramètres, nous pouvons plutôt globaliser tous les paramètres à partir d’un seul fichier de configuration TOML.

Cela pourrait être très utile si nous formons le modèle sur une machine virtuelle, où les éditeurs de code ou les IDE ne sont pas disponibles pour modifier les fichiers. Un seul fichier de configuration est facile à modifier avec vim ou nano disponibles sur la plupart des VM.

Comment pouvons-nous lire les configurations à partir de TOML?

Pour lire la configuration à partir de fichiers TOML, deux packages Python peuvent être utilisés, toml et munch. toml nous aidera à lire le fichier TOML et à retourner le contenu du fichier sous forme de dict Python. munch convertira le contenu du dict pour permettre un accès de style d’attribut des éléments. Par exemple, au lieu d’écrire, config[ "training" ][ "num_epochs" ], nous pouvons simplement écrire config.training.num_epochs qui améliore la lisibilité.

Considérez la structure de fichier suivante,

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

project_config.toml contient la configuration de notre projet de ML, comme,

[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"

Dans config.py, nous créons une fonction qui renvoie la version “munchifiée” de cette configuration à l’aide de toml et 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 )

Maintenant, dans n’importe lequel de nos fichiers de projet, comme train.py ou predict.py, nous pouvons charger cette configuration,

from config import load_global_configconfig = load_global_config()batch_size = config.train.batch_sizelr = config.train.learning_rateif config.train.checkpoint_path == "auto":    # Crée un répertoire avec un nom correspondant au timestamp courant    pass

La sortie de print( toml.load( filepath ) ) ) est,

{'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}}

Si vous utilisez des outils MLOps tels que W&B Tracking ou MLFlow, la maintenance de la configuration sous forme de dict peut être utile car nous pouvons le passer directement en argument.

La fin

Nous espérons que vous envisagerez d’utiliser les configurations TOML dans votre prochain projet de ML ! C’est une façon propre de gérer les paramètres qui sont globaux ou locaux à vos scripts d’entraînement, de déploiement ou d’inférence. Au lieu d’écrire de longs arguments CLI, les scripts peuvent charger directement la configuration à partir du fichier TOML. Si nous souhaitons entraîner deux versions d’un modèle avec des hyperparamètres différents, nous n’avons qu’à modifier le fichier TOML dans config.py. J’ai commencé à utiliser des fichiers TOML dans mes projets récents et l’expérimentation est devenue plus rapide. Les outils MLOps peuvent également gérer les versions d’un modèle ainsi que leurs configurations, mais la simplicité de l’approche discutée ci-dessus est unique et nécessite un changement minimal dans les projets existants.

Nous espérons que vous avez apprécié la lecture. Bonne journée !

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI

Identification et génération de compositions d'état d'objets en apprentissage automatique à l'aide de la méthode Chop and Learn

Le monde réel contient des objets de différentes tailles, teintes et textures. Les qualités visuelles, souvent appelé...

AI

Les LLMs de Google peuvent maîtriser des outils simplement en lisant la documentation

À l’ère de l’avancement technologique rapide, l’Intelligence Artificielle (IA) fait des progrès rem...

AI

Outils AI de premier plan pour les entrepreneurs 2023

Grammarly est une aide à l’écriture alimentée par l’IA qui garantit que votre écriture est sans erreurs e...

AI

Comment comparer efficacement les solutions de ML

Lors de l'évaluation et de la comparaison des solutions d'apprentissage automatique, votre première métrique d'évalua...

AI

NVIDIA alimente la formation de certains des plus grands modèles de la Fondation Amazon Titan

Tout ce qui concerne les grands modèles de langage est grand – les modèles géants s’entraînent sur des en...