dask, joblib, ipyparallel и другие планировщики для смущающих параллельных задач - PullRequest
0 голосов
/ 01 февраля 2019

Это более общий вопрос о том, как запустить «смущающе параллельные» проблемы с «планировщиками» Python в научной среде.

У меня есть код, который является гибридом Python / Cython / C (для этогоНапример, я использую github.com/tardis-sn/tardis .. но у меня есть больше таких проблем для других кодов), который внутренне OpenMP парализован.Он предоставляет единственную функцию, которая принимает словарь параметров и оценивает объект в течение нескольких сотен секунд, работая на ~ 8 ядрах (result=fun(paramset, calibdata), где paramset - это dict, а result - объект (коллекция панд и массивов).в основном), а calibdata - это предварительно загруженный объект данных / объект pandas).Он регистрирует с использованием стандартной функции регистрации Python.

Мне бы хотелось, чтобы среда Python могла легко оценивать ~ 10-100 тыс. Наборов параметров, используя fun в кластерной среде SLURM / TORQUE / ....В идеале, эта среда будет автоматически порождать рабочих (при наличии нескольких ядер) и распределять наборы параметров между рабочими (различные наборы параметров занимают различное количество времени).Было бы неплохо увидеть состояние (in_queue, выполняется, завершено, не удалось) для каждого из наборов параметров, а также журналов (если он не выполнен, завершен или работает).

Было бы неплохо, если бы он отслеживал, что закончено и что нужно сделать, чтобы я мог перезапустить это, если мои задачи планировщика не будут выполнены.Было бы неплохо, если бы это, казалось бы, интегрировалось в ноутбук Jupyter и работало локально для тестирования.

Я пробовал dask, но это, похоже, не ставит задачи в очередь, а запускает их одновременно с client.map(fun, [list of parameter sets]).Может быть, есть лучшие инструменты или, может быть, это очень нишевая проблема.Мне также неясно, в чем разница между dask, joblib и ipyparallel (быстро попробовав все три из них на разных этапах).

Рад предоставить дополнительную информацию, если что-то не понятно.

ОБНОВЛЕНИЕ : так что dask, кажется, обеспечивает некоторую функциональность того, что мне нужно - но работа с распараллеленным кодом OpenMP в дополнение к dask не проста - см. Проблему https://github.com/dask/dask-jobqueue/issues/181

...