Установка Rmpi на кластер LAM/MPI
Я пытаюсь установить Rmpi
пакет на компьютере кластера LAM MPI. Ранее я собирал и тестировал некоторые вещи (mpi4py
и небольшие программы на C++), поэтому я уверен, что MPI сам по себе работает. Однако установка Rmpi
пакет сбой при связывании библиотек.
Мой главный подозреваемый это звонок gcc
вместо mpicc
в makefile (я пытаюсь найти строку в конфигурации, чтобы изменить это, но до сих пор не смог найти его).
У кого-нибудь есть опыт установки Rmpi на LAM, и как вам это удалось?
Архитектура
- LAM MPI (или, может быть, PBS MPI, если таковой существует, как мне проверить?). Одно можно сказать наверняка, у меня есть файл mpicpp, который, я думаю, не является общим для всех реализаций mpi
- Р-2.15.2
- Rmpi_0.6-1
- CentOS выпуск 5.5 (финальный), x86_64
Команда вызвана из R
install.packages("Rmpi")
Журнал
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
3 ответа
У нас очень похожая настройка. Я не достаточно коснулся этого в последнее время, чтобы иметь возможность говорить с вашей конкретной ситуацией, но я могу передать несколько команд, которые заставили нас работать...
Как отметил Дирк, первым шагом для нас было запустить OpenMPI. После того, как это будет сделано, вы должны быть уверены, что ваш LD_LIBRARY_PATH
правильно установлено:
export LD_LIBRARY_PATH=/opt/openmpiv2/lib/:$LD_LIBRARY_PATH
Команда, которая наконец-то установила Rmpi для нас (после запуска вышеуказанной команды и запуска R):
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/"))
Который успешно установил пакет для нас. Затем мы можем запускать задания, используя такие команды, как:
qsub -I -l nodes=2:ppn=12
/opt/openmpiv2/bin/mpirun --hostfile $PBS_NODEFILE -n 1 R --slave -f rmpitest.R
Эти команды могут быть настолько специфичны для нашей установки, что могут оказаться бесполезными, но, надеюсь, что-то здесь поможет вам сэкономить время!
Как @Sergej предлагает ниже, более общее решение может быть:
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)
))
Наша установка: RHEL 5, Rmpi 0.5-9, OpenMPI 1.4.3., R 2.15.0
Много лет назад я использовал LAM, но затем переключился на OpenMPI. Хао Юй, автор Rmpi, предлагает сделать то же самое.
Список r-sig-hpc - достойное место для таких вопросов.
По предложению Джеффа Аллена я пошел в R и бегу
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)
))
Я тоже бегаю
# 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
РЕДАКТИРОВАТЬ
Несмотря на то, что мне удалось скомпилировать его, когда я запускаю Rmpi на нескольких узлах, это не удается. Так что, я думаю, мне все-таки нужно начать переходить на OpenMPI:/