Flujos de datos persistentes con dask

Estoy interesado en trabajar con flujos de datos distribuidos persistentes con características similares a las del proyecto Pegasus:https://pegasus.isi.edu/ por ejemplo. ¿Crees que hay una manera de hacerlo con dask?

Traté de implementar algo que funciona con un clúster SLURM y dask. A continuación describiré mi solución en grandes líneas para especificar mejor mi caso de uso.

La idea es ejecutar tareas de tamaño mediano (que se ejecutan entre unos minutos y horas) que se especifican con un gráfico que puede tener persistencia y puede extenderse fácilmente. Implementé algo basado en el planificador de dask y su API gráfica. Para tener persistencia, escribí dos tipos de decoradores:

un decorador "memorizar" que permite serializar de manera personalizable argumentos complejos y también los resultados de las funciones (un poco como dask hace con cachey o cofre, o como hace chispa con sus objetos RDD) yun decorador "retrasado" que permite ejecutar funciones en un clúster (SLURM). En la práctica, la API de funciones se modifica para que tomen los ID de trabajo de las dependencias como argumentos y devuelvan el ID de trabajo del trabajo creado en el clúster. Además, las funciones se serializan en un archivo de texto "launch.py" que se inicia con la API de línea de comandos del clúster.

La asociación taskname-jobid se guarda en un archivo json que permite gestionar la persistencia utilizando el estado de la tarea devuelta por el clúster. Esta forma de trabajar permite tener una especie de persistencia del gráfico. Ofrece la posibilidad de depurar fácilmente las tareas que fallaron. El hecho de utilizar un mecanismo de serialización ofrece la posibilidad de acceder fácilmente a todos los resultados intermedios, incluso sin todo el flujo de trabajo y / o las funciones que los generaron. Además, de esta manera es fácil interactuar con aplicaciones heredadas que no utilizan ese tipo de mecanismo de flujo de datos.

Esta solución es ciertamente un poco ingenua en comparación con otras formas más modernas de ejecutar flujos de trabajo distribuidos con dask y distribuido, pero me parece que tiene algunas ventajas debido a su capacidad de persistencia (de tareas y datos).

Me interesa saber si la solución parece pertinente o no y si parece describir un caso de uso interesante, no abordado, por dask.

Si alguien me puede recomendar otras formas de hacerlo, ¡también estoy interesado!

Respuestas a la pregunta(0)

Su respuesta a la pregunta