2013-07-10 3 views
2

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

Я бегу с помощью:

$ mpirun -np 24 python mycode.py 

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

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

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

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

Edit: Это представляется как работу с планировщиком с помощью:

#!/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 
+0

Возможно, после обновления реализация MPI не была перестроена с поддержкой SGE, и в этом случае вам нужно было бы явно указать «mpirun», где найти списки хостов для запуска; в зависимости от вашей конфигурации системы, что-то вроде 'mpirun -machinefile $ PE_HOSTFILE -np $ NSLOTS python mycode.py' должно работать. Но это все, что ваши системные администраторы должны создать/документ для вас. Вы должны иметь возможность mpirun 'hostname' (как vs' python mycode.py') в качестве быстрого теста, что вы получаете хосты, которых вы ожидаете. –

+0

Администраторы sys говорят, что MPI установлен с поддержкой SGE (они даже переустанавливают его для меня, чтобы быть уверенным), но не радость. Настройка файла хоста работала, так что это будет сделано. И этот совет об использовании mpirun hostname был очень полезен для тестирования. Я печатал имя хоста в качестве теста, но это более сложный путь - ваш путь был намного быстрее! – Laura

ответ

2

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

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

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

+0

Да, я использую планировщик, и я не могу контролировать, как это настроено. Причина, по которой я задал этот вопрос здесь, в первую очередь, состоит в том, что я сказал администраторам системы, какие проблемы у меня возникли, и их ответ был «о». Я задавался вопросом, есть ли что-нибудь, что я мог бы сделать непосредственно, чтобы решить проблему самостоятельно. Настройка файла хоста звучит так, как будто это сработает, если бы у меня был кластер для себя, но не для моих коллег. – Laura

+1

Работа с файлом hostfile! Работы по-прежнему распределяются по всем узлам и выполняются только на тех узлах, которые я укажу в файле хоста. Например, я получаю 3 процессора на каждом из 8 узлов; если у меня есть только node4 и node5 в моем файле хоста, тогда все 24 потока выполняются на 6 процессорах, назначенных заданию на node4 и node5. (Это поведение, которого я не ожидал, несомненно, недоразумение с моей стороны. Но, возможно, это поможет разобраться в чьей-то другой проблеме, которая имеет такую ​​же проблему). – Laura

1

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

+0

Я уже делаю это. Я уточню свой вопрос. Или я неправильно понял ваш ответ? – Laura

+0

@Laura Не могли бы вы изменить свой вопрос, чтобы указать имя планировщика заданий и команду, которую вы используете для отправки задания? В любом случае, это по-прежнему выглядит так, что вам придется спросить администратор кластера, что изменилось при обновлении, поскольку планировщик не предоставляет вам несколько узлов. – chrisaycock

+0

Готово. (Ответы - SGE и qsub myjob.) Я уже спросил администратор кластера, но они ничего не сделали по этому поводу, поэтому я спросил здесь - я надеялся, что вместо этого я смогу сделать что-то. Я снова спрошу админов! – Laura

Смежные вопросы