Когда я использую Rmpi, связанный с OpenMPI 4.0.1, я могу успешно запустить небольшой сценарий hello world, который распределяет вычисления по кластеру.
Однако при связывании с OpenMPI 2.1.5 я получаю этоошибка:
Error in mpi.comm.spawn(slave = system.file("Rslaves.sh", package = "Rmpi"), :
MPI_ERR_SPAWN: could not spawn processes
Calls: mpi.spawn.Rslaves -> mpi.comm.spawn
Execution halted
-------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:
Process name: [[13712,1],0]
Exit code: 1
--------------------------------------------------------------------------
Пакет Rmpi содержит Rslaves.sh
, который фактически просто вызывает Rscript slavedaemon.R
, который, в свою очередь, оценивает коды, отправленные с главного узла ( source ).
Я вижу, что slavedaemon.R
запускается на подчиненном узле, но когда он пытается загрузить пакет Rmpi, ведомое устройство просто исчезает .Под этим я подразумеваю:
library(Rmpi)
не возвращается. - Нет сообщений, зарегистрированных для стандартного выхода или стандартной ошибки.
- Команды в
Rslaves.sh
после того, как вызов slavedaemon.R
не выполнен (даже если +e
)
Я подтвердил, что путь поиска библиотеки R является правильным на подчиненном узле, и я успешно вызвал slavedaemon.R
вручную нет подчиненного узла, и он не аварийно завершился.
Существует ли очевидная причина, почему это происходит с OpenMPI 2.1.5, а не 4.0.1, а не при загрузке вручную?
Если нет, есть ли способ отладки того, что происходит с подчиненными узлами, поскольку я не могу проверить состояние после того, как они пытаются загрузить Rmpi?
Согласно strace
похоже, что orted
отправляет SIGCONT
, затем SIGTERM
, но я не знаю почему.