多个节点上的单个R脚本
我想利用来自多个节点的CPU内核来执行单个R脚本。每个节点包含16个核心,通过Slurm工具分配给我 到目前为止,我的代码如下所示:多个节点上的单个R脚本,r,unix,parallel-processing,mpi,hpc,R,Unix,Parallel Processing,Mpi,Hpc,我想利用来自多个节点的CPU内核来执行单个R脚本。每个节点包含16个核心,通过Slurm工具分配给我 到目前为止,我的代码如下所示: ncores <- 16 List_1 <- list(...) List_2 <- list(...) cl <- makeCluster(ncores) registerDoParallel(cl) getDoParWorkers() foreach(L_1=List_1) %:% foreach(L_2=List_2) %do
ncores <- 16
List_1 <- list(...)
List_2 <- list(...)
cl <- makeCluster(ncores)
registerDoParallel(cl)
getDoParWorkers()
foreach(L_1=List_1) %:%
foreach(L_2=List_2) %dopar% {
...
}
stopCluster(cl)
ncores使用mpirun
来启动R脚本,如果不使用
查看您的代码,您可能希望不使用MPI。使用2x16芯的配方如下
要求2个任务和每个任务16个CPU
#SBATCH --nodes 2
#SBATCH --ntasks 2
#SBATCH --cpus-per-task 16
用Slurm的命令启动程序
您需要将结果保存在磁盘上,然后将部分结果合并为一个完整的结果。您可以告诉<代码> MPRUN < /代码>以考虑其他主机。这是本地MPI设置的一部分。非常感谢您的建议。我稍微修改了srun行,即srun--nodes=2--ntasks=2--cpu per task=16r--no save另一个文件路径.Rout
。否则,系统仅请求单个节点。如果将节点数增加到5,则不需要修改[[taskID+1]]
,对吗?只需将--node=2
更改为--nodes=5
,ntasks=2
更改为ntasks=5
和split(List_1,1:2)
更改为split(List_1,1:5)
?我没有测试,但是的,这是个想法。
#SBATCH --nodes 2
#SBATCH --ntasks 2
#SBATCH --cpus-per-task 16
srun R --no-save < file_path_R_script.R > another_file_path.Rout
ncores <- 16
taskID <- as.numeric(Sys.getenv('SLURM_PROCID'))
List_1 <- list(...)
List_2 <- list(...)
cl <- makeCluster(ncores)
registerDoParallel(cl)
getDoParWorkers()
Lits_1 <- split(List_1, 1:2)[[taskID+1]] # Split work based on value of SLURM_PROCID
foreach(L_1=List_1) %:%
foreach(L_2=List_2) %dopar% {
...
}
stopCluster(cl)