dask: как избежать тайм-аута для задания? - PullRequest
0 голосов
/ 19 декабря 2018

В моем приложении, основанном на dask (с использованием планировщика distributed), я вижу сбои, которые начинаются с этого текста ошибки:

tornado.application - ERROR - Exception in Future <Future cancelled> after timeout
Traceback (most recent call last):
  File "/miniconda/envs/flyem/lib/python3.6/site-packages/tornado/gen.py", line 970, in error_callback
    future.result()
concurrent.futures._base.CancelledError

За ними следует вторая трассировка, которая (я думаю,) указывает, какую строку выполняла моя задача, когда истекло время ожидания.(Точно, как distributed удается это сделать, мне не ясно - может быть, с помощью сигнала?)

Вот часть dask второй трассировки:

  ... my code...

  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/dask/base.py", line 156, in compute
    (result,) = compute(self, traverse=False, **kwargs)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/dask/base.py", line 397, in compute
    results = schedule(dsk, keys, **kwargs)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/distributed/client.py", line 2308, in get
    direct=direct)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/distributed/client.py", line 1647, in gather
    asynchronous=asynchronous)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/distributed/client.py", line 665, in sync
    return sync(self.loop, func, *args, **kwargs)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/distributed/utils.py", line 277, in sync
    six.reraise(*error[0])
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/six.py", line 693, in reraise
    raise value
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/distributed/utils.py", line 262, in f
    result[0] = yield future
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/tornado/gen.py", line 1133, in run
    value = future.result()
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/tornado/gen.py", line 1141, in run
    yielded = self.gen.throw(*exc_info)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/distributed/client.py", line 1492, in _gather
    traceback)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/six.py", line 692, in reraise
    raise value.with_traceback(tb)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/dask/bag/core.py", line 1562, in reify
    seq = list(seq)
  File "/groups/flyem/proj/cluster/miniforge/envs/flyem/lib/python3.6/site-packages/dask/bag/core.py", line 1722, in map_chunk
    yield f(*a)

  ... my code ....
  1. Указывает ли after timeout, что задание заняло слишком много времени, или есть какое-то другое время ожидания, которое вызывает отмену, например, время ожидания няни или сердцебиения?(Из того, что я могу сказать, нет явного тайм-аута на длину задачи в dask, но, возможно, я запутался.)

  2. Я вижу, что задача была отменена.Но я хотел бы знать почему.Есть ли простой способ выяснить, какая строка кода (в dask или distributed) отменяет мою задачу и почему?

  3. Я ожидаю Эти задачи занимают много времени - они загружают большие буферы в облачное хранилище.Как я могу увеличить время ожидания конкретной задачи в сумерках?

1 Ответ

0 голосов
/ 02 января 2019

Dask не накладывает таймаут на задачи по умолчанию.

Отмененное будущее, которое вы видите, - это не будущее Dask, а будущее Tornado (Tornado - это библиотека, которую Dask использует для сетевого взаимодействия).Так что, к сожалению, все это говорит о том, что что-то не получилось.

Надеемся, что последующая трассировка содержит информацию о том, какой именно код был неудачным.В идеале это указывает на строку в ваших функциях, где произошел сбой.Возможно, это помогает?

В общем, мы рекомендуем эти шаги при отладке кода, запускаемого через Dask: http://docs.dask.org/en/latest/debugging.html

...