2016-09-28 13 views
0

Я запускаю кластер с dask.distributed. В настоящее время я отправляю задачи в кластер с ноутбуком Jupyter, который я использую в качестве графического интерфейса.Отзывчивый ноутбук IPython с текущим индикатором хода dask/распределенный

Соответствующая ячейка ноутбука содержит следующий код.

%pylab inline 
%load_ext autoreload 
%autoreload 2 

from distributed import progress 
sys.path.append('/path/to/my/python/modules/on/NAS') 

import jobs 
jobid = jobs.add_new_job(...) 
r = jobs.start_job(jobid) 
progress(r) 

jobs это имя моего питона модуля. jobs.add_new_job возвращает строку с идентификатором задания. jobs.start_job возвращает список distributed.client.Future s. Конечным результатом работы является отчет с некоторыми номерами и некоторыми графиками в формате PDF.

Теперь я хотел бы реализовать очередь заданий с некоторым указанием на то, что сейчас обрабатывается и что ждет.

Моя цель - реализовать следующий сценарий.

Участник моей команды готовит некоторые данные для новой работы, затем открывает блокнот Jupyter в своем браузере, вводит параметры задания в ячейку при вызове add_new_job, затем выполняет эту ячейку, затем закрывает эту страницу и ждет, пока вычисления не будут выполнены сделанный. Он также мог оставить страницу открытой и наблюдать за прогрессом.

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

Если я попытаюсь отправить еще одно задание, просто отредактировав код ячейки и запустив его снова, кластер прекратит вычислять первое отправленное задание. Мое объяснение заключается в том, что r удаляется, а его деструктор отправляет запросы на отмену кластера.

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

Кроме того, индикатор выполнения, отображаемый progress, очень часто исчезает сам по себе.

Я уже читал о JupyterHub, но в настоящее время мне кажется, что использование его похоже на стреляющих воробьев с тяжелой артиллерией, и должен быть более простой способ.

ответ

1

Мое объяснение этого является то, что г удаляется, а его деструктор отправляет запросы отмены в кластер

Это правильно. Простой способ избежать этого можно было бы добавить r в какой-то результирующий набор, который не удаляется каждый раз, когда вы запускаете ячейку

-- cell 1 -- 

results = [] 

-- cell 2 -- 

import jobs 
jobid = jobs.add_new_job(...) 
r = jobs.start_job(jobid) 
results.append(r) 
progress(r) 
+0

Спасибо. Это превратит ноутбук в менеджера очередей заданий? – wl2776