mpi_comm_spawn на удаленных узлах - PullRequest
1 голос
/ 24 ноября 2010

Как использовать MPI_Comm_spawn для запуска рабочих процессов на удаленных узлах?

Используя OpenMPI 1.4.3, я попробовал этот код:

MPI_Info info;
MPI_Info_create(&info);
MPI_Info_set(info, "host", "node2");
MPI_Comm intercom;
MPI_Comm_spawn("worker",
        MPI_ARGV_NULL,
        nprocs,
        info,
        0,
        MPI_COMM_SELF,
        &intercom,
        MPI_ERRCODES_IGNORE);

Но это не с этим сообщением об ошибке:

--------------------------------------------------------------------------
There are no allocated resources for the application 
  worker
that match the requested mapping:


Verify that you have mapped the allocated resources properly using the 
--host or --hostfile specification.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
A daemon (pid unknown) died unexpectedly on signal 1  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.
--------------------------------------------------------------------------

Если я заменю "node2" на имя моей локальной машины, тогда он будет работать нормально. Если я ssh в node2 и запускаю ту же самую вещь (с "node2" в информационном словаре), то это также работает нормально.

Я не хочу запускать родительский процесс с помощью mpirun, поэтому я просто ищу способ динамически создавать процессы на удаленных узлах. Это возможно?

1 Ответ

2 голосов
/ 24 ноября 2010

Я не хочу заводить родителей процесс с mpirun, так что я просто ищу способ динамически порождать процессы на удаленных узлах. Это возможно

Я не уверен, почему ты не хочешь запустить его с mpirun? В любом случае вы неявно запускаете весь механизм MPI, как только вы нажимаете MPI_Init (), таким образом, вы просто передаете его параметры, а не полагаетесь на значение по умолчанию.

Проблема здесь в том, что при запуске библиотеки MPI (в MPI_Init ()) она не видит других доступных хостов, потому что вы не предоставили ее с опциями --host или --hostfile для mpirun. Он не просто запустит процессы в другом месте на вашем скажем (на самом деле, spawn не требует Info-хоста, поэтому в общем случае он даже не знает, куда идти в противном случае), поэтому он завершается неудачей.

Так что вам нужно сделать mpirun --host myhost,host2 -np 1 ./parentjob или, в более общем случае, укажите хост-файл, предпочтительно с количеством доступных слотов

myhost slots=1
host2 slots=8
host3 slots=8

и запускать задания таким образом, mpirun --hostfile mpihosts.txt -np 1 ./parentjob Это функция, а не ошибка; теперь задача MPI - выяснить, куда направляются работники, и если вы не укажете хост в явном виде в информации, он попытается поместить его в наиболее неиспользуемое место. Это также означает, что вам не нужно перекомпилировать, чтобы сменить хосты, на которых вы будете появляться.

...