使用降雪R初始化MPI群集

使用降雪R初始化MPI群集,r,parallel-processing,cluster-computing,openmpi,snowfall,R,Parallel Processing,Cluster Computing,Openmpi,Snowfall,我一直试图在我的大学集群上运行Rmpi和snowfall,但出于某种原因,无论分配了多少计算节点,我的snowfall初始化只在一个节点上运行 下面是我初始化它的方式: sfInit(parallel=TRUE, cpus=10, type="MPI") 有什么想法吗?我将根据需要提供说明。要在集群上运行基于Rmpi的程序,您需要使用批处理排队系统请求多个节点,然后通过诸如mpirun/mpiexec之类的实用程序从作业脚本执行R脚本。理想情况下,构建mpirun实用程序是为了自动检测批处理排

我一直试图在我的大学集群上运行
Rmpi
snowfall
,但出于某种原因,无论分配了多少计算节点,我的
snowfall
初始化只在一个节点上运行

下面是我初始化它的方式:

sfInit(parallel=TRUE, cpus=10, type="MPI")

有什么想法吗?我将根据需要提供说明。

要在集群上运行基于Rmpi的程序,您需要使用批处理排队系统请求多个节点,然后通过诸如mpirun/mpiexec之类的实用程序从作业脚本执行R脚本。理想情况下,构建mpirun实用程序是为了自动检测批处理排队系统分配了哪些节点,否则需要使用mpirun参数,例如
--hostfile
,来告诉它要使用哪些节点

在您的例子中,听起来好像您请求了多个节点,因此问题可能在于R脚本的执行方式。有些人没有意识到他们需要使用mpirun/mpiexec,结果是脚本在单个节点上运行。如果您使用的是mpirun,则可能是您的OpenMPI安装没有支持批处理排队系统。在这种情况下,您必须根据批处理队列系统提供的信息创建适当的主机文件,这些信息通常通过环境变量和/或文件提供

下面是一个典型的mpirun命令,我使用它从作业脚本执行并行R脚本:

mpirun -np 1 R --slave -f par.R
由于我们构建了支持Torque的开放式MPI,所以我没有使用
--hostfile
选项:mpirun会自动从
PBS\u NODEFILE
环境变量中确定要使用哪些节点。使用
-np 1
可能看起来很奇怪,但如果您的程序将产生工作程序,则需要使用它,这通常是在使用
snow
包时完成的。我从未使用过
snowfall
,但在查看源代码之后,我发现
sfInit
总是使用“count”参数调用
makeMPIcluster
,这将导致
snow
产生工作线程,因此我认为
-np1
对于具有
snowfall
的MPI集群是必需的。否则,mpirun将在多个节点上启动您的R脚本,每个节点将在其自己的节点上生成10个工作线程,这不是您想要的。诀窍是将
sfInit
“CPU”参数设置为与批处理排队系统分配给作业的节点数一致的值。您可能会发现
Rmpi
mpi.universe.size
函数对此很有用


如果您认为所有这些都正确完成了,那么问题可能在于在R脚本中创建MPI cluster对象的方式,但我怀疑这与使用(或不使用)mpirun有关。

您的群集运行的是哪种MPI?openMPI,据我所知,没有错误消息(运行顺利,但系统管理员告诉我,尽管我分配了5个群集,但它都在一个群集上运行)。此外,我刚刚意识到我的意思是一个节点而不是一个群集。关于可能的原因,有什么想法吗?我可能必须使用socketHosts吗?谢谢,我认为问题很可能是我没有使用mpirun(不知道这一点)。因此,使用mpirun的文档如下所示:调用mpirun。#注意:$NSLOTS由OGS设置为N,即“-pe mpi_M_tasks_per_node N”选项请求的处理器数量。#如果M=4,可能的N为:4、8、12、16、#(请参阅Runningjobs页面中的表2)mpirun-np$NSLOTS mpi_程序arg1 arg2..如果我想让snowfall为我做所有的工作,我应该只做-np 1?@user1480248正如我在更新的答案中提到的,我认为你确实需要在snowfall中使用“-np 1”。基于Rmpi的包在使用mpi生成时非常不寻常,因此关于如何设置
-np
的通常建议是错误的。因此如果我是分配了16个计算节点,我想利用每个节点上的所有16个核(系统允许我访问),如果我让CPU@user1480248,如果您请求并分配了16个节点,每个节点有16个核,那么我希望mpi.universe.size将返回256的值。我还希望设置“CPU”到256将导致在这16个节点中的每个节点上产生16个工作线程。但这只是一个猜测,因为我对OGS不是很熟悉,这取决于在您的OpenMPI安装中内置OGS支持。