在集群上运行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
方法都不会出现该问题,对吗还有其他想法吗?