在我的论文中,我需要进行大量的仿真研究,这些都需要相当长的时间。我的电脑有4个内核,所以我一直在想,是否可以在Rstudio中同时运行两个R-脚本,让它们使用两个不同的内核?如果能做到这一点,我可以节省很多时间,只需让电脑整夜运行所有这些脚本。
发布于 2017-01-29 12:29:20
在RStudio中
如果您右键单击RStudio,您应该能够打开RStudio的几个单独的“会话”(不管您是否使用项目)。默认情况下,它们将使用每个核心1。
Update (2018年7月):作为预览发布提供的RStudio v1.2.830-1支持“作业”窗格。它专门用于在与交互式R会话分离的背景中运行R脚本:
此特性可在RStudio版本1.2 (或更高版本)的版本中使用。
在终端中运行脚本
如果您知道有几个脚本运行时没有错误,我建议通过命令行在不同的参数上运行这些脚本:
RCMD script.R
RScript script.R
R --vanilla < script.R
在后台运行:
nohup Rscript script.R &
在这里,"&“在后台运行脚本(它可以用fg
检索,用htop
监视,用kill <pid>
或pkill rsession
杀死),nohup
将输出保存在一个文件中,并在终端关闭时继续运行。
向脚本传递参数:
Rscript script.R 1 2 3
这将将c(1, 2, 3)
传递给R作为commandArgs()
的输出,因此bash中的一个循环可以使用bash循环运行多个Rscript实例:
for ii in 1 2 3
do
nohup Rscript script.R $ii &
done
在R内运行并行代码
您经常会发现R脚本中的一个特定步骤是减慢计算速度,我可以建议在R代码中运行并行代码而不是单独运行它们吗?我推荐在R中并行运行循环的雪包,而不是使用:
cl <- makeCluster(n)
# n = number of cores (I'd recommend one less than machine capacity)
clusterExport(cl, list=ls()) #export input data to all cores
output_list <- parLapply(cl, input_list, function(x) ... )
stopCluster() # close cluster when complete (particularly on shared machines)
在任何地方都可以使用它,通常在R中使用lapply
函数并行运行它。1:https://www.r-bloggers.com/quick-guide-to-parallel-r-with-snow/
发布于 2016-07-14 10:19:17
您可以使用以下代码在同一会话中实现多核并行(如下面的https://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf所解释的)
if(Sys.info()["sysname"]=="Windows"){
library(doParallel)
cl<-makeCluster(numberOfCores)
registerDoParallel(cl)
}else{
library(doMC)
registerDoMC(numberOfCores)
}
library(foreach)
someList<-list("file1","file2")
returnComputation <-
foreach(x=someList) %dopar%{
source(x)
}
if(Sys.info()["sysname"]=="Windows") stopCluster(cl)
你还需要调整你的输出。
发布于 2019-02-10 00:19:13
您所需要做的(假设您使用Unix/Linux)是运行一个R批处理命令并将其放在后台。这将自动将其分配给CPU。
在空壳处,做:
/your/path/$ nohup R CMD BATCH --no-restore my_model1.R &
/your/path/$ nohup R CMD BATCH --no-restore my_model2.R &
/your/path/$ nohup R CMD BATCH --no-restore my_model3.R &
/your/path/$ nohup R CMD BATCH --no-restore my_model4.R &
执行这些命令,将打印输出保存在文件my_model1.Rout中,并将所有创建的R对象保存在file.RData中。这将在不同的CPU上运行每个模型。会话和输出的运行将放在输出文件中。
如果您在Internet上通过终端执行此操作,则需要使用nohup命令。否则,在退出会话时,进程将终止。
/your/path/$ nohup R CMD BATCH --no-restore my_model1.R &
如果要赋予进程较低的优先级,则需要:
/your/path/$ nohup nice -n 19 R CMD BATCH --no-restore my_model.R &
最好在脚本的开头包含一些代码来加载和附加相关的数据文件。
永远不要简单地做
/your/path/$ nohup R CMD BATCH my_model1.R &
这将消耗.RData文件(所有有趣的对象也是如此),并将严重损害可再现性。也就是说,
--no-restore
或
--vanilla
是你亲爱的朋友。
如果您有太多的模型,我建议在云帐户上进行计算,因为您可以拥有更多的CPU和RAM。取决于您正在做什么,以及R包,模型可能需要几个小时的现有硬件。
我很难学到这一点,但这里有一份很好的文件:
http://users.stat.umn.edu/~geyer/parallel/parallel.pdf
HTH。
https://stackoverflow.com/questions/31137842
复制相似问题