Почему OpenMPI использует другой сервер с другим параметром -n?

Я тестирую OpenMPI, предоставленный и скомпилированный другим пользователем (я использую программную ссылку на его каталоги для всех bin, include и т. д. - все обязательные каталоги), но я столкнулся с этой странной вещью:

Прежде всего, если я запустил mpirun с параметром -n ‹= 10, я могу запустить это ниже. testrunmpi.py просто выводит «run». от каждого ядра.

# I am in serverA.
bash-3.2$ /home/karl/bin/mpirun -n 10 ./testrunmpi.py
run. 
run. 
run. 
run. 
run. 
run. 
run. 
run. 
run. 
run. 

Однако, когда я попытался запустить -n больше 10, я столкнулся с этим:

bash-3.2$ /home/karl/bin/mpirun -n 24 ./testrunmpi.py
karl@serverB's password: Could not chdir to home directory /home/karl: No such file or directory
bash: /home/karl/bin/orted: No such file or directory
--------------------------------------------------------------------------
A daemon (pid 19203) died unexpectedly with status 127 while attempting
to launch so we are aborting.

There may be more information reported by the environment (see above).

This may be because the daemon was unable to find all the needed shared
libraries on the remote node. You may set your LD_LIBRARY_PATH to have the
location of the shared libraries on the remote nodes and this will
automatically be forwarded to the remote nodes.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
mpirun noticed that the job aborted, but has no info as to the process
that caused that situation.
--------------------------------------------------------------------------
bash-3.2$
bash-3.2$
Permission denied, please try again.
karl@serverB's password:
Permission denied, please try again.
karl@serverB's password:

Я вижу, что работа отправляется на сервер B, а я был на сервере A. У меня нет учетной записи на serverB. Но если я вызову mpirun -n ‹= 10, работа будет на сервере А.

Это странно, поэтому я проверил /home/karl/etc/openmpi-default-hostfile и попытался установить следующее:

serverA slots=24 max_slots=24
serverB slots=0 max_slots=32

Но проблема сохраняется и по-прежнему выдает то же сообщение об ошибке, что и выше. Что мне нужно сделать, чтобы моя программа работала только на serverA?


person Karl    schedule 23.01.2013    source источник


Ответы (1)


Хост-файл по умолчанию в Open MPI является общесистемным, т. е. его местоположение определяется во время сборки и установки библиотеки, и его версия для конкретного пользователя отсутствует. Фактическое местоположение можно получить, выполнив команду ompi_info следующим образом:

$ ompi_info --param orte orte | grep orte_default_hostfile
MCA orte: parameter "orte_default_hostfile" (current value: <LOOK HERE>, data source: default value)

Вы можете переопределить список хостов несколькими способами. Во-первых, вы можете предоставить свой собственный файл хоста с помощью опции -hostfile для mpirun. Если это так, вам не нужно размещать внутри него хосты с нулевыми слотами — просто опустите машины, к которым у вас нет доступа. Например:

localhost slots=10 max_slots=10
serverA slots=24 max_slots=24

Вы также можете изменить путь к файлу хоста по умолчанию, установив параметр orte_default_hostfile MCA:

$ mpirun --mca orte_default_hostfile /path/to/your/hostfile -n 10 executable

Вместо того, чтобы каждый раз передавать параметр --mca, вы можете установить значение в экспортируемой переменной среды с именем OMPI_MCA_orte_default_hostfile. Это может быть установлено в файле dot-rc вашей оболочки, например. в .bashrc при использовании Bash.

Вы также можете указать список узлов напрямую с помощью опции -H (или -host).

person Hristo Iliev    schedule 23.01.2013