Как сделать так, чтобы клиент dask не умер при исключении рабочего? - PullRequest
0 голосов
/ 22 декабря 2018

Я не понимаю модель устойчивости в распределенном dask.

Задача

Исключения, поднятые работниками, убивают смущающе параллельную работу с напитками.Все работники и клиенты умирают, если какой-либо работник встречает исключение.

Ожидаемое поведение

Чтение здесь: http://distributed.dask.org/en/latest/resilience.html#user-code-failures Предполагается, что исключения должны содержаться для работников и что последующие задачи будут выполняться без перерыва.

«Когда функция вызывает ошибку, эта ошибка сохраняется и передается клиенту по запросу. Любая попытка собрать этот результат или любой зависимый результат вызовет это исключение ... Это не влияет на бесперебойную работу планировщика или рабочего в любомпуть."

Я следовал здесь смущающему параллельному варианту использования: http://docs.dask.org/en/latest/use-cases.html

Воспроизводимый пример

import numpy as np
np.random.seed(0)

from dask import compute, delayed
from dask.distributed import Client, LocalCluster

def raise_exception(x):
    if x == 10:
        raise ValueError("I'm an error on a worker")
    elif x == 20:
        print("I've made it to 20")
    else:
        return(x)


if __name__=="__main__":

    #Create cluster
    cluster = LocalCluster(n_workers=2,threads_per_worker=1)
    client = Client(cluster)

    values = [delayed(raise_exception)(x) for x in range(0,100)]
    results=compute(*values,scheduler='distributed')

Задача 20 никогда не выполняется.Исключение в задаче 10 приводит к смерти планировщика и рабочих.Что я не понимаю в модели программирования?Почему это считается сбором?Я просто хочу запускать каждую задачу и фиксировать любые исключения для последующей проверки, а не вызывать их на клиенте.

Вариант использования

Параллельная обработка изображений в кластере SLURM университета.Моя функция имеет побочный эффект, который сохраняет обработанные изображения в файл.Процессы независимы и никогда не собираются планировщиком.Исключение приводит к гибели всех узлов в кластере.

Перекрестный список проблем, поскольку я не уверен, является ли это ошибкой или функцией!

https://github.com/dask/distributed/issues/2436

1 Ответ

0 голосов
/ 22 декабря 2018

Отвечено в репо - отложенная работа вычисляет все или ничего.Используйте карту Dask из интерфейса одновременных фьючерсов + ожидание.Это было разработано, а не ошибка.

https://github.com/dask/distributed/issues/2436

...