Construir pipelines de machine learning que funcionen de forma automática y confiable es uno de los retos más importantes en MLOps. En Prefect, el concepto de flow actúa como el orquestador central que coordina múltiples tareas, permitiendo llevar la experimentación a entornos productivos con mínima intervención manual.
¿Qué es un flow y por qué es esencial en Prefect?
Un flow es una serie de lógicas compuestas por una o más tasks (tareas). Puedes pensarlo como el director de orquesta que decide en qué orden se ejecutan los métodos asociados a cada tarea [00:06]. Definir un flow es muy similar a definir una tarea: simplemente agrupas las funciones necesarias y las invocas en secuencia dentro del flow.
La regla fundamental es que para ejecutar una tarea, esta debe estar dentro de un flow. Sin flow, no hay ejecución posible.
¿Cómo se construye un flow con múltiples tareas para clasificación Iris?
En el ejemplo práctico se construye un flow llamado Iris Classification compuesto por tres tareas encadenadas:
- Obtener los datos: la primera tarea carga el dataset Iris directamente desde Scikit-learn [01:00].
- Dividir los datos (split data): recibe el diccionario de salida de la tarea anterior, extrae las features bajo la key
data y las etiquetas bajo la key target, y aplica train_test_split con un test_size y un random_state de 42 [00:48].
- Entrenar el modelo (train model): recibe los conjuntos de entrenamiento y test, define un Random Forest Classifier, ejecuta el
fit y calcula el accuracy como métrica de desempeño [01:20].
Para incluir estas tareas dentro del flow basta con invocarlas en orden, pasando la salida de una como argumento de la siguiente. La ejecución se lanza simplemente llamando al nombre del flow [01:44].
¿Cómo se visualizan los resultados en la interfaz de Prefect?
Al ejecutar el script desde la terminal secundaria —recordando que la primera terminal mantiene el servidor de Prefect activo— los logs muestran cada tarea completada: carga del dataset, división de datos y entrenamiento del modelo [02:18].
En la UI de Prefect, al refrescar los flows aparece el run de Iris Classification. Al hacer clic se observan las tres tareas con sus estados, tiempos de ejecución y detalles como name, description y tags [02:34].
¿Qué son los artefactos de salida en una tarea?
Una tarea puede generar artefactos como resultado. Por ejemplo, la tarea de dividir los datos podría almacenar los conjuntos resultantes en un archivo comprimido como pickle o parquet, reduciendo el peso en memoria [03:20]. Estos artefactos se clasifican en dos tipos principales:
- Tipo data: generados por tareas de tipo ETL (Extract, Transform, Load), representan los datos listos para entrenar un modelo [04:08].
- Tipo model: generados por tareas de entrenamiento, representan el modelo ya entrenado que puede llevarse a pruebas y eventualmente a producción [04:30].
El insumo de salida de una tarea se convierte en la variable de entrada de la siguiente, creando una cadena de dependencias clara y trazable.
¿Cómo automatizar la ejecución de flows con programadores tipo Cron?
Los flows en Prefect aceptan parámetros similares a los de las tasks: name, description, tags, retries, retry_delay_seconds y version [04:48]. Además, es posible integrarlos con programadores externos como Cron para definir ejecuciones automáticas de forma diaria, semanal, mensual o en cualquier intervalo de tiempo [05:08].
Esta capacidad es fundamental cuando se necesita, por ejemplo, reentrenar un modelo periódicamente. El pipeline completo —adquisición, transformación, división y entrenamiento— se ejecuta sin intervención humana, minimizando la probabilidad de error [02:58].
La filosofía detrás de esta automatización es clara: piensa como si todo fuera a fallar. Cuando los procesos son automáticos, la probabilidad de error disminuye considerablemente y la reproducibilidad aumenta.
Si ya estás experimentando con Prefect, te invito a que explores la documentación oficial sobre la creación de artefactos dentro de flujos de trabajo y compartas tu experiencia configurando flows con múltiples tareas.