我想对我可以访问的集群进行分布式并行计算:5个节点(“计算机”);每个节点有两个处理器(“ CPU”),每个处理器有18个内核。
因此,在令人尴尬的并行计算中,我可以使用的线程数为180(5 * 2 * 18)。
我发现我无法为群集使用标准的并行R函数。相反,我需要使用MPI。 doMPI似乎很适合此任务,因为它实现了MPI的foreach,如小插图中所述:
https://cran.r-project.org/web/packages/doMPI/vignettes/doMPI.pdf
我有一个关于MPI的问题:例如何时写:
cl <-startMPIcluster(count = 2)
这2是什么意思?集群中要使用的节点数?要使用的内核数?
如果2表示要使用的节点数,那么doMPI将能够使用每个节点中的2个处理器和2 * 18内核吗?还是我必须告诉doMPI其他东西,以便可以使用这36个内核?
如果2代表核心数,那么一切似乎都比较容易。但是这种选择是奇怪的,因为如果群集实际上大于5个节点(并且我已经按比例分配了5个节点),则没有明确的配方确定doMPI是否应使用尽可能少的节点(并且该节点内的所有核心)或使用尽可能多的节点(该节点内的核心尽可能少)。
那么,我的问题是:
如果我想循环执行180个令人尴尬的并行任务(或360或1800),则应使用cl <-startMPIcluster(count = 5)或cl <-startMPIcluster(count = 180)或其他类似方法正在使用180个可用内核?
谢谢您的帮助。
答案 0 :(得分:1)
count
参数是“要产生的工人数”。如果要使用群集中的所有180个核心,则有两个主要选项:
startMPIcluster(count=180)
。这将产生180个进程。mpirun -np 180 R myscript.r
。这将从一开始就启动带有MPI的R实例,即MPI“大小”为180,进程的“等级”为0到179。这些选项都可以。您也可以将它们混合在一起,例如mpirun -np 10
然后使用count=15
或其他方式生成每个作业。但是,鉴于您到目前为止已告诉我们的内容,我想您应该坚持使用上面的简单方法。
作为一般性注释,每当MPI谈论进程或工作者或作业的数量时,其中一个便在一个内核上执行。通常,每个节点的节点数或套接字数并不是您需要担心的第一件事(稍后可能值得考虑作为优化)。