凡并行?构建bash脚本进行并行在多个节点

问题描述 投票:0回答:2

我想在多个节点并行工作。每个核心应该运行参数的特定组合,然后将结果保存为一个文件。使用SRUN推出的R-脚本导致所有节点和核心执行excat相同的代码。不使用SRUN将启动只有一个节点,然后在其中并行运行,但不使用其他节点上的内核上的代码。

我试图为--nodes = []给予不同的条目,--tasks每次节点= [],--cpus每次任务= [],或--ntasks = [],并与在SRUN一些选项实验。 在另一方面,我打过电话从R-脚本中的其他节点。

我需要的是分发在所有核心的任务,同时给予他们应评估参数组合的脚本。在这一点上,我甚至不能确定需要什么问题的部分要在bash脚本中处理,哪些应该在执行脚本。

r bash cluster-computing slurm
2个回答
1
投票

从R脚本内处理

当运行与srun的R脚本,顺便让所有实例做不同的事情(除了使用MPI,这是不平凡等)是指SLURM_PROC_ID环境变量。

插入一行,如

idx = as.numeric(Sys.getenv('SLURM_PROC_ID'))

并在列表中有所有的参数组合。然后,从依赖于idx列表中的组合。

从猛砸提交脚本处理

您还可以管理在提交脚本以构建类似如下的分布(与https://www.gnu.org/software/parallel/parallel_tutorial.html

parallel srun --exclusive -n 1 -c1 Rscript myscript.R ::: {1..10}

运行myscript.R 10次,用一个参数分别为1至10。然后你在commandArgs()将R脚本参数的值


0
投票

这似乎是使用案例MPI,用于编写分布式内存应用的标准。它也可用于使用R.

但是,如果您有现成的脚本,它可以带参数指定有问题,你可以提交到群集多次的一个子集,你的建议的方法,可能比你重写剧本与MPI使用更可行。

在这种情况下,我会建议使用你的脚本原样,但是写一个bash脚本(如你所说你自己)处理过的布点。此bash脚本应该简单地提交与不同的参数组合到群集(srun)多个存在的R脚本执行。这取决于你想要多少工作投入,可以自动寻找取决于可用内核和脚本的运行次数,执行总数合适srun参数编写代码。你也可以只手动计算出每个执行应该有多少个核消耗。

使用SRUN推出的R-脚本导致所有节点和核心执行excat相同的代码。

这一点,我不完全理解。如果您srun使用不同的参数组合,你的[R剧本,不同的节点将计算问题的不同部分。当然,你必须收集您的结果,在您的bash脚本手动或自动。

© www.soinside.com 2019 - 2024. All rights reserved.