doMPI 和节点、处理器和核心
doMPI and nodes, processors and cores
我想使用我有权访问的集群进行分布式并行计算:5 个节点 ("computers");每个节点有两个处理器("CPUs"),每个处理器有 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 个可用内核?
感谢您的帮助。
count
参数是"the number of workers to spawn."如果你想在集群中使用所有180个核心,你有两个主要选择:
- 使用
startMPIcluster(count=180)
。这将产生 180 个进程。
- 使用
mpirun -np 180 R myscript.r
。这将启动 180 个 R 实例,从一开始就设置了 MPI,即 MPI "size" 将为 180,进程的 "rank" 将为 0 到 179。
这两个选项都可以。你也可以混合它们,例如mpirun -np 10
然后让每个工作产生 count=15
或其他。但鉴于您到目前为止告诉我们的内容,我认为您应该坚持使用上述更简单的方法。
作为一般说明,每当 MPI 谈论进程或工作人员或工作的数量时,其中一个是在一个核心上执行的。通常,每个节点的节点数或套接字数不是您需要担心的第一件事(它们可能值得稍后考虑作为优化)。
我想使用我有权访问的集群进行分布式并行计算:5 个节点 ("computers");每个节点有两个处理器("CPUs"),每个处理器有 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 个可用内核?
感谢您的帮助。
count
参数是"the number of workers to spawn."如果你想在集群中使用所有180个核心,你有两个主要选择:
- 使用
startMPIcluster(count=180)
。这将产生 180 个进程。 - 使用
mpirun -np 180 R myscript.r
。这将启动 180 个 R 实例,从一开始就设置了 MPI,即 MPI "size" 将为 180,进程的 "rank" 将为 0 到 179。
这两个选项都可以。你也可以混合它们,例如mpirun -np 10
然后让每个工作产生 count=15
或其他。但鉴于您到目前为止告诉我们的内容,我认为您应该坚持使用上述更简单的方法。
作为一般说明,每当 MPI 谈论进程或工作人员或工作的数量时,其中一个是在一个核心上执行的。通常,每个节点的节点数或套接字数不是您需要担心的第一件事(它们可能值得稍后考虑作为优化)。