【发布时间】:2015-08-08 19:54:27
【问题描述】:
最近在R尝试利用部门集群做并行计算。集群系统由SGE管理。 OpenMPI 已安装并通过安装测试。
我通过qsub 命令将我的查询提交到集群。在脚本中,我通过以下命令指定要使用的节点数。 #PBS -l nodes=2:ppn=24(two nodes with 24 threads each)
然后,mpirun -np 1 R --slave -f test.R
之后我检查了$PBS_NODEFILE。我希望分配两个节点。我可以找到两个节点的名称node1, node2,每个节点都出现了 24 次。
`test.R`的内容如下。
library(Rmpi)
library(snow)
cl <- makeCluster(41,type="MPI")
clusterCall(cl, function() Sys.info()[c("nodename","machine")])
stopCluster(cl)
mpi.quit()
clusterCall() 的输出相当令人失望。只有一个节点的名称node1 出现了 41 次。这绝对是错误的,因为node1 上只有 24 个线程。看来我的R 脚本只能从中找到一个节点甚至一个线程。我只是想知道构建MPI 集群的正确方法是什么?
【问题讨论】:
-
您的集群由 PBSPro 或 Torque 管理。尽管 SGE 中的许多命令名称相同(
qsub、qstat等),但 SGE 不使用#PBS标记,而是使用#$,并且它导出的环境变量以SGE_开头。 -
您的脚本和启动命令适用于 LSF。确保 MPI 库正确获取环境。从批处理脚本中运行以下命令:
mpiexec hostname并查看它是否输出与$PBS_NODEFILE中包含的相同主机名和相同次数。 Open MPI 和 PBS/Torque 之间的集成可能存在问题。