Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个节点上的单个R脚本_R_Unix_Parallel Processing_Mpi_Hpc - Fatal编程技术网

多个节点上的单个R脚本

多个节点上的单个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

我想利用来自多个节点的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) %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)