MPI не использует все выделенные процессоры

Я пытаюсь запустить некоторый код на нескольких процессорах, используя MPI.

Я запускаю, используя:

$ mpirun -np 24 python mycode.py

Я работаю в кластере с 8 узлами, каждый из которых имеет 12 процессоров. Мои 24 процесса разбросаны по всем узлам.

Давайте назовем узлы node1, node2, ..., node8 и предположим, что главный процесс находится на узле1, а моя работа — единственная работающая. Таким образом, node1 имеет главный процесс и несколько подчиненных процессов, остальные узлы имеют только подчиненные процессы.

Используется только узел с главным процессом (т.е. node1). Я могу это сказать, потому что у узлов 2-8 нагрузка ~ 0, а у узла 1 нагрузка ~ 24 (тогда как я ожидаю, что нагрузка на каждый узел будет примерно равна количеству процессоров, выделенных для моей работы с этого узла). Кроме того, каждый раз, когда функция оценивается, я заставляю ее распечатывать имя хоста, на котором она работает, и каждый раз выводит «node1». Я не знаю, является ли главный процесс единственным, кто что-то делает, или используются подчиненные процессы на том же узле, что и главный.

Кластер, на котором я работаю, был недавно обновлен. До обновления я использовал тот же код, и он вел себя полностью так, как ожидалось (например, когда я запросил 24 процессора, он дал мне 24 процессора, а затем использовал все 24 процессора). Эта проблема возникла только после обновления, поэтому я предполагаю, что настройка где-то была изменена или сброшена. Кто-нибудь видел эту проблему раньше и знает, как я могу ее исправить?

Изменить: это отправляется планировщику как задание с использованием:

#!/bin/bash
#
#$ -cwd
#$ -pe * 24
#$ -o $JOB_ID.out
#$ -e $JOB_ID.err
#$ -r no
#$ -m n
#$ -l h_rt=24:00:00

echo job_id $JOB_ID
echo hostname $HOSTNAME

mpirun -np $NSLOTS python mycode.py

В кластере работает SGE, и я отправляю это задание, используя:

qsub myjob

person Laura    schedule 10.07.2013    source источник
comment
Возможно, что после обновления реализации MPI не были перестроены с поддержкой SGE, и в этом случае вам пришлось бы явно указать mpirun, где найти списки хостов для запуска; в зависимости от конфигурации вашей системы должно работать что-то вроде mpirun -machinefile $PE_HOSTFILE -np $NSLOTS python mycode.py. Но это все, что ваши системные администраторы должны настроить/задокументировать для вас. Вы должны иметь возможность запустить mpirun hostname (как и python mycode.py) в качестве быстрой проверки того, что вы получаете ожидаемые хосты.   -  person Jonathan Dursi    schedule 11.07.2013
comment
Системные администраторы говорят, что MPI установлен с поддержкой SGE (они даже переустановили его для меня, чтобы быть уверенным), но это не радость. Однако настройка hostfile сработала, так что сойдет. И этот совет об использовании имени хоста mpirun был очень и очень полезен для тестирования. Я печатал имя хоста в качестве теста, но это более сложный способ - ваш способ был намного быстрее!   -  person Laura    schedule 13.07.2013


Ответы (2)


Также можно указать, где вы хотите, чтобы ваши задания выполнялись, используя файл хоста. То, как форматируется и используется файл хоста, зависит от реализации MPI, поэтому вам необходимо обратиться к документации по тому, который вы установили (man mpiexec), чтобы узнать, как его использовать.

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

Все это отличается, если вы используете планировщик, такой как PBS, TORQUE, LoadLeveler и т. д., поскольку они могут иногда делать что-то из этого за вас или иметь разные способы отображения заданий. Вам придется ознакомиться с документацией для них отдельно или задать другой вопрос о них с соответствующими тегами здесь.

person Wesley Bland    schedule 10.07.2013
comment
Да, я использую планировщик, и я не могу контролировать, как он настроен. Причина, по которой я задал этот вопрос здесь, прежде всего в том, что я рассказал системным администраторам, какие у меня проблемы, и их ответ был ох. Я задавался вопросом, могу ли я что-нибудь сделать, чтобы решить проблему самостоятельно. Настройка файла хоста звучит так, как будто это сработает, если бы у меня был кластер для себя, но не в том случае, если мои коллеги также выполняют задания. - person Laura; 10.07.2013
comment
Настройка hostfile сработала! Задания по-прежнему распределяются по всем узлам и выполняются только на тех хостах, которые я укажу в файле хоста. Например, мне выделяют 3 процессора на каждом из 8 узлов; если в моем хост-файле есть только node4 и node5, то все 24 потока выполняются на 6 процессорах, выделенных для задания на node4 и node5. (Это поведение, которого я не ожидал, несомненно, было недоразумением с моей стороны. Но, возможно, это поможет прояснить ситуацию для кого-то еще, у кого такая же проблема.) - person Laura; 13.07.2013

Кластеры обычно имеют пакетный планировщик, такой как PBS, TORQUE, LoadLeveler и т. д. Обычно им предоставляется сценарий оболочки, который содержит вашу команду mpirun вместе с переменными среды, которые нужны планировщику. Вы должны спросить администратора вашего кластера, каков процесс отправки пакетных заданий MPI.

person chrisaycock    schedule 10.07.2013
comment
Я делаю это уже. Я обновлю свой вопрос соответственно. Или я неправильно понял ваш ответ? - person Laura; 10.07.2013
comment
@Laura Не могли бы вы отредактировать свой вопрос, чтобы указать имя вашего планировщика заданий и команду, которую вы используете для отправки задания? В любом случае, похоже, что вам придется спросить администратора кластера, что изменилось с обновлением, поскольку планировщик не предоставляет вам несколько узлов. - person chrisaycock; 10.07.2013
comment
Сделанный. (Ответы: SGE и qsub myjob.) Я уже спрашивал администратора кластера, но они ничего не сделали по этому поводу, поэтому я спросил здесь — я надеялся, что вместо этого я смогу что-то сделать. Спрошу еще раз у админов! - person Laura; 10.07.2013
comment
@Laura Возможно, вы сможете посмотреть результаты таких команд, как qstat, qconf, qsub, чтобы определить, правильно ли настроен Grid Engine. В частности, вы хотите увидеть, доступны ли планировщику другие хосты в кластере. - person chrisaycock; 10.07.2013
comment
Коллеги выполняли задания в кластере с момента обновления (хотя никто из них не использовал MPI). Другие хосты доступны планировщику, и любые задания, отправленные на другие хосты, выполняются нормально. Кажется, это конкретно проблема MPI. - person Laura; 13.07.2013