2012-11-26 11 views
5

sto cercando di installare Rmpi pacchetto su una macchina di cluster LAM MPI. Precedentemente avevo compilato e testato alcune cose (mpi4py e piccoli programmi C++) quindi sono sicuro che l'MPI stesso funzioni. Tuttavia, l'installazione del pacchetto Rmpi non riesce quando si collegano le librerie.Installazione RMPI sulla LAM/MPI grappolo

Il mio sospetto principale è una chiamata a gcc anziché mpicc nel makefile (sto cercando di trovare la linea nella configurazione per modificare questo ma finora non è stato in grado di individuarlo).

Qualcuno ha esperienza con l'installazione di RMPI sulla LAM, e come hai fatto questo?

Architettura

  • LAM MPI (o forse PBS MPI, se esistono, come posso controllare?). Una cosa è certa, ho lima mpicpp wich non credo che è comune a tutte le implementazioni MPI
  • x86_64 R-2.15.2
  • Rmpi_0.6-1
  • CentOS rilasciare 5.5 (finale),

comando chiamato da 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

Stai ancora eseguendo LAM/MPI ?! Questa cosa è vecchia quanto l'Universo stesso :) Direi piuttosto che stai usando Open MPI (LAM/MPI è stato fuso in Open MPI anni fa). PBS è il sistema batch del tuo cluster, non ha nulla a che fare con MPI. –

risposta

6

Abbiamo una configurazione molto simile. Non l'ho toccato abbastanza di recente per essere in grado di parlare alla tua situazione particolare, ma posso passare alcuni dei comandi che ci hanno dato il via ...

Il primo passo per noi, come Dirk ha accennato, era per ottenere OpenMPI in esecuzione. Una volta che questo è l'installazione, è necessario essere sicuri che il LD_LIBRARY_PATH è impostato correttamente:

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

Il comando che finalmente ottenuto RMPI installato per noi (dopo l'esecuzione del comando precedente e l'avvio R) è stato:

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/")) 

Che ha installato con successo il pacchetto per noi. Allora possiamo eseguire i processi utilizzando comandi come:

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

Questi comandi possono essere così specifico per il nostro setup che non possono essere utili, ma si spera che qualcosa qui si può risparmiare un po 'di tempo!

Come @Sergej propone di seguito, una soluzione più generale può essere:

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) 
)) 

nostra configurazione: RHEL 5, RMPI 0,5-9, OpenMPI 1.4.3, R 2.15..0

+0

Grazie. Ci proverò ora –

+0

Non so quale fosse la magia ma ha funzionato. Molte grazie. Contrassegnerò la tua domanda e pubblicherò la mia soluzione di seguito perché l'impostazione è leggermente diversa. Puoi fare riferimento ad esso anche nella tua risposta? –

+0

Sicuro! Sono contento che ci abbia aiutato. –

2

Molti anni fa, ho usato per usare LAM ma poi passato a OpenMPI. Hao Yu, l'autore di Rmpi, suggerisce di fare lo stesso.

L'elenco r-sig-HPC è un posto decente per tali domande.

+0

Questo è di gran lunga fuori dalla mia portata :) –

+0

LAM è stato fuso in Open MPI. Non c'è sviluppo attivo in LAM, solo correzioni di bug di manutenzione. –

+0

Questa è solo una parte della storia --- le versioni finali della LAM non sono nemmeno riuscite a creare/lavorare con Rmpi. Quindi sì, OpenMPI lo è e anche il sito LAM lo dice. Grazie del promemoria. Oh, e se posso come R, Rmpi, ... manutentore per Debian: Su altri tipi di Linux, tutto questo funziona semplicemente fuori dalla scatola (apt-get). –

1

Come suggerito da Jeff Allen sono andato a R ed eseguire

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) 
)) 

Ho anche eseguire

# 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

Anche se sono riuscito a compilarlo quando corro Rmpi su più di un nodo non funziona. Quindi suppongo di dover iniziare a spingere per la transizione OpenMPI dopo tutto:/