análisis de datos

adesso Blog

La orquestación de flujo de trabajo y los motores de flujo de trabajo son componentes cruciales en el procesamiento moderno de datos y el desarrollo de software, especialmente en el campo de la inteligencia artificial (IA). Estas tecnologías permiten gestionar y coordinar eficientemente diversas tareas y procesos dentro de tuberías de datos complejas. En esta entrada de blog, presentamos Prefect, una herramienta intuitiva para orquestar flujos de trabajo en el desarrollo de IA.

¿Qué es la orquestación de flujo de trabajo?

La orquestación de flujo de trabajo se refiere a la ejecución coordinada de diversas tareas y procesos dentro de una tubería de datos. En el desarrollo de IA, donde se necesitan procesar grandes conjuntos de datos, entrenar modelos y analizar resultados, la orquestación de flujo de trabajo asegura que estos procesos se ejecuten de manera fluida y eficiente. Los motores de flujo de trabajo son herramientas de software que permiten la orquestación de flujo de trabajo. Permiten a los desarrolladores definir, gestionar y monitorizar flujos de trabajo complejos. Un motor de flujo de trabajo asegura que las tareas definidas se ejecuten en el orden correcto y teniendo en cuenta las dependencias. También se encarga de asignar recursos de manera eficiente y reaccionar adecuadamente en caso de errores. Ejemplos de tales herramientas son Apache Airflow, Prefect y Dagster.


Ejemplo de un panel de control de flujo de trabajo para Prefect Cloud/on-prem (fuente: github.com/prefecthq/prefect)

¿Cómo funciona Prefect?

Un flujo de trabajo en Prefect se denomina "flow" (flujo), que siempre consiste en una serie de "tasks" (tareas). Estas tareas son los bloques básicos de construcción de un flujo de trabajo y representan acciones ejecutables individuales, como recuperar datos, procesarlos o guardar resultados. Cada tarea puede tener entradas y salidas. Las dependencias entre las tareas están claramente definidas en Prefect para controlar la secuencia de ejecución. Dado que estas tareas siempre se definen de la manera más atómica posible o solo como una tarea autosuficiente, pueden paralelizarse muy bien con las opciones de paralelización en Prefect, como DaskTaskRunner. Esto permite diseñar de manera muy eficiente y rentable la velocidad y eficiencia de las tuberías de datos, aunque esto generalmente no es tan eficiente en Python como en otros lenguajes de programación como Go.

Prefect difiere de otras herramientas de gestión de flujos de trabajo en su sólido manejo de errores y capacidad para enfrentar problemas inesperados. Prefect tiene un sistema integrado para rastrear el estado de los flujos de trabajo y las tareas. Esto hace posible responder, diagnosticar y resolver errores sin tener que reiniciar todo el proceso.

Los agentes de Prefect son procesos para monitorear y administrar la ejecución de flujos de trabajo. Los agentes pueden ejecutarse en computadoras locales o en la nube.

Prefect ofrece diferentes tipos de agentes, por ejemplo:

  • Agente Local: El Agente Local se ejecuta en la computadora local y es ideal para desarrollar y probar flujos de trabajo.
  • Agente Remoto: El Agente Remoto se ejecuta en otra computadora y se puede utilizar para ejecutar flujos de trabajo en la nube o en otro servidor.
  • Agente Kubernetes: El Agente Kubernetes permite la ejecución de flujos de trabajo en un clúster de Kubernetes.

También hay otras herramientas en el ecosistema de Prefect, como aplicaciones de CLI para monitorear y controlar flujos de trabajo, herramientas de IU como el panel de control mostrado anteriormente y otras herramientas útiles.


Imagen de ejemplo de un flujo (fuente: Prefect.io)

Prefect OSS y Prefect Cloud

Lo bueno de Prefect es que existe tanto una versión de código abierto como una versión en la nube. Esto hace posible ejecutar Prefect completamente en las instalaciones, pero también utilizar las capacidades y opciones extendidas de la versión en la nube. Probamos la versión de código abierto para un pequeño proyecto pro bono y pudimos utilizarla para construir una tubería de datos pequeña y eficiente. Sin embargo, para proyectos más grandes, recomendamos echar un vistazo a la versión en la nube, ya que ofrece significativamente más opciones y características de "facilidad de vida" como autenticación, automatización y soporte. En resumen, nuestra recomendación es la siguiente:

Prefect Open Source es ideal para:
  • Equipos que necesitan máxima flexibilidad y control.
  • Equipos con un presupuesto limitado y/o
  • Desarrolladores que entienden cómo funciona Prefect y les gustaría contribuir al desarrollo continuo de la plataforma.
Prefect Cloud es ideal para:
  • Equipos que buscan una solución conveniente y escalable.
  • Equipos que requieren funciones adicionales que no están disponibles en la versión de código abierto y/o
  • Equipos que requieren soporte del equipo de Prefect.

Comparación entre Prefect OSS (Open Source Software) y Prefect Cloud

Comparación con Airflow

Ambas plataformas, Prefect y Airflow, permiten a los usuarios definir dependencias entre tareas y proporcionan funciones de programación y activación para ejecutar estas tareas regularmente o en respuesta a eventos externos.

