2012-11-26 14 views
5

Próbuję zainstalować pakiet Rmpi na komputerze klastra LAM MPI. Wcześniej kompilowałem i testowałem kilka rzeczy (mpi4py i małe programy w C++), więc jestem pewien, że sam MPI działa. Jednak instalowanie pakietu Rmpi kończy się niepowodzeniem podczas łączenia bibliotek.Instalowanie programu Rmpi ​​w klastrze LAM/MPI

Moim głównym podejrzanym jest wywołanie gcc zamiast mpicc w makefile (próbuję znaleźć linię w konfiguracji, aby to zmienić, ale do tej pory nie udało się jej zlokalizować).

Czy ktoś ma doświadczenie z instalowaniem Rmpi ​​na LAM i jak sobie z tym poradziłeś?

Architektura

  • LAM MPI (albo PBS MPI, jeżeli takie istnieją, w jaki sposób mogę sprawdzić?). Jedna rzecz na pewno, mam plik mpicpp wich Nie sądzę, jest wspólny dla wszystkich implementacjach MPI
  • R-2.15.2
  • Rmpi_0.6-1
  • CentOS zwolnić 5,5 (Final), x86_64

polecenia wywoływane z R

install.packages("Rmpi") 

Log

trying URL 'http://cran.at.r-project.org/src/contrib/Rmpi_0.6-1.tar.gz' 
Content type 'application/x-gzip' length 92977 bytes (90 Kb) 
opened URL 
================================================== 
downloaded 90 Kb 

* installing *source* package âRmpiâ ... 
** package âRmpiâ successfully unpacked and MD5 sums checked 
checking for gcc... gcc -std=gnu99 
checking whether the C compiler works... yes 
checking for C compiler default output file name... a.out 
checking for suffix of executables... 
checking whether we are cross compiling... no 
checking for suffix of object files... o 
checking whether we are using the GNU C compiler... yes 
checking whether gcc -std=gnu99 accepts -g... yes 
checking for gcc -std=gnu99 option to accept ISO C89... none needed 
I am here /usr and it is OpenMPI 
Trying to find mpi.h ... 
Found in /usr/include 
Trying to find libmpi.so or libmpich.a ... 
Found libmpi in /usr/lib 
checking for openpty in -lutil... yes 
checking for main in -lpthread... yes 
configure: creating ./config.status 
config.status: creating src/Makevars 
** libs 
gcc -std=gnu99 -I/g/software/linux/pack/r-2.15.2/centos-5/lib64/R/include -DNDEBUG -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I/usr/include -DMPI2 -DOPENMPI -I/usr/local/include -fpic -g -O2 -c RegQuery.c -o RegQuery.o 
gcc -std=gnu99 -I/g/software/linux/pack/r-2.15.2/centos-5/lib64/R/include -DNDEBUG -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I/usr/include -DMPI2 -DOPENMPI -I/usr/local/include -fpic -g -O2 -c Rmpi.c -o Rmpi.o 
gcc -std=gnu99 -I/g/software/linux/pack/r-2.15.2/centos-5/lib64/R/include -DNDEBUG -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I/usr/include -DMPI2 -DOPENMPI -I/usr/local/include -fpic -g -O2 -c conversion.c -o conversion.o 
gcc -std=gnu99 -I/g/software/linux/pack/r-2.15.2/centos-5/lib64/R/include -DNDEBUG -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I/usr/include -DMPI2 -DOPENMPI -I/usr/local/include -fpic -g -O2 -c internal.c -o internal.o 
gcc -std=gnu99 -shared -L/usr/local/lib64 -o Rmpi.so RegQuery.o Rmpi.o conversion.o internal.o -L/usr/lib -lmpi -lutil -lpthread -L/g/software/linux/pack/r-2.15.2/centos-5/lib64/R/lib -lR 
/usr/bin/ld: skipping incompatible /usr/lib/libutil.so when searching for -lutil 
/usr/bin/ld: skipping incompatible /usr/lib/libutil.a when searching for -lutil 
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread 
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread 
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc 
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc 
installing to /home/andrejev/R/x86_64-unknown-linux-gnu-library/2.15/Rmpi/libs 
** R 
** demo 
** inst 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
Error : .onLoad failed in loadNamespace() for 'Rmpi', details: 
    call: dyn.load(file, DLLpath = DLLpath, ...) 
    error: unable to load shared object '/home/andrejev/R/x86_64-unknown-linux-gnu-library/2.15/Rmpi/libs/Rmpi.so': 
    /usr/lib/libmpi.so.0: undefined symbol: _kio 
Error: loading failed 
Execution halted 
ERROR: loading failed 
* removing â/home/andrejev/R/x86_64-unknown-linux-gnu-library/2.15/Rmpiâ 

The downloaded source packages are in 
     â/tmp/Rtmp5qzeqp/downloaded_packagesâ 
