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