r - 在 Ubuntu 16.04 VirtualBox 上安装 Rmpi

标签 r parallel-processing mpi ubuntu-16.04 openmpi

我在 VM VirtualBox 上创建了一台新的 ubuntu-16.04.2-desktop-amd64 计算机,我希望能够通过 Rmpi​​ 使用 R 环境。

以下两种方法都会出现类似的错误。

更新了简化的预构建二进制方法:

安装 Ubuntu 后,我打开终端并执行以下命令:

~$ sudo apt-get update
~$ sudo apt-get install openmpi-bin
~$ sudo apt-get install r-base
~$ sudo apt-get install r-cran-rmpi
~$ R

这打开了 R 终端,我调用了 follow 函数,导致了错误:

> library(Rmpi)
libmpi.so: cannot open shared object file: No such file or directory
Error : .onLoad failed in loadNamespace() for 'Rmpi', details:
call: fun(libname, pkgname)
error: Cannot start MPI_Init(). Exit
Error: package or namespace load failed for ‘Rmpi’

我尝试过的替代方法包括使用本地 OpenMPI 安装和使用 R 函数 install.packages 来安装 Rmpi​​ 包(见下文)。这些都导致了同样的错误。

我还尝试使用 MPICH,将 ~$ sudo apt-get install mpich 替换为上述过程中的第二个命令(包括使用 R 函数来安装软件包),这会产生均匀的结果更繁重的运行时错误。

有谁知道我做错了什么或者我可以采取什么措施来解决此安装错误?

或者,是否有人能够使用任何 Linux 发行版或预装组件的镜像成功安装带有 Rmpi​​ 的 VirtualBox 计算机?

原始本地安装方式:

我已按照 this blog 上的说明进行操作下载OpenMPI版本2.1.0,编译并安装它。但是,当我尝试使用 R 安装包时:

> install.packages("Rmpi", configure.args =
  c("--with-Rmpi-include=/home/jormunr/openmpi/include",
    "--with-Rmpi-libpath=/home/jormunr/openmpi/lib",
    "--with-Rmpi-type=OPENMPI",
    "--with-mpi=/home/jormunr/openmpi/"))

出现以下错误

Error: .onLoad failed in loadNamespace() for 'Rmpi', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/home/jormunr/R/x86_64-pc-linux-gnu-library/3.2/Rmpi/libs/Rmpi.so':
libmpi.so.20: cannot open shared object file: No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed

我可以看到“libmpi.so.20”文件位于我作为安装参数之一提供的/home/jormunr/openmpi/lib 中。

最佳答案

[免责声明:我不是 Linux 专家,仅具有用户级别的技能。专家的任何贡献或更正将不胜感激。]

预构建二进制方法

虽然尝试了各种方法来安装预构建的二进制文件,但我没有设法让这个选项发挥作用。这涉及在终端中执行命令“sudo apt-get install r-cran-rmpi”来安装 r-cran-rmpi 预构建软件包,该软件包还会自动安装列出的先决条件 libopenmpi1.10 软件包。但是,libopenmpi1.10 包中似乎不包含文件“libmpi.so”,但 Rmpi​​ 库需要该文件,这会导致 R 环境中出现找不到该文件的错误。

本地安装方法

经过一些修改,本地安装最终成功了。我使用默认设置创建了一个新的 ubuntu-16.04.2-desktop-amd64 VirtualBox 镜像,但 2048MB 内存和 32GB 硬盘空间除外。安装后,我打开一个终端并执行 the Jovinge Lab website 中的命令。包含倒数第二个命令,该命令修改运行时链接编辑器的路径并使 R 的 install.package() 函数能够查找“libmpi.so”文件。 (还将版本更改为 1.10.6,因为这是版本 1 的最新版本 - 请参阅下面的版本 2)

~$ cd /home/jormunr
~$ wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.2.tar.gz
~$ tar -zxvf openmpi-1.10.6.tar.gz
~$ cd openmpi-1.10.2
~$ ./configure --prefix=/home/jormunr
~$ make
~$ make install
~$ sudo apt-get install r-base
~$ export LD_LIBRARY_PATH=/home/jormunr/lib:$LD_LIBRARY_PATH
~$ R

这将打开一个 R 终端,我调用了该函数:

> install.packages("Rmpi", configure.args =
+ c("--with-Rmpi-include=/home/jormunr/include/",
+   "--with-Rmpi-libpath=/home/jormunr/lib/",
+   "--with-Rmpi-type=OPENMPI",
+   "--with-mpi=/home/jormunr/"))

现在执行没有错误,我可以使用以下 R 语句对其进行测试:

> library("Rmpi")
> mpi.spawn.Rslaves()
master (rank 0, comm. 1) of size 2 is running on: Valhalla
slave1 (rank 1, comm. 1) of size 2 is running on: Valhalla
> mpi.close.Rslaves()
[1] 1
> mpi.quit()

当我使用 OpenMPI 版本 2.1.0 尝试此过程时,安装成功完成,但上述测试存在问题; mpi.spawn.Rslaves() 函数已完成,但 mpi.close.Rslaves() 未完成 - 它从未返回并且终端处于挂起状态。

关于r - 在 Ubuntu 16.04 VirtualBox 上安装 Rmpi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43105917/

相关文章:

r - 使用 ddply 在新数据帧中强制多个输出

c - MPI 异步发送和接收未按预期工作

multithreading - 并行算法实现建议

r - R数据表包中时间序列的高效操作

r - 在 R 中操作基因型文件

c - 并行调用函数是否足以让它并行执行?

r - 并行组合进度条和进程

python - 使用 MPI 的 Allreduce 对 Python 对象求和

python - MPI4Py 分散 sendbuf 参数类型?

r - 如何计算R中的土地覆盖面积