Я пытаюсь запустить некоторый код на нескольких процессорах с использованием 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
Возможно, после обновления реализация MPI не была перестроена с поддержкой SGE, и в этом случае вам нужно было бы явно указать «mpirun», где найти списки хостов для запуска; в зависимости от вашей конфигурации системы, что-то вроде 'mpirun -machinefile $ PE_HOSTFILE -np $ NSLOTS python mycode.py' должно работать. Но это все, что ваши системные администраторы должны создать/документ для вас. Вы должны иметь возможность mpirun 'hostname' (как vs' python mycode.py') в качестве быстрого теста, что вы получаете хосты, которых вы ожидаете. –
Администраторы sys говорят, что MPI установлен с поддержкой SGE (они даже переустанавливают его для меня, чтобы быть уверенным), но не радость. Настройка файла хоста работала, так что это будет сделано. И этот совет об использовании mpirun hostname был очень полезен для тестирования. Я печатал имя хоста в качестве теста, но это более сложный путь - ваш путь был намного быстрее! – Laura