Смущающе параллельный цикл For, вызов подпроцесса - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть программа на Python, которая работает следующим образом:

  1. Инициализация данных

  2. Вызвать внешнее программное обеспечение, чтобы вычислить результат данных (используя подпроцесс), прочитать обратно в вывод внешнего программного обеспечения

  3. манипулировать выводом, подготовить его к переходу к шагу 1.

Я хочу распараллелить шаг 2 в кластерной среде (slurm), используя для этого многоузловую среду.

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

Я попытался использовать dask-jobqueue, однако это основано на создании пакетного файла для каждого работника, то есть мне пришлось бы делать 10 секунд вызовов пакетного файла и ждать, пока они все догонят код, чтобы использовать их все.

Мне было интересно, есть ли у кого-нибудь какой-нибудь совет, так как кажется, что это должно быть легко сделать.

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

1 Ответ

0 голосов
/ 13 апреля 2019

Кажется, лучший способ решения этой проблемы в большой степени зависит от размера кластера, среды и т. Д., С которыми вы работаете. Лучшим вариантом для меня было использовать MPI4py, который изолирует мои вызовы подпроцесса и будет использовать их на моем количестве узлов X (шаг 2), а мой головной узел будет выполнять остальную часть кода (шаги 1 и 3). Это позволяет моему резервированию slurm оставаться постоянным вместо необходимости запрашивать узлы в каждом цикле или запрашивать узлы во время выполнения программы (например, dask-jobqueue).

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