dask.delayed KeyError с распределенным планировщиком - PullRequest
1 голос
/ 06 апреля 2020

У меня есть функция interpolate_to_particles, написанная в c и обернутая ctypes. Я хочу использовать dask.delayed для выполнения серии вызовов этой функции.

Код успешно выполняется без dask

# Interpolate w/o dask
result = interpolate_to_particles(arg1, arg2, arg3)

и с распределенным расписанием в режиме single-threaded

# Interpolate w/ dask
from dask.distributed import Client
client = Client()
result = dask.delayed(interpolate_to_particles)(arg1, arg2, arg3)
result_c = result.compute(scheduler='single-threaded')

, но если я вместо этого позвоню

result_c = result.compute()

Я получаю следующую KeyError:

> Traceback (most recent call last):   File
> "/path/to/lib/python3.6/site-packages/distributed/worker.py",
> line 3287, in dumps_function
>     result = cache_dumps[func]   File "/path/to/lib/python3.6/site-packages/distributed/utils.py",
> line 1518, in __getitem__
>     value = super().__getitem__(key)   File "/path/to/lib/python3.6/collections/__init__.py",
> line 991, in __getitem__
>     raise KeyError(key) KeyError: <function interpolate_to_particles at 0x1228ce510>

Рабочие журналы, доступные из панели мониторинга dask, не предоставляют никакой информации. На самом деле я не вижу никакой информации о том, что рабочие что-то сделали, кроме запуска.

Есть идеи о том, что может происходить, или предложены инструменты, которые я могу использовать для дальнейшей отладки? Спасибо!

1 Ответ

0 голосов
/ 12 апреля 2020

Учитывая ваши комментарии, похоже, что ваша функция не сериализуется хорошо. Чтобы проверить это, вы можете попробовать выбрать функцию в одном процессе и попробовать отключить ее в другом.

>>> import pickle
>>> print(pickle.dumps(interpolate_to_particles))
b'some bytes printed out here'

А затем в другом процессе

>>> import pickle
>>> interpolate_to_particles = pickle.loads(b'the same bytes you had before')

Если это не работает тогда ты поймешь, что это твоя проблема. Я бы посоветовал вам поискать «как убедиться, что функции ctypes сериализуемы» или что-то подобное, или задать другой вопрос с такой меньшей областью здесь, в переполнении стека.

...