在集群上运行Rmpi,指定库路径

在集群上运行Rmpi,指定库路径,r,foreach,parallel-processing,mpi,hpc,R,Foreach,Parallel Processing,Mpi,Hpc,我正在尝试在我们的计算集群上并行运行分析。 不幸的是,我不得不自己设置Rmpi,可能没有正确地设置。 因为我必须将所有必要的软件包安装到我的主文件夹中,所以我总是要打电话 .libPaths('/home/myfolder/Rlib'); 在我可以加载包之前 但是,doMPI似乎在设置库路径之前尝试加载自身 .libPaths('/home/myfolder/Rlib'); cat("Step 1") library(doMPI) cl <- startMPIcluster() regi

我正在尝试在我们的计算集群上并行运行分析。
不幸的是,我不得不自己设置Rmpi,可能没有正确地设置。 因为我必须将所有必要的软件包安装到我的主文件夹中,所以我总是要打电话

.libPaths('/home/myfolder/Rlib');
在我可以加载包之前

但是,
doMPI
似乎在设置库路径之前尝试加载自身

.libPaths('/home/myfolder/Rlib');
cat("Step 1")
library(doMPI)
cl <- startMPIcluster()
registerDoMPI(cl)
cat("Step 2")
Children_mcmc1 = foreach(i=1:2) %dopar% {
    cat("Step 3")
    .libPaths('/home/myfolder/Rlib');
    library(MCMCglmm)
    cat("Step 4")
    load("krmh_married.rdata")
    nitt = 1000; thin = 50; burnin = 100
    MCMCglmm( children ~ paternalage.factor ,
        random=~idParents,
        family="poisson", 
        data=krmh_married, 
        pr = F, saveX = T, saveZ = T,
        nitt=nitt,thin=thin,burnin=burnin)
}
closeCluster(cl)
mpi.quit()
我得到(删除一些样板消息后)

启动期间-警告消息:
步骤1
步骤1
步骤1
步骤2{:任务2失败-“无法打开连接”
呼叫:%dopar%->
停止执行

如果我这样做

mpirun -H localhost -n 3 R --slave -f "3 - krmh mcmcglmm scc test 2.r" 
R --slave -f "3 - krmh mcmcglmm scc test 2.r" 
我明白了

步骤1
库(doMPI)中出错:没有名为“doMPI”的包
调用:本地…评估->抑制消息->调用处理程序->库
执行已停止
库(doMPI)中出错:没有名为“doMPI”的包
调用:本地…评估->抑制消息->调用处理程序->库
停止执行

我尝试在运行时安装
doMPI
,但即使没有打印步骤2,似乎错误是由循环引起的

当然,尽管我仍在前端进行测试,但我还没有将作业提交到预期的集群


我试图在.Rprofile中指定
.libPaths
调用,但我不确定这是否会在集群上读取,我甚至无法在前端读取它(并且我无法确定R在哪里查找该文件)。

将R包安装到“个人库”中要容易得多,因为它是自动使用的,所以您不必在脚本中调用
.libPaths
。您可以通过执行以下命令来确定这是哪个目录:

> Sys.getenv('R_LIBS_USER')
如果
.libPaths
存在,这将自动成为它返回的第一个目录,因此您根本不必担心调用
.libPaths

请注意,在foreach循环体中调用
.libPaths
没有任何意义,因为在执行任何任务之前,必须由集群工作者加载doMPI

我不确定您的“mpirun”案例中出了什么问题,因为mpirun正在启动所有工作进程,所以脚本的前四行都由所有工作进程执行。这就是“步骤1”的原因但是在第二种情况下,集群工作程序正在生成,因此由RMPIworker.R脚本加载doMPI包,导致加载doMPI时出错


我建议您使用mpirun方法来解决
.libpath
问题,但使用
verbose=TRUE
选项调用
startMPIcluster
。这将在您的工作目录中创建一些名为“MPI.*.log”的文件其中可能包含一些有用的错误消息,可以提供问题的线索。

感谢您的帮助和出色的软件包!出于某种原因,我认为我没有个人库,因为必须创建
R\u LIBS\u USER
中引用的目录。这使事情变得容易多了。我确实更进一步了(到使用
R--slave
方式“无法打开连接”。我将在本周内尝试更多操作。“连接”问题可能是由于试图加载数据文件,可能我需要提供完整路径或类似信息?@Ruben“无法打开连接”"是load命令在找不到文件时产生的错误,因此指定完整路径将是一个有用的测试。它确实是一个不确定的路径导致了该错误。但是现在我验证了foreach中的代码是独立工作的,我得到了
error:ReadItem:unknown type 0,可能是由更高版本的R
使用这两种方法编写的(使用MPI运行3次)@Ruben听起来像是mpirun使用了错误的R版本,可能是由于您的shell init脚本。请尝试在执行mpirun时指定R的完整路径。听起来像,但是
mpirun-H localhost-n 3 R--version
会产生Spring-Dance,无论哪种方式,
R--slave
方法都不会出现该问题,对吗还有其他想法吗?