我一直在尝试在我大学的集群上运行Rmpi
,snowfall
但由于某种原因,无论我分配了多少计算节点,我的snowfall
初始化都只在一个节点上运行。
这是我初始化它的方式:
sfInit(parallel=TRUE, cpus=10, type="MPI")
有任何想法吗?我会根据需要提供说明。
我一直在尝试在我大学的集群上运行Rmpi
,snowfall
但由于某种原因,无论我分配了多少计算节点,我的snowfall
初始化都只在一个节点上运行。
这是我初始化它的方式:
sfInit(parallel=TRUE, cpus=10, type="MPI")
有任何想法吗?我会根据需要提供说明。
要在集群上运行基于 Rmpi 的程序,您需要使用批处理排队系统请求多个节点,然后通过诸如 mpirun/mpiexec 之类的实用程序从作业脚本执行您的 R 脚本。理想情况下,mpirun 实用程序已构建为自动检测批处理排队系统分配了哪些节点,否则您将需要使用 mpirun 参数,例如--hostfile
告诉它要使用哪些节点。
在您的情况下,听起来您请求了多个节点,因此问题可能出在 R 脚本的执行方式上。有些人没有意识到他们需要使用 mpirun/mpiexec,结果是您的脚本在单个节点上运行。如果您使用的是 mpirun,则可能是您的 Open MPI 安装未构建支持您的批处理排队系统。在这种情况下,您必须根据批处理排队系统提供的信息创建适当的主机文件,这些信息通常通过环境变量和/或文件提供。
这是我用来从作业脚本执行并行 R 脚本的典型 mpirun 命令:
mpirun -np 1 R --slave -f par.R
由于我们构建了支持 Torque 的 Open MPI,因此我不使用该--hostfile
选项:mpirun 会PBS_NODEFILE
自动从环境变量中找出要使用的节点。的使用-np 1
可能看起来很奇怪,但如果您的程序要生成工作人员,则需要使用,这通常在使用snow
包时完成。我从未使用snowfall
过. _ _ 否则,mpirun 将在多个节点上启动您的 R 脚本,每个节点都会在自己的节点上生成 10 个工作人员,这不是您想要的。诀窍是设置sfInit
makeMPIcluster
snow
-np 1
snowfall
sfInit
“cpus”参数的值与批处理排队系统分配给您的作业的节点数一致。您可能会发现该Rmpi
mpi.universe.size
功能对此很有用。
如果您认为所有这些都正确完成,则问题可能与在您的 R 脚本中创建 MPI 集群对象的方式有关,但我怀疑它与 mpirun 的使用(或未使用)有关.