Закрепление процессов в задании MPI, запущенном через srun

Я выполняю задания MPI в кластере SLURM и хочу привязать результирующие процессы к определенным ядрам на узле. Это может включать разное количество процессов на разных узлах и разные шаблоны закрепления на разных узлах. Это все относительно просто, если я возьму распределение узлов с помощью salloc, построю ранговый файл для процессов mpi и запустю процессы с помощью mpirun.

К сожалению, если выделение отменяется по какой-либо причине, например, при тайм-ауте или упреждении, процессы, запущенные на узлах, будут уничтожены, но mpirun, который выполняется на головном узле, не будет уничтожен и перейдет от создания незначительной нагрузки к генерации 100 % нагрузки для потока, в котором он выполняется, на неопределенный срок.

Казалось бы, ответ - использовать srun вместо mpirun для запуска приложения, но я изо всех сил пытаюсь выяснить, как установить размещение процессов, если я это сделаю. У кого-нибудь есть предложения?


person Daniel Goodman    schedule 18.12.2014    source источник
comment
Есть ли причина, по которой вы используете salloc, а не sbatch? Программа интерактивна? В противном случае с sbatch ваш основной mpirun процесс будет убит.   -  person damienfrancois    schedule 22.12.2014
comment
Из-за характера проводимых мной экспериментов я выделяю большое количество машин, используя salloc, а затем использую srun для запуска определенных заданий в этом распределении. Я хочу убедиться, что у меня есть все необходимые машины, прежде чем что-либо начинать, поэтому использую salloc.   -  person Daniel Goodman    schedule 22.12.2014


Ответы (1)


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

https://computing.llnl.gov/linux/slurm/mc_support.html

Там есть всевозможная документация о миллионе различных способов привязки к ядру, сокету, чему угодно. Вы, вероятно, захотите использовать --cpu-bind с map_cpu, если хотите специально привязать процессы к отдельным ядрам.

Также может быть доступна документация для вашей конкретной системы о том, как это сделать на вашем компьютере. Например, на суперкомпьютере в Аргоннской национальной лаборатории вы можете найти информацию на их сайте о том, как это сделать специально для их IBM BG / Q:

http://www.alcf.anl.gov/user-guides/running-jobs#mapping-of-mpi-tasks-to-cores.

person Wesley Bland    schedule 18.12.2014
comment
Спасибо, но я уже некоторое время просматриваю документацию, подобную этой, и, насколько я могу видеть, я могу построить только однородное расположение процессов с помощью этих команд, так как я указываю только количество процессов на узел и количество узлов. Я пытаюсь указать, что мне нужно 5 процессов на ядрах 2,4,6,8,9 на узле A и 4 процесса на ядрах 1,3,5,9 на узле b, например, как вы можете делать с ранговым файлом. - person Daniel Goodman; 22.12.2014