Мониторинг хода выполнения xarrays split apply combine с использованием dask

#python #progress-bar #monitoring #dask #python-xarray

#python #индикатор выполнения #мониторинг #dask #python-xarray

Вопрос:

Для моей диссертации я пытаюсь рассчитать оценку SLOM (см. https://link.springer.com/article/10.1007/s10115-005-0200-2 ). Эта оценка является чисто пространственной, и я пытаюсь вычислить ее для больших наборов данных. (более года).

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

Я пытаюсь вычислить значения SLOM для каждого временного шага.

В настоящее время я делаю это, используя стратегию groupby: split apply combine (http://xarray.pydata.org/en/stable/groupby.html )

 grouped_by_time = xrDS.groupby("time")
xrDS["SLOM"]=grouped_by_time.apply(slom_per_timeslice)
  

Чтобы ускорить процесс, я пытаюсь использовать функциональность dask, встроенную в xarray, загружая свои данные как daskarray:

 xrDS = xr.open_dataset(data_path file_name, chunks={"lat":-1,"lon":-1,"time": "auto"})
  

Я думаю, что функция apply должна работать с daskarrays, согласно первому предложению: http://xarray.pydata.org/en/stable/dask.html#using-dask-with-xarray

Теперь мой вопрос в том, как мне отслеживать ход выполнения функции groupedby.apply? Я попытался использовать панель выполнения dask:

 from dask.diagnostics import ProgressBar

with ProgressBar():
  xrDS["SLOM"]=grouped_by_time.apply(slom_per_timeslice)
  

Выдает следующий результат:

 [########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
[########################################] | 100% Completed |  0.1s
  

сотни раз.

Итак, как мне правильно видеть ход общего вычисления?

В качестве примечания я работаю над небольшими тестами на ноутбуке jupyter на моем личном рабочем столе и выполняю более крупные прогоны на компьютере исследовательской группы. У меня есть только ssh-доступ к этой машине. Оба случая — это одна машина, поэтому я думаю, что многопоточного планировщика dask по умолчанию должно быть достаточно.

Я посмотрел на панель управления dask, но как это будет работать только с доступом по ssh?

Комментарии:

1. «только с доступом по ssh» — ssh может туннелировать что угодно где угодно 🙂

Ответ №1:

Вы можете использовать client = distributed.Client() для настройки кластера, который будет работать с панелью мониторинга. См. https://distributed.dask.org/en/latest/quickstart.html#setup-dask-distributed-the-easy-way