Aunque estas plataformas son similares en su enfoque básico, existen diferencias significativas en su lógica de ejecución y aplicación. Apache Airflow es especialmente adecuado para flujos de trabajo complejos pero estáticos definidos como gráficos acíclicos dirigidos (DAG). Esto lo convierte en una solución ideal para escenarios donde los flujos de trabajo deben ser planificados en detalle y ejecutados con una estructura fija. Airflow proporciona una interfaz de usuario que permite la visualización detallada de flujos de trabajo y su ejecución. Además, admite una variedad de opciones de integración que lo convierten en una opción robusta para tareas complejas de procesamiento de datos.

Prefect, por otro lado, es más adecuado para flujos de trabajo más simples que requieren una solución de orquestación ligera con flujos de trabajo dinámicos. Es particularmente beneficioso cuando los flujos de trabajo necesitan ser cambiados o personalizados regularmente, ya que permite una definición más flexible de tareas y sus dependencias. El enfoque de Prefect se centra en la máxima facilidad de uso y personalización, y proporciona funciones para el manejo eficiente de errores y la recuperación. Esta flexibilidad hace de Prefect una opción atractiva para equipos que necesitan reaccionar rápidamente y adaptar sus flujos de trabajo regularmente.

En resumen, la elección entre Apache Airflow y Prefect depende de los requisitos específicos de su flujo de trabajo. Si tiene flujos de trabajo complejos y estáticos y desea un control y visualización exhaustivos, Airflow es la mejor opción. Sin embargo, si prefiere flujos de trabajo más flexibles, dinámicos y simplificados, Prefect es la plataforma más adecuada. Ambas herramientas ofrecen capacidades poderosas de orquestación de flujos de trabajo, pero sus diferencias en estructura y ejecución deben considerarse al tomar una decisión.


Comparación de Argo, Airflow y Prefect: Fuente: https://neptune.ai/blog/argo-vs-airflow-vs-prefect-differences

Para realizar una prueba rápida y sin complicaciones de Prefect, recomendamos utilizar la versión en la nube, que está disponible en Prefect Cloud Pricing (https://www.prefect.io/pricing). Esto ofrece una versión gratuita para probar.

Empezar con Prefect Cloud es fácil:
  • 1. Visite el sitio web mencionado anteriormente y cree una cuenta de usuario.
  • 2. Cree un nuevo espacio de trabajo después de iniciar sesión.
  • 3. Para el próximo paso, necesitará una instalación de Python funcional. Puede instalar Prefect en su entorno de Python utilizando el comando pip install prefect.
  • 4. Después de la instalación, puede iniciar sesión en la nube utilizando el comando prefect cloud login y establecer una conexión con el Motor de la Nube.
  • 5. Luego puede crear un flujo de muestra guardando el código correspondiente en un archivo y ejecutándolo.

Cuando se ejecuta el código, se ejecuta automáticamente y se muestra según un horario definido. Varios parámetros se definen dentro del método serve, que incluye tanto propiedades de implementación como etiquetas específicas. Esto facilita la gestión y el seguimiento de múltiples ejecuciones. La función de parámetros permite la especificación de parámetros que se pasarán al flujo. Esto es particularmente útil si los parámetros deben transferirse dinámicamente o extraerse de configuraciones existentes. También se especifica el intervalo de ejecución del flujo. Por ejemplo, un valor de intervalo de 60 significa que el código se ejecuta automáticamente en un ciclo de 60 segundos. Un flujo en el motor representa un flujo de trabajo que puede constar de varios flujos. También es posible definir tareas individuales dentro de un flujo como tareas utilizando la anotación @Task. Los flujos pueden marcarse con varios tipos de corredores como el DaskRunner. Esta marcación permite a Prefect gestionar la ejecución de flujos automáticamente y en paralelo.


Ver en la terminal

A continuación, verá las ejecuciones y su estado en la vista general de ejecuciones de flujo:


Las ejecuciones individuales en la vista general de ejecuciones del flujo

Si una ejecución se retrasa, se etiqueta como 'tardía' y se compensa en un momento posterior en cuanto sea posible. Este procedimiento permite una paralelización eficiente de procesos y ejecuciones. Incluso en caso de fallos a corto plazo, los trabajos pendientes pueden compensarse fácil y eficientemente de esta manera.

Hemos creado un pequeño repositorio con un ejemplo, que se puede encontrar aquí: https://github.com/mfmezger/prefect-demo

Puedes encontrar temas más emocionantes del mundo de adesso en nuestras publicaciones anteriores del blog.

Imagen Marc Mezger

Autor Marc Mezger

Marc Fabian Mezger es Consultor Especialista en IA especializado en las áreas de Aprendizaje Médico Profundo, Visión por Ordenador y Deriva. En su puesto actual en el Centro de Competencia de IA y Ciencia de Datos, es responsable de asesorar a los clientes sobre soluciones de IA y su implementación. Posee amplios conocimientos en el campo del aprendizaje automático y profundo.

Imagen Azza Baatout

Autor Azza Baatout

Guarde esta página. Eliminar esta página.