doMPI не распознает другие узлы в кластере для сценария R

  • Использование RHEL7.3
  • Использование R 3.3.2
  • Установленные Rmpi_0.6-6.tar.gz и doMPI_0.2.1.tar.gz
  • Установил mpich-3.0-3.0.4-10.el7 RPM для x86_64

Я создал кластер из трех машин (aml1,2,3). Я могу запустить пример /examples/cpi из установки mpich, и процессы без проблем запускаются на всех трех машинах.

Я также могу запустить R-скрипт, который нужно запускать несколько раз, что обсуждается в документации doMPI, поэтому скрипт работает на всех кластерах.

Моя проблема в том, что в моем R-скрипте есть код, предшествующий%dopar%, который нужно запустить один раз на главном сервере (aml1), и запустить%dopar% в кластере (aml2,aml3). Он работает только на мастере. И DoMPI говорит Size of MPI universe: 0 и не распознает aml2 или aml3.

Например:

Бежать: mpirun -np 1 --hostfile ~/projects/hosts R --no-save -q < example6.R

(и мой ~/projects/hosts файл определен для использования 8 ядер)

example6.R:

library(doMPI) #load doMPI library
cl <- startMPIcluster(verbose=TRUE)
#load data
#clean data
#perform some functions

#let's say I want to have this done in the script and only parallelize this
x <- foreach(seed=c(7, 11, 13), .combine="cbind") %dopar% {
 set.seed(seed)
 rnorm(3)
 }
x
closeCluster(cl)

Вывод example6.R:

Master processor name: aml1; nodename: aml1
Size of MPI universe: 0
Spawning 2 workers using the command:
  /usr/lib64/R/bin/Rscript /usr/lib64/R/library/doMPI/RMPIworker.R WORKDIR=/home/spark LOGDIR=/home/spark MAXCORES=1 COMM=3 INTERCOMM=4 MTAG=10 WTAG=11 INCLUDEMASTER=TRUE BCAST=TRUE VERBOSE=TRUE
 2 slaves are spawned successfully. 0 failed.

Если я определю cl <- startMPIcluster(count=34, verbose=TRUE) Я все еще получаю следующее, но по крайней мере я могу управлять 34 рабами:

Master processor name: aml1; nodename: aml1
Size of MPI universe: 0
34 slaves are spawned successfully. 0 failed.

Как я могу устранить это? Я хотел бы запустить сценарий R, чтобы он запускал первую часть один раз на главном сервере, а затем выполнял%dopar% на кластере.

Спасибо!!

Обновление 1

Со времени последнего обновления я попытался запустить более старую версию OpenMPI:

[spark@aml1 ~]$ which mpirun
/opt/openmpi-1.8.8/bin/mpirun

Для @SteveWeston я создал следующий скрипт и запустил его:

[spark@aml1 ~]$ cat sanity_check.R
library(Rmpi)
print(mpi.comm.rank(0))
mpi.quit()

Со следующим выводом:

[spark@aml1 ~]$ mpirun -np 3 --hostfile ~/projects/hosts R --slave -f sanity_check.R
FIPS mode initialized
master (rank 0, comm 1) of size 3 is running on: aml1
slave1 (rank 1, comm 1) of size 3 is running on: aml1
slave2 (rank 2, comm 1) of size 3 is running on: aml1
[1] 0

Здесь просто висит - и ничего не происходит.

1 ответ

Решение

Я уже принял ответ @SteveWeston, так как он помог мне лучше понять мой оригинальный вопрос.

Я прокомментировал его ответ, что у меня все еще были проблемы с зависанием моего скрипта R; сценарии будут работать, но он никогда не завершится сам по себе или не закроет свои кластеры, и мне придется убить его с помощью ctrl-C.

В конечном итоге я настроил среду nfs, собрал и установил туда openmpi-1.10.5, а также установил там мои библиотеки R. R устанавливается отдельно на обеих машинах, но они используют одну и ту же библиотеку в моем каталоге nfs. Ранее я установил и управлял всем под root, включая библиотеки R (я знаю). Я не уверен, что это вызвало осложнения, но мои проблемы, похоже, решены.

[master@aml1 nfsshare]$ cat sanity_check.R
library(Rmpi)
print(mpi.comm.rank(0))
mpi.quit(save= "no")

[master@aml1 nfsshare]$ mpirun -np 3 --hostfile hosts R --slave -f sanity_check.R
FIPS mode initialized
[1] 1
[1] 0
[1] 2
# no need to ctrl-C here. It no longer hangs
Другие вопросы по тегам