【问题标题】:R - Error in Rmpi with snowR - 雪的 Rmpi​​ 错误
【发布时间】:2013-10-04 16:28:18
【问题描述】:

我正在尝试使用以下 R 代码在局域网内的 3 台不同计算机上执行 MPI 集群:

library(plyr)
library(class)
library(snow)
cl <- makeCluster(spec=c("localhost","ip1","ip2"),master="ip3")

但我收到一个错误:

Error in mpi.comm.spawn(slave = mpitask, slavearg = args, nslaves = count,  : 
  Calloc could not allocate memory (18446744071562067968 of 4 bytes)
Warning messages:
1: In if (nslaves <= 0) stop("Choose a positive number of slaves.") : [...]
2: In mpi.comm.spawn(slave = mpitask, slavearg = args, nslaves = count,  :
  NA produced by coercition

这个错误是什么原因造成的?我找不到与当前主题相关的任何主题。

【问题讨论】:

    标签: r parallel-processing mpi


    【解决方案1】:

    当调用 makeCluster 创建 MPI 集群时,spec 参数应为数字或缺失,具体取决于您是否希望生成工作线程。您不能像创建 SOCK 集群时那样指定主机名。为了在具有 MPI 集群的其他机器上启动 worker,您必须使用诸如 mpirun、mpiexec 等命令执行您的 R 脚本,具体取决于您的 MPI 安装,并通过参数指定要使用的主机 mpirun , 不是makeCluster

    在您的情况下,您可以使用以下命令执行脚本:

    $ mpirun -n 1 -H ip3,localhost,ip1,ip2 R --slave -f script.R
    

    由于使用了-n 1,您的脚本仅在“ip3”上执行,而不是所有四台主机,但 MPI 知道其他三台主机,并且能够为它们生成进程。

    您将在该脚本中创建 MPI 集群:

    cl <- makeCluster(3)
    

    这应该会导致在“localhost”、“ip1”和“ip2”上生成一个工作进程,主进程在“ip3”上运行(至少对于 Open MPI:我不确定其他 MPI 发行版)。我不相信“master”选项与 MPI 传输一起使用:它主要由 SOCK 传输使用。

    您可以从其手册页获得很多关于 mpirun 的信息。

    【讨论】:

      【解决方案2】:

      您甚至可以通过以下方式尝试在集群节点中执行代码:

      1. 创建一个文件名 nodelist -> 在另一个下面写下机器名称。

      2. 使用 mpirun 在终端中尝试以下命令: mpirun -np (no.of processes) -machinefile (path where your nodelist file is present) Rscript (filename.R)。忽略圆括号。

      3. 默认情况下,它将第一个节点作为主节点,并将进程派生到其余节点,包括自身作为从节点。

      【讨论】:

        猜你喜欢
        • 2013-08-07
        • 1970-01-01
        • 2018-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        相关资源
        最近更新 更多