R-带雪的Rmpi中的错误

R-带雪的Rmpi中的错误,r,parallel-processing,mpi,R,Parallel Processing,Mpi,我尝试在局域网内的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 a

我尝试在局域网内的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
这个错误是由什么引起的?我找不到有关当前主题的任何相关主题。

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

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

$ mpirun -n 1 -H ip3,localhost,ip1,ip2 R --slave -f script.R
cl <- makeCluster(3)
因为使用了-n1,所以脚本只在ip3上执行,而不是在所有四台主机上执行,但是MPI知道其他三台主机的情况,并且能够为它们生成进程

您可以使用以下命令在该脚本中创建MPI群集:

$ mpirun -n 1 -H ip3,localhost,ip1,ip2 R --slave -f script.R
cl <- makeCluster(3)
这将导致在localhost、ip1和ip2上生成一个工作进程,主进程在ip3上运行,至少在打开MPI时是这样:我不确定其他MPI发行版。我不相信主选项与MPI传输一起使用:它主要由SOCK传输使用

您可以从mpirun的手册页获得有关mpirun的大量信息。

调用makeCluster创建MPI群集时,spec参数应该是数字或缺少,具体取决于您是否希望生成工作进程。不能像创建SOCK集群时那样指定主机名。为了在具有MPI群集的其他计算机上启动工作程序,您必须使用命令(如mpirun、mpiexec等)执行R脚本,具体取决于您的MPI安装,并且您可以通过参数将要使用的主机指定为mpirun,而不是makeCluster

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

$ mpirun -n 1 -H ip3,localhost,ip1,ip2 R --slave -f script.R
cl <- makeCluster(3)
因为使用了-n1,所以脚本只在ip3上执行,而不是在所有四台主机上执行,但是MPI知道其他三台主机的情况,并且能够为它们生成进程

您可以使用以下命令在该脚本中创建MPI群集:

$ mpirun -n 1 -H ip3,localhost,ip1,ip2 R --slave -f script.R
cl <- makeCluster(3)
这将导致在localhost、ip1和ip2上生成一个工作进程,主进程在ip3上运行,至少在打开MPI时是这样:我不确定其他MPI发行版。我不相信主选项与MPI传输一起使用:它主要由SOCK传输使用


您可以从mpirun的手册页中获得大量有关mpirun的信息。

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

创建一个名为 nodelist->将机器名写在另一个下面的机器名中

使用mpirun在终端中尝试以下命令: mpirun-np进程数-节点列表文件所在的machinefile路径Rscript filename.R。忽略圆括号

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


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

创建一个名为 nodelist->将机器名写在另一个下面的机器名中

使用mpirun在终端中尝试以下命令: mpirun-np进程数-节点列表文件所在的machinefile路径Rscript filename.R。忽略圆括号

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