我正在尝试在我们的计算集群上并行运行分析 不幸的是,我不得不自己设置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()
如果我这样做
mpirun -H localhost -n 3 R --slave -f "3 - krmh mcmcglmm scc test 2.r"
我得到(删除一些样板消息后)
启动期间 - 警告信息:
第1步 第1步 第1步 步骤2 {:任务2失败 - “无法打开连接”中的错误 调用:%dopar% - >
执行暂停
如果我这样做
R --slave -f "3 - krmh mcmcglmm scc test 2.r"
我得到了
第1步 库中的错误(doMPI):没有名为'doMPI'的包。
电话:本地... eval - &gt; suppressMessages - &gt; withCallingHandlers - &gt;库
执行停止了 库中的错误(doMPI):没有名为'doMPI'的包。
电话:本地... eval - &gt; suppressMessages - &gt; withCallingHandlers - &gt;库
执行暂停
我已尝试在运行时安装doMPI
,但即使未打印第2步,似乎错误也是由循环产生的。
当然,有了这一切,我仍然在我们的前端进行测试,我还没有把它提交给预期的集群。
我试图在我的.Rprofile中指定.libPaths
调用,但我不确定这会在集群上读取,我甚至无法在前端读取它(我无法读取)找出R在哪里寻找文件。)
答案 0 :(得分:1)
将R软件包安装到“个人库”中要容易得多,因为它会自动使用,因此您无需在脚本中调用.libPaths
。您可以通过执行来确定这是一个目录:
> Sys.getenv('R_LIBS_USER')
这将自动成为.libPaths
返回的第一个目录(如果存在),因此您根本不必担心调用.libPaths
。
请注意,在foreach循环体中调用.libPaths
没有意义,因为群集工作者必须先加载doMPI才能执行任何任务。
我不确定你的“mpirun”情况出了什么问题,因为mpirun正在启动所有的工作程序,所以你的脚本的前四行都是由它们执行的。这就是“步骤1”显示三次的原因。但在第二种情况下,集群工作者正在生成,因此doMPI包由RMPIworker.R脚本加载,导致加载doMPI时出错。
我建议您使用mpirun方法解决.libPaths
问题,但使用startMPIcluster
选项调用verbose=TRUE
。这将在您的工作目录中创建一些名为“MPI _ * .log”的文件,其中可能包含一些有用的错误消息,这些消息将提供问题的线索。