Как найти отправку задачи, вызывающую исключение в вычислении dask? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь отладить код, который использует dask для расчетов. Трассировка исключений заканчивается на:

  File "/media/nas/x21324/miniconda3/envs/py37d/lib/python3.7/site-packages/dask/core.py", line 118, in _execute_task
    args2 = [_execute_task(a, cache) for a in args]
  File "/media/nas/x21324/miniconda3/envs/py37d/lib/python3.7/site-packages/dask/core.py", line 118, in <listcomp>
    args2 = [_execute_task(a, cache) for a in args]
  File "/media/nas/x21324/miniconda3/envs/py37d/lib/python3.7/site-packages/dask/core.py", line 119, in _execute_task
    return func(*args2)
  File "/media/nas/x21324/miniconda3/envs/py37d/lib/python3.7/site-packages/dask/optimization.py", line 942, in __call__
    dict(zip(self.inkeys, args)))
  File "/media/nas/x21324/miniconda3/envs/py37d/lib/python3.7/site-packages/dask/core.py", line 149, in get
    result = _execute_task(task, cache)
  File "/media/nas/x21324/miniconda3/envs/py37d/lib/python3.7/site-packages/dask/core.py", line 119, in _execute_task
    return func(*args2)
RuntimeWarning: invalid value encountered in less_equal

, который на многих уровнях приводит к вызову .compute(...), который либо вызывается явно, либо является следствием какой-либо другой операции, запускающей вычисления (в данном случае numpy.ma.masked_invalid). Фактический код, вызывающий ошибку, находится в другом месте, в операции, когда планируется задача задачи.

Следуя рекомендациям по отладке dask , я запустил dask.config.set(scheduler='single-threaded'), но, насколько я могу судить, это ничего не меняет.

Есть ли способ, которым я могу настроить dask для выполнения всех задач сразу после отправки, или каким-либо другим способом, которым я получаю трассировку, чтобы я мог указать отладку на строку, где была отправлена ​​инструкция?


(Это предупреждение, а не ошибка, но я превратил его в исключение, потому что хочу изучить обстоятельства, вызывающие его)

1 Ответ

0 голосов
/ 06 мая 2019

Я запустил dask.config.set (scheduler = 'single-thread'), но, насколько я могу судить, это ничего не меняет.

Когда вы видите исключение в однопоточном планировщике, вы можете запустить pdb.pm() (или просто pdb в сеансе ipython / jupyter), как и для любого другого исключения, и таким образом выяснить условия на момент ошибки.

...