Fluxos de dados persistentes com dask

Estou interessado em trabalhar com fluxos de dados distribuídos persistentes com recursos semelhantes aos do projeto Pegasus:https://pegasus.isi.edu/ por exemplo. Você acha que existe uma maneira de fazer isso com o Dask?

Tentei implementar algo que funcione com um cluster e um dosk do SLURM. Abaixo, descreverei minha solução em grandes linhas, a fim de especificar melhor meu caso de uso.

A idéia é executar tarefas de tamanho médio (que são executadas entre alguns minutos e horas), especificadas com um gráfico que pode ter persistência e pode ser facilmente estendido. Eu implementei algo baseado no agendador do dask e na sua API de gráfico. Para ter persistência, escrevi dois tipos de decoradores:

um decorador "memoize" que permite serializar de maneira personalizável argumentos complexos e também os resultados das funções (um pouco como o dask faz com cachey ou no peito, ou como o spark faz com seus objetos RDD) eum decorador "atrasado" que permite executar funções em um cluster (SLURM). Na prática, a API de funções é modificada para que eles tomem jobid de dependências como argumentos e retornem o jobid do job criado no cluster. Além disso, as funções são serializadas em um arquivo de texto "launch.py", que é iniciado com a API de linha de comando do cluster.

A associação taskname-jobid é salva em um arquivo json que permite gerenciar a persistência usando o status da tarefa retornada pelo cluster. Essa maneira de trabalhar permite ter uma espécie de persistência do gráfico. Oferece a possibilidade de depurar facilmente tarefas que falharam. O fato de usar um mecanismo de serialização oferece a possibilidade de acessar facilmente todos os resultados intermediários, mesmo sem todo o fluxo de trabalho e / ou as funções que os geraram. Além disso, dessa maneira, é fácil interagir com aplicativos herdados que não usam esse tipo de mecanismo de fluxo de dados.

Essa solução é certamente um pouco ingênua em comparação com outras maneiras mais modernas de executar fluxos de trabalho distribuídos com dask e distribuído, mas me parece ter algumas vantagens em relação aos recursos de persistência (de tarefas e dados).

Estou interessado em saber se a solução parece pertinente ou não e se parece descrever um caso de uso interessante, não abordado, do dask.

Se alguém puder me recomendar outras maneiras de fazer, também estou interessado!

questionAnswers(0)

yourAnswerToTheQuestion