我想在多个节点并行工作。每个核心应该运行参数的特定组合,然后将结果保存为一个文件。使用SRUN推出的R-脚本导致所有节点和核心执行excat相同的代码。不使用SRUN将启动只有一个节点,然后在其中并行运行,但不使用其他节点上的内核上的代码。
我试图为--nodes = []给予不同的条目,--tasks每次节点= [],--cpus每次任务= [],或--ntasks = [],并与在SRUN一些选项实验。 在另一方面,我打过电话从R-脚本中的其他节点。
我需要的是分发在所有核心的任务,同时给予他们应评估参数组合的脚本。在这一点上,我甚至不能确定需要什么问题的部分要在bash脚本中处理,哪些应该在执行脚本。
从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脚本参数的值
这似乎是使用案例MPI,用于编写分布式内存应用的标准。它也可用于使用R.
但是,如果您有现成的脚本,它可以带参数指定有问题,你可以提交到群集多次的一个子集,你的建议的方法,可能比你重写剧本与MPI使用更可行。
在这种情况下,我会建议使用你的脚本原样,但是写一个bash脚本(如你所说你自己)处理过的布点。此bash脚本应该简单地提交与不同的参数组合到群集(srun
)多个存在的R脚本执行。这取决于你想要多少工作投入,可以自动寻找取决于可用内核和脚本的运行次数,执行总数合适srun
参数编写代码。你也可以只手动计算出每个执行应该有多少个核消耗。
使用SRUN推出的R-脚本导致所有节点和核心执行excat相同的代码。
这一点,我不完全理解。如果您srun
使用不同的参数组合,你的[R剧本,不同的节点将计算问题的不同部分。当然,你必须收集您的结果,在您的bash脚本手动或自动。