2016-12-02 48 views
0

我现在正在处理大型数据集,我想使用并行计算来加速该过程。 WestGird是一个加拿大计算系统,它具有互连的集群。WestGrid中基于MPI群集的并行计算(pbs文件)

我使用两个包doSNOWparallel来做并行作业。我的问题是我应该如何编写pbs文件。当我使用qsub提交作业时,发生错误:mpirun noticed that the job aborted, but has no info as to the process that caused that situation

这里是R脚本代码:

install.packages("fume_1.0.tar.gz") 
library(fume) 
library(foreach) 
library(doSNOW) 
load("spei03_df.rdata",.GlobalEnv) 

cl <- makeCluster(mpi.universe.size(), type='MPI') 
registerDoSNOW(cl) 
MK_grid <- 
    foreach(i=1:6000, .packages="fume",.combine='rbind') %dopar% { 
    abc <- mkTrend(as.matrix(spei03_data)[i,]) 
    data.frame(P_value=abc$`Corrected p.value`, Slope=abc$`Sen's Slope`*10,Zc=abc$Zc) 
    } 
    stopCluster(cl) 
    save(MK_grid,file="MK_grid.rdata") 
    mpi.exit() 

的 “烟” 包是从https://cran.r-project.org/src/contrib/Archive/fume/下载。

这里是PBS文件:

#!/bin/bash 
#PBS -l nodes=2:ppn=12 
#PBS -l walltime=2:00:00 
module load application/R/3.3.1 
cd $PBS_O_WORKDIR 

export OMP_NUM_THREADS=1 
mpirun -np 1 -hostfile $PBS_NODEFILE R CMD BATCH Trend.R 

谁能帮助?非常感谢。

回答

1

很难就如何使用我从未使用过的计算集群给出建议,因为每个集群都有不同的设置,但我可以给你一些一般性建议,可能有所帮助。

你的工作脚本对我来说看起来很合理。这与我在我们的Torque/Moab集群上使用的非常相似。验证您是否可以交互地加载所有必需的R软件包是一个好主意,因为有时可能需要加载额外的模块文件。如果您需要自己安装软件包,请确保将它们安装在名为“〜/ R/x86_64-pc-linux-gnu-library/3.3”的标准“个人库”中。这通常可以避免在并行执行时在R脚本中加载包的错误。

我有更多的赞美你 - [R脚本:

  • 你需要使用library(Rmpi)加载RMPI包在你的[R脚本。加载doSNOW时不会自动加载,因此在拨打mpi.universe.size()时会出现错误。

  • 我不建议在R脚本中安装R包。例如,如果install.script需要提示您输入CRAN存储库,那么这将失败,因为您无法通过执行mpirun的R脚本执行交互功能。

  • 我建议开始mpi.universe.size() - 1集群工时候打电话makeCluster。由于mpirun启动一名工人,因此makeCluster可能不会安全地产生mpi.universe.size()个额外的工人,因为这会导致总计为mpi.universize.size() + 1的MPI过程。这适用于某些群集,但它至少在我们的一个群集上失败。

  • 在调试时,尝试使用makeCluster outfile=''选项。根据您的MPI安装,这可能会让您看到否则将隐藏的错误消息。