Christian Julian Acosta Santamaria
cipriano salazar
Lograr que un flujo de trabajo corra de principio a fin y poder observar cada paso en una interfaz visual es uno de los momentos más gratificantes al trabajar con orquestación de pipelines de machine learning. Aquí se recorre el proceso completo: desde lanzar el flow hasta interpretar los resultados dentro del panel de Prefect.
¿Cómo se ejecuta un flujo de trabajo en Prefect?
Para poner en marcha el flow, basta con invocar el método principal del flujo y guardar el archivo [0:10]. Antes de ejecutar, hay dos requisitos previos que no se deben pasar por alto:
También es importante ubicarse en el directorio raíz del proyecto, donde se encuentran las carpetas de tracking, orchestration y los demás recursos [0:32]. El comando de ejecución sigue la forma python orchestration/<nombre_del_módulo>.py.
¿Por qué la primera tarea tarda más tiempo?
Es normal que el flujo se detenga varios minutos en la primera task [0:48]. La razón es que esa tarea realiza el procesamiento de datos, aplicando múltiples métodos sobre miles de registros. Las tareas restantes se ejecutan en serie: la segunda recibe como entrada lo que retorna la primera, es decir, los datos ya procesados [1:02].
En el ejemplo mostrado, el flujo completo tardó aproximadamente dos minutos con cuarenta y tres segundos [1:25], un tiempo bastante razonable considerando la cantidad de datos y el entrenamiento del modelo.
¿Qué se puede observar en el panel de Prefect?
Una vez finalizada la ejecución, la terminal muestra que cada tarea se completó con éxito. La última tarea imprime reportes de entrenamiento, métricas de test como el accuracy y retorna una lista de métricas [1:12].
Al abrir el panel de Prefect y revisar los runs, se visualizan:
En la sección de detalles aparecen los parámetros utilizados. En este caso no se retornó ningún artifact, aunque la documentación de Prefect explica cómo integrarlos para enriquecer la trazabilidad de cada corrida [2:05].
¿Qué es un subflow y cuándo conviene usarlo?
Un subflow es un flow anidado dentro de otro flow [1:50]. No se aplicó en este ejemplo, pero Prefect lo soporta de forma nativa. Cuando un pipeline crece en complejidad, encapsular una parte de la lógica en un subflow permite reutilizar y organizar mejor las piezas del sistema.
¿Cuál es la diferencia entre ejecutar tareas en serie y en paralelo?
Las tareas del ejemplo se ejecutaron en serie porque cada una depende de la salida de la anterior. Sin embargo, cuando dos o más tareas no tienen dependencia entre sí, se pueden ejecutar en paralelo, es decir, al mismo tiempo [2:22].
Esta configuración se gestiona a través de los workflows, que funcionan de manera similar a un flow pero ofrecen opciones avanzadas [2:32]:
Dominar estas opciones permite escalar los pipelines de ML de forma eficiente y aprovechar al máximo los recursos disponibles. Si ya lograste ejecutar tu primer flujo, el siguiente paso natural es experimentar con artifacts, ejecución en paralelo y subflows: comparte tu experiencia en los comentarios.
Christian Julian Acosta Santamaria
cipriano salazar
Robert Yesid Barrios Acendra
william albeiro amaya patiño
Juan Acevedo
Pablo Núñez
Pablo Núñez
cipriano salazar
Pablo Campiño
Pablo Campiño
Pablo Campiño
Pablo Campiño
Pablo Campiño
Pablo Campiño
En el archivo text_processing.py también es necesario cambiar el path de data_processed y el de data_raw, puesto que está puesto el de la profesora.
adicional cambiar también el Path de
DATA_PATH_PROCESSED
en el archivo config.py
¿Cómo hago si el proyecto trata de varios modelos que predigan 4 cosas distintas (regresión) a partir de una misma data? Porque a partir de una misma data, podrían ser 4 formas distintas de preprocesamiento de los datos, solo por mencionar una task de ejemplo. Pienso que tocaría modularizar las tasks en archivos separados.
hola, como soluciono este error: mlflow.exceptions.MlflowException: The configured tracking uri scheme: 'file' is invalid for use with the proxy mlflow-artifact scheme. The allowed tracking schemes are: {'http', 'https'}
Algo que estuve notando , a la hora de hacer el tracking , mlflow trata e cargarlos por default, pero como siempre, no es solo buena practica sino es casi obligatorio fijar la uri de donde se va a guardar el tracking
aparte se implementar prefect en mlops, en que otras situaciones es recomendable implementarlo?
me gustó mucho conocer prefect en este curso. suelo utilizar airflow pero creo que esta solución da una alternativa más, valiendonos de algún cron
una recomendación en el archivo
orchestrate_with_prefect.py
es recomendable colocar lo siguiente
import nltk
nltk.download('stopwords')
nltk.download('punkt')
De la clase: Tracking de experimentos con MLflow: preprocesamiento de datos y con base en el aporte de Ignacio Milesi que avala María Camila, resulta lo siguiente:
Train Accuracy: 0.9892254370102471, Test Accuracy: 0.9715239936719986
Y estos tiempos:
Train Accuracy: 0.9892254370102471, Test Accuracy: 0.9715239936719986
Y estos tiempos:
De la clase: Tracking de experimentos con MLflow: preprocesamiento de datos y con base en el aporte de Ignacio Milesi que avala María Camila, resulta lo siguiente:
De la clase: Tracking de experimentos con MLflow: preprocesamiento de datos y con base en el aporte de Ignacio Milesi que avala María Camila Durango Barrera, resulta lo siguiente:
Train Accuracy: 0.9892254370102471
Test Accuracy: 0.9715239936719986