Gestionando modelos de aprendizaje profundo fácilmente con configuraciones TOML

Managing deep learning models easily with TOML configurations.

Es posible que nunca necesites esos largos argumentos de línea de comandos para tu train.py

Foto de Scott Graham en Unsplash

La gestión de modelos de aprendizaje profundo puede ser difícil debido a la gran cantidad de parámetros y configuraciones que se necesitan para todos los módulos. El módulo de entrenamiento podría necesitar parámetros como batch_size o num_epochs o parámetros para el programador de la tasa de aprendizaje. De manera similar, el módulo de preprocesamiento de datos podría necesitar train_test_split o parámetros para la aumento de imagen.

Un enfoque ingenuo para gestionar o introducir estos parámetros en la canalización es usarlos como argumentos de línea de comandos al ejecutar los scripts. Los argumentos de la línea de comandos pueden ser difíciles de introducir y puede que no sea posible gestionar todos los parámetros en un solo archivo. Los archivos TOML proporcionan una forma más limpia de gestionar configuraciones y los scripts pueden cargar las partes necesarias de la configuración en forma de un dict de Python sin necesidad de código redundante para leer/analizar los argumentos de la línea de comandos.

En este blog, exploraremos el uso de TOML en archivos de configuración y cómo podemos usarlos de manera eficiente en los scripts de entrenamiento/despliegue.

¿Qué son los archivos TOML?

TOML, abreviatura de Tom’s Obvious Minimal Language, es un formato de archivo diseñado específicamente para archivos de configuración. El concepto de un archivo TOML es bastante similar al de los archivos YAML/YML que tienen la capacidad de almacenar pares clave-valor en una jerarquía similar a un árbol. Una ventaja de TOML sobre YAML es su legibilidad, lo que se vuelve importante cuando hay varios niveles anidados.

Fig.1. Las mismas configuraciones de modelo escritas en TOML (izquierda) y YAML (derecha). TOML nos permite escribir pares clave-valor en el mismo nivel de sangría independientemente de la jerarquía.

Personalmente, aparte de una mayor legibilidad, no encuentro ninguna razón práctica para preferir TOML sobre YAML. Usar YAML está absolutamente bien, aquí hay un paquete de Python para analizar YAML.

¿Por qué necesitamos configuraciones en TOML?

Hay dos ventajas de usar TOML para almacenar la configuración de modelo/datos/despliegue para modelos de ML:

Gestionar todas las configuraciones en un solo archivo: Con los archivos TOML, podemos crear múltiples grupos de ajustes que se requieren para diferentes módulos. Por ejemplo, en la figura 1, las configuraciones relacionadas con el procedimiento de entrenamiento del modelo están anidadas bajo el atributo [train], de manera similar, el port y el host necesarios para desplegar el modelo se almacenan en deploy. No necesitamos saltar entre train.py o deploy.py para cambiar sus parámetros, en su lugar podemos globalizar todas las configuraciones desde un solo archivo de configuración TOML.

Esto puede ser de gran ayuda si estamos entrenando el modelo en una máquina virtual, donde los editores de código o los IDE no están disponibles para editar archivos. Un solo archivo de configuración es fácil de editar con vim o nano disponibles en la mayoría de las VM.

¿Cómo leemos las configuraciones de TOML?

Para leer la configuración de un archivo TOML, se pueden usar dos paquetes de Python, toml y munch. toml nos ayudará a leer el archivo TOML y devolver el contenido del archivo como un dict de Python. munch convertirá el contenido del dict para permitir el acceso con estilo de atributo de los elementos. Por ejemplo, en lugar de escribir, config["training"]["num_epochs"], podemos simplemente escribir config.training.num_epochs lo que mejora la legibilidad.

Considera la siguiente estructura de archivo,

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

project_config.toml contiene la configuración para nuestro proyecto de ML, como,

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

En config.py, creamos una función que devuelve la versión “munchified” de esta configuración, utilizando toml y 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 )

Ahora, en cualquiera de nuestros archivos de proyecto, como train.py o predict.py, podemos cargar esta configuración,

from config import load_global_configconfig = load_global_config()batch_size = config.train.batch_sizelr = config.train.learning_rateif config.train.checkpoint_path == "auto":    # Crear un directorio con el nombre como marca de tiempo actual    pass

La salida de print(toml.load(filepath)) es,

{'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 está utilizando herramientas de MLOps como W&B Tracking o MLFlow, mantener la configuración como un dict podría ser útil ya que podemos pasarla directamente como un argumento.

El Fin

¡Espero que consideres usar configuraciones TOML en tu próximo proyecto de ML! Es una forma limpia de administrar configuraciones que son globales o locales para tus scripts de entrenamiento / implementación o inferencia.

En lugar de escribir argumentos de CLI largos, los scripts podrían cargar directamente la configuración desde el archivo TOML. Si deseamos entrenar dos versiones de un modelo con diferentes hiperparámetros, solo necesitamos cambiar el archivo TOML en config.py. He comenzado a usar archivos TOML en mis proyectos recientes y la experimentación se ha vuelto más rápida. Las herramientas de MLOps también pueden manejar versiones de un modelo junto con sus configuraciones, pero la simplicidad del enfoque discutido anteriormente es única y requiere un cambio mínimo en los proyectos existentes.

¡Espero que hayas disfrutado leyendo. Que tengas un buen día!

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

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

AI Prowess Utilizando Docker para la implementación y escalabilidad eficiente de aplicaciones de Aprendizaje Automático

Aprovechando el poder de Docker optimizando soluciones de implementación, garantizando escalabilidad y simplificando ...

Inteligencia Artificial

Investigadores de NTU Singapur proponen PointHPS Un marco de IA para la estimación precisa de la postura humana y la forma a partir de nubes de puntos 3D.

Con varios avances en el campo de la Inteligencia Artificial, la estimación de la postura y forma humana (HPS, por su...

Ciencia de Datos

Revelando el Precision@N y Recall@N en un Sistema de Recomendación

Las métricas de precisión son una métrica útil para evaluar el rendimiento general en el aprendizaje automático, ya q...

Inteligencia Artificial

ChatGPT obtiene una puntuación en el 1% superior en la prueba de creatividad humana

La inteligencia artificial (IA) ha alcanzado nuevas alturas, según una investigación realizada por la Universidad de ...