Я не понимаю модель устойчивости в распределенном 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