Argo Workflows es una potente herramienta de gestión de flujos de trabajo que se utiliza ampliamente para tareas programadas, aprendizaje automático y ETL. Sin embargo, definir flujos de trabajo con YAML implica una curva de aprendizaje pronunciada. El SDK de Hera para Python ofrece una alternativa sencilla. Hera permite construir flujos de trabajo en Python, lo cual admite tareas complejas, simplifica las pruebas y se integra perfectamente con el ecosistema de Python; esto facilita enormemente el diseño de flujos de trabajo complejos. Este tema describe cómo usar el SDK de Python para construir flujos de trabajo Argo a gran escala.
Contexto
Argo Workflows es una herramienta de gestión de flujos de trabajo de código abierto diseñada específicamente para entornos de Kubernetes. Se centra en la orquestación de flujos de trabajo complejos y permite definir una serie de tareas, además de organizar con flexibilidad su orden de ejecución y sus dependencias. Argo Workflows le ayuda a construir y gestionar de manera eficiente flujos de trabajo automatizados y altamente personalizados.
Argo Workflows tiene una amplia variedad de casos de uso, entre ellos tareas programadas, aprendizaje automático, cómputo por simulación, cómputo científico, ETL, entrenamiento de modelos y CI/CD. Utiliza principalmente YAML para definir los flujos de trabajo, una decisión de diseño orientada a la claridad y la simplicidad. No obstante, para quienes no tienen experiencia en YAML, su estricta sangría y estructura jerárquica pueden generar una curva de aprendizaje pronunciada, especialmente en flujos de trabajo complejos.
Hera es un framework del SDK de Python diseñado para construir y enviar flujos de trabajo de Argo. Simplifica tanto la creación como el envío de estos flujos. Para los científicos de datos, usar Python se alinea con sus prácticas habituales y les ayuda a superar los desafíos que presenta YAML.
Comparación de métodos de autoría
|
YAML |
Hera |
|
|
Simplicidad |
Alta |
Alta, con menos líneas de código |
|
Escritura de flujos de trabajo complejos |
Difícil |
Fácil, evita eficazmente posibles errores de sintaxis de YAML |
|
Integración con el ecosistema de Python |
Difícil |
Fácil, acceso a bibliotecas ricas de Python |
|
Capacidad de prueba |
Difícil, propenso a errores de sintaxis |
Fácil. Es posible usar frameworks de pruebas para mejorar la calidad y la mantenibilidad del código. |
Hera conecta el ecosistema de Python con el framework de Argo Workflows, lo que hace que el diseño de flujos de trabajo sea más intuitivo. Permite la orquestación de tareas a gran escala sin la complejidad de YAML, y permite a científicos de datos e ingenieros trabajar en su entorno preferido de Python. Esto hace que la construcción y optimización de flujos de trabajo de aprendizaje automático sea fluida y eficiente, acelerando el ciclo de iteración desde la idea hasta el despliegue. A continuación, los ejemplos utilizan Hera.
Paso 1: Crear un clúster y obtener un token
Create an Argo workflow cluster, luego enable Argo Server and access the workflow console.
-
Cree un token de clúster.
kubectl create token default -n default
Paso 2: Enviar flujos de trabajo con Hera
-
Instale Hera.
pip install hera -
Escriba y envíe los flujos de trabajo.
Diamante DAG simple
En Argo Workflows, un DAG (grafo acíclico dirigido) se usa frecuentemente para definir dependencias complejas entre tareas. El patrón de diamante es común: las tareas divergen y luego convergen. Esta estructura resulta eficaz para el procesamiento paralelo donde los resultados se agregan en una tarea posterior común. El siguiente ejemplo muestra cómo usar Hera para definir un flujo de trabajo con estructura de diamante. La tarea A se ejecuta primero, seguida de dos tareas paralelas, B y C. Una última tarea, D, se ejecuta después de que terminan tanto B como C, y completa así el flujo de trabajo.
-
Cree un archivo llamado
simpleDAG.pycon el siguiente contenido.# Import the required packages. from hera.workflows import DAG, Workflow, script from hera.shared import global_config import urllib3 urllib3.disable_warnings() # Configure the host address and token. global_config.host = "https://{{argo_server_IP}}:2746" global_config.token = "abcdefgxxxxxx" # Replace with the token you obtained. global_config.verify_ssl = "" # The @script decorator is a key Hera feature that lets you orchestrate Python functions almost natively. # It allows you to call the decorated function within a Hera context manager, such as a Workflow or Steps context. # The function still runs normally outside of any Hera context, which means you can write unit tests for it. # This example prints the input message. @script(image="mirrors-ssl.aliyuncs.com/python:3.10") def echo(message: str): print(message) # A Workflow is the primary resource in Argo and a key class in Hera. It stores templates, sets an entrypoint, and runs them. with Workflow( generate_name="dag-diamond-", entrypoint="diamond", namespace="default", ) as w: with DAG(name="diamond"): A = echo(name="A", arguments={"message": "A"}) # Build a template. B = echo(name="B", arguments={"message": "B"}) C = echo(name="C", arguments={"message": "C"}) D = echo(name="D", arguments={"message": "D"}) A >> [B, C] >> D # Define the dependencies: Tasks B and C depend on A, and task D depends on B and C. # Create the workflow. w.create() -
Envíe el flujo de trabajo.
python simpleDAG.py -
Una vez que se ejecute el flujo de trabajo, podrá consultar el DAG de tareas y sus resultados en la workflow console.
El flujo de trabajo de ejemplo
dag-diamond-g9v45muestra una topología DAG en forma de diamante: el nodo de nivel superior A se completa, luego los nodos B y C se ejecutan en paralelo y, finalmente, convergen en el nodo D. Todos los nodos aparecen marcados como ejecutados correctamente.
Map-reduce
En Argo Workflows, es posible implementar procesamiento de datos estilo MapReduce mediante plantillas DAG para simular las fases map y reduce. El siguiente ejemplo demuestra cómo usar Hera para construir un flujo de trabajo sencillo de MapReduce. Este flujo divide una tarea en varias tareas map paralelas y luego agrega sus resultados en una tarea final de reduce. Cada paso es una función de Python, lo que facilita la integración con el ecosistema de Python.
-
Cree un archivo llamado
map-reduce.pycon el siguiente contenido. -
Envíe el flujo de trabajo.
python map-reduce.py Después de que se ejecute el flujo de trabajo, podrá consultar el DAG de tareas y sus resultados en la workflow console. En la página WORKFLOW DETAILS, la vista DAG muestra que el nodo
split, los cuatro nodosmapparalelos y el nodoreducese han ejecutado correctamente (indicado con una marca de verificación verde).
-
Referencias
-
Documentación de Hera:
Obtenga más información sobre Hera en la descripción general de Hera.
Para entrenar un modelo de lenguaje grande (LLM) con Hera, consulte Entrenamiento de LLM con Hera.
-
Ejemplos de despliegue con YAML:
Para desplegar el ejemplo simple de diamante mediante YAML, consulte dag-diamond.yaml.
Para desplegar el ejemplo de map-reduce mediante YAML, consulte map-reduce.yaml.