#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