R 在哪里并行?构造用于多节点并行化的bash脚本

R 在哪里并行?构造用于多节点并行化的bash脚本,r,bash,cluster-computing,slurm,R,Bash,Cluster Computing,Slurm,我想在多个节点上并行化作业。每个核心都应该运行特定的参数组合,然后将结果保存为文件。 使用srun启动R脚本会导致所有节点和核心执行相同的excat代码。不使用srun将只在一个节点上启动代码,然后并行运行,但不使用其他节点上的核心 我尝试为--nodes=[]、--tasks per nodes=[]、--cpu per task=[]或--ntasks=[]提供不同的条目,并在srun中尝试了一些选项。 另一方面,我尝试从R脚本中调用其他节点 我需要的是一个脚本,它将任务分布到所有内核上,同

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

我尝试为--nodes=[]、--tasks per nodes=[]、--cpu per task=[]或--ntasks=[]提供不同的条目,并在srun中尝试了一些选项。
另一方面,我尝试从R脚本中调用其他节点


我需要的是一个脚本,它将任务分布到所有内核上,同时为它们提供应该计算的参数组合。此时,我甚至不确定问题的哪些部分需要在bash脚本中处理,哪些部分应该在已执行的脚本中处理

这似乎是一个编写分布式内存应用程序的标准用例。它也可与R一起使用

但是,如果您有一个现有脚本,它可以接受指定问题子集的参数,您可以多次将这些参数提交到集群,那么您建议的方法可能比重写脚本以用于MPI更可行

在本例中,我建议按原样使用脚本,但要编写bash脚本(如您自己所建议的)来处理节点上的分发。这个bash脚本应该只向集群提交(
srun
)具有不同参数组合的多个R脚本执行。根据需要投入的工作量,您可以编写代码,根据可用内核的总数和要执行的脚本运行次数,自动查找适当的
srun
参数。您还可以手动计算每次执行应该消耗多少内核

使用srun启动R脚本会导致所有节点和核心执行相同的excat代码


这一点,我并不完全理解。如果使用不同的参数组合运行R脚本,则不同的节点将计算问题的不同部分。当然,您必须在bash脚本中手动或自动聚合结果。

这似乎是编写分布式内存应用程序的标准的用例。它也可与R一起使用

但是,如果您有一个现有脚本,它可以接受指定问题子集的参数,您可以多次将这些参数提交到集群,那么您建议的方法可能比重写脚本以用于MPI更可行

在本例中,我建议按原样使用脚本,但要编写bash脚本(如您自己所建议的)来处理节点上的分发。这个bash脚本应该只向集群提交(
srun
)具有不同参数组合的多个R脚本执行。根据需要投入的工作量,您可以编写代码,根据可用内核的总数和要执行的脚本运行次数,自动查找适当的
srun
参数。您还可以手动计算每次执行应该消耗多少内核

使用srun启动R脚本会导致所有节点和核心执行相同的excat代码


这一点,我并不完全理解。如果使用不同的参数组合运行R脚本,则不同的节点将计算问题的不同部分。当然,您必须在bash脚本中手动或自动聚合结果。

从R脚本中处理

使用
srun
运行R脚本时,让所有实例执行不同操作的方法(除了使用MPI,这是非常重要的)是引用
SLURM\u PROC\u ID
环境变量

插入一行,例如

idx = as.numeric(Sys.getenv('SLURM_PROC_ID'))
并在列表中包含所有参数组合。然后根据
idx
从列表中选择组合

从Bash提交脚本处理

您还可以使用如下构造(使用
https://www.gnu.org/software/parallel/parallel_tutorial.html


运行
myscript.R
10次,参数范围分别为1到10。然后使用R脚本中的
commandArgs()

处理来获取R脚本中参数的值

使用
srun
运行R脚本时,让所有实例执行不同操作的方法(除了使用MPI,这是非常重要的)是引用
SLURM\u PROC\u ID
环境变量

插入一行,例如

idx = as.numeric(Sys.getenv('SLURM_PROC_ID'))
并在列表中包含所有参数组合。然后根据
idx
从列表中选择组合

从Bash提交脚本处理

您还可以使用如下构造(使用
https://www.gnu.org/software/parallel/parallel_tutorial.html


运行
myscript.R
10次,参数范围分别为1到10。然后使用
commandArgs()

在R脚本中获得参数值。使用GNU并行在节点间分发如何。使用GNU并行在节点间分发如何。到目前为止,我还认为第一种方法(通过bash脚本分发任务)将更容易实现。接下来的问题是,如何从bash脚本分发R脚本中使用的参数?到目前为止,我还认为第一种方法(通过bash脚本分发任务)将更容易实现。那么问题是,我如何分配t