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:
- Tener activado el entorno virtual del proyecto.
- Haber inicializado el servidor de Prefect en una terminal separada.
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:
- Los logs generados durante la ejecución.
- Las corridas asociadas a cada tarea del flujo: text processing, feature extraction, entrenamiento del modelo y evaluación [1:38].
- Un diagrama visual que muestra las relaciones entre tareas y el orden en que se ejecutaron [2:15].
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]:
- Modificar parámetros de la instancia de cómputo, como el tamaño (medium, large).
- Habilitar el uso de GPU cuando se entrena un modelo con redes neuronales complejas que requieren mayor capacidad de procesamiento.
- Definir especificaciones de infraestructura directamente desde la configuración del workflow.
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.