Warning message: 
In install.packages("Rmpi") : 
    installation of package âRmpiâ had non-zero exit status 
+0

Czy naprawdę wciąż używasz LAM/MPI ?! To jest tak stare jak sam Wszechświat :) Powiedziałbym raczej, że korzystasz z Open MPI (LAM/MPI zostało połączone w Open MPI lata temu). PBS to system wsadowy twojego klastra, nie ma nic wspólnego z MPI. –

Odpowiedz

6

Mamy bardzo podobne ustawienia. Nie dotknąłem go wystarczająco wcześnie, aby móc porozmawiać z twoją szczególną sytuacją, ale mogę przekazać kilka poleceń, które nas podniosły ...

Pierwszy krok dla nas, jako Dirk wspomniał, że ma uruchomić OpenMPI. Raz, że to ustawienie, musisz mieć pewność, że LD_LIBRARY_PATH jest prawidłowo ustawiony:

export LD_LIBRARY_PATH=/opt/openmpiv2/lib/:$LD_LIBRARY_PATH 

Komenda że wreszcie dostałem RMPI zainstalowany dla nas (po uruchomieniu powyższego polecenia i uruchomienie R) była następująca:

install.packages("Rmpi", configure.args = c("--with-Rmpi-include=/opt/openmpiv2/include/", "--with-Rmpi-libpath=/opt/openmpiv2/lib/", "--with-Rmpi-type=OPENMPI", "--with-mpi=/opt/openmpiv2/")) 

Które pomyślnie zainstalowały pakiet dla nas. Następnie możemy uruchomić pracy za pomocą poleceń takich jak:

qsub -I -l nodes=2:ppn=12 
/opt/openmpiv2/bin/mpirun --hostfile $PBS_NODEFILE -n 1 R --slave -f rmpitest.R 

Polecenia te mogą być tak charakterystyczne dla naszej konfiguracji, że nie mogą one być przydatne, ale mam nadzieję, że coś tu można zaoszczędzić trochę czasu!

@Sergej jak zaproponowano poniżej, bardziej ogólnego rozwiązania, mogą być:

install.packages(
    "Rmpi", 
    configure.args = c(
    "--with-Rmpi-include=/usr/include/", # This is where LAM's mpi.h is located 
    "--with-Rmpi-libpath=/usr/lib/",  # This is where liblam.so is located (actually as I type it mine was located in /usr/lib64/liblam.so.0, so maybe this is not needed at all) 
    "--with-Rmpi-type=LAM"    # This says that the type is LAM (there is also OPENMPI and MPICH) 
)) 

Nasza konfiguracja: RHEL 5 RMPI 0,5-9, OpenMPI 1.4.3, R 2,15..0

+0

Dzięki. Wypróbuję to teraz –

+0

Nie wiem, co było w tym magii, ale zadziałało. Wielkie dzięki. Zaznaczę twoje pytanie i opublikuję moje rozwiązanie poniżej, ponieważ konfiguracja jest nieco inna. Czy możesz w nim również znaleźć odniesienie? –

+0

Pewnie! Cieszę się, że to pomogło. –

2

Wiele lat temu używałam LAM, ale potem przełączyłam się na OpenMPI. Hao Yu, autor Rmpi, sugeruje, że robi to samo.

Lista r-sig-hpc jest przyzwoitym miejscem na takie pytania.

+0

To jest zdecydowanie poza moim zasięgiem :) –

+0

LAM został połączony w Open MPI. Nie ma aktywnej rozbudowy wchodzącej w LAM, tylko naprawy błędów konserwacji. –

+0

To tylko część historii - ostatnie wydania LAM nawet nie budowały/pracowały z Rmpi. Więc tak, OpenMPI to jest i strona LAM również tak mówi. Dzięki za przypomnienie. Aha, i jeśli mogę jako R, Rmpi, ... opiekun Debiana: W innych wersjach Linuksa wszystko to działa po prostu z pudełka (apt-get). –

1

Jak sugeruje Jeff Allen poszedłem do R i uruchomić

install.packages(
    "Rmpi", 
    configure.args = c(
    "--with-Rmpi-include=/usr/include/", # This is where LAM's mpi.h is located 
    "--with-Rmpi-libpath=/usr/lib64/",  # This is where liblam.so is located 
    "--with-Rmpi-type=LAM"    # This says that the type is LAM (there is also OPENMPI and MPICH) 
)) 

ja również uruchomić

# Because it was non-standard R location so it din't find shared libraries 
export LD_LIBRARY_PATH=/g/software/linux/pack/r-2.15.0/lib64/R/lib 

# Rmpi also could not find libutil so I had to add path to it as well 
export LD_PRELOAD=/usr/lib64/libutil.so 

EDIT

Nawet udało mi się skompilować go, gdy biegnę Rmpi na więcej niż jednym węźle nie działa. Sądzę więc, że muszę zacząć pchać przejście na OpenMPI:/