Los "Pythons" en Machine Learning se refieren a productos automáticos que facilitan el tránsito desde la experimentación hasta la producción en esta área. Principalmente, estos productos están compuestos por tareas, las cuales son la unidad fundamental de los workflows en Machine Learning. Utilizando la librería de código abierto Prefect, podemos definir estas tareas de manera sencilla, lo que nos ayuda a automatizar procesos y mejorar la eficiencia del flujo de trabajo.
¿Cómo definir una tarea con Prefect?
La definición de tareas con Prefect se inicia mediante el uso de un decorador llamado @task, que se aplica a una función específica. A continuación, se muestra un ejemplo básico para ilustrar el proceso:
from prefect import task
@task
def miPrimeraTarea(mensaje):print("Hola", mensaje)
En este ejemplo, la tarea miPrimeraTarea recibe como parámetro un mensaje y ejecuta un print con él. La lógica interna de la función será lo que se ejecuta dentro de la tarea.
¿Cómo integrar una tarea en un workflow?
Para introducir una tarea dentro de la lógica de un flujo de trabajo se utiliza la anotación @flow, que es la encargada de gestionar estas tareas dentro de un flujo más extenso. A continuación, los pasos para crear un flujo simple que clasifique el conjunto de datos "iris":
Importar Librerías:
Se requiere importar Prefect y otras bibliotecas como Scikit-Learn.
Definir la Tarea:
Se utiliza el decorador @task para definir la lógica de la tarea.
Crear el Diccionario de Datos:
Se extraen los datos y se estructuran en un diccionario que almacenará las features y el target.
Ejecutar un Flujo:
Se incorpora la tarea dentro de un flujo empleando el decorador @flow.
Aquí un ejemplo del flujo:
from prefect import flow, task
from sklearn import datasets
@task
def obtenerDatos():"""
Carga el dataset de Iris desde Scikit-Learn."""
datos = datasets.load_iris()return{'X': datos.data,'y': datos.target}@flow(retries=3, retry_delay_seconds=5)def clasificacionIris(): data =obtenerDatos()print(data)clasificacionIris()
Este código ilustra el flujo clasificacionIris, que ejecuta la tarea obtenerDatos, cargando así los datos del conjunto de "iris" y gestionando posibles errores.
¿Cómo visualizar y gestionar los flujos en Prefect?
Para poder observar y controlar nuestros flujos y tareas de manera efectiva, Prefect nos ofrece una interfaz gráfica a través de su servidor. Para inicializar el servidor, se pueden seguir estos pasos:
Activar el entorno virtual.
Ejecutar el comando prefect server start en la terminal.
Abrir la dirección proporcionada en un navegador para acceder a la interfaz.
Con esta configuración, puedes gestionar tus flujos, observar los registros y consultar el estado de tus tareas. Prefect ofrece funcionalidades como reintentos automáticos, reintentos con un retraso específico y almacenamiento eficiente de registros, lo que resulta invaluable en proyectos de Machine Learning. A medida que sigas avanzando, considera integrar múltiples tareas para encadenar flujos automáticos más complejos, optimizando así tus recursos y experimentos en Machine Learning.
reciben un error relacionado a la Base de datos pueden ejecutar el siguiente comando:
rm ~/.prefect/prefect.db
Y luego volver a intentarlo, esto borra la base de datos que existia y generaba el bug. Al volver a iniciar el servidor el crea otro nuevo para poder continuar con la clase!
Graciassss por el aporte para los ubunteros!
i would like to know how large files like models.pkl or the mlflow db would be shared in case of no acces to the cloud?
Trabajar en local, no?
El caso de usar un solo modelo, ¿es para el caso de la clase?
Pregunto porque me imagino un pipeline donde el punto de inicio sea una query o sp que haga unload de archivo parquet a S3.
De ahí leer el archivo en el bucket y pasarlo por un pipeline de sklearn para tener los datos preprocesados, luego hacer el split y guardar nuevamente en S3 esos archivos.
Y teniendo ya en mente que modelos son mejores (2 o 3) para mi correr GridSearchCV y quedarme con el mejor modelo evaluando la métrica con la que se optimizó.
¿Estoy errado de pensar hacer GridSearchCV o RandomSearchCV en la parte casi final del modelo para evaluar nuevamente los mejores hiperparametros y según reglas, ver si lo publico o no?
Prefect existe para simplificar la creación y gestión de flujos de trabajo de machine learning, proporcionando características que no se logran solo con Python. Aunque puedes crear flujos con Python, Prefect ofrece herramientas como la gestión de estados, reintentos automáticos y visualización de logs, lo que mejora la eficiencia y confiabilidad de tus pipelines. Además, permite descomponer tareas complejas en unidades más manejables, facilitando la orquestación y monitoreo de procesos de machine learning.