【问题标题】:How to use Rmpi in R on linux Cluster to increase cores available with DEoptim?如何在 Linux Cluster 上的 R 中使用 Rmpi​​ 来增加 DEoptim 的可用内核?
【发布时间】:2015-07-17 04:44:05
【问题描述】:

我正在使用在 R 中开发的代码使用 DEoptim(旨在最小化目标函数的函数)校准具有 8 个参数的水文模型。 DEoptim 代码使用 'parallel' 包来检测使用 'DetectCores()' 的可用内核数量。在我的 PC 上,我有 4 个内核,每个内核有 2 个线程,因此它检测到 8 个内核,然后将水文模型发送到具有不同参数值的内核,并将结果返回到中心。它这样做数百或数千次并迭代参数以尝试找到最佳集合。因此,可用的内核越多,它的工作速度就越快。

我在一所大学,可以访问 Linux 计算集群。他们拥有多达 12 个内核(即非线程)的服务器,如果我使用它,它的运行速度将比我的 PC 快两到三倍。伟大的。但是,理想情况下,我会将代码分布在其他服务器上,这样我就可以访问更多内核并将所有信息发送回主服务器。

因此,我的问题是如何在我的代码中包含 Rmpi​​ 以有效地增加可用内核。您可能会说,我对使用集群还很陌生。

非常感谢,安东尼

【问题讨论】:

    标签: linux r parallel-processing


    【解决方案1】:

    如果你想在Linux集群的多个节点上执行DEoptim,我相信你需要通过在control参数中指定parallelType=2来使用foreach。您可以将 doMPI 并行后端或 doParallel 后端与 MPI 集群对象一起使用。例如:

    library(doParallel)
    library(Rmpi)
    cl <- makeCluster(mpi.universe.size()-1, type='MPI')
    registerDoParallel(cl)
    
    # and eventually...
    DEoptim(fn=Genrose, lower=rep(-25, n), upper=rep(25, n),
      control=list(NP=10*n, itermax=maxIt, parallelType=2))
    

    除了其他软件包之外,您还需要安装 snow 软件包。此外,请确保使用 -np 1 选项使用 mpirun 执行脚本。如果不使用 mpirun,worker 将全部在本地机器上生成。

    【讨论】:

    • 非常感谢 - 这将使用多少台机器,即 mpi.universe.size() 是集群中的机器总数吗?期待尝试代码。
    • @user2901667 否。 mpi.universe.size() 返回的值通常取决于 mpirun 的参数。例如,如果您指定一个包含 10 个主机的机器/主机文件,则 mpi.universe.size() 应返回 10。如果您的 MPI 安装是在支持批处理排队系统的情况下构建的,则 mpi.universe 返回的值.size() 将取决于您在提交作业时请求的核心数量。
    • 感谢您的反馈。这(Rmpi)是否适用于并行包(即parallelType = 1)。我问是因为我的代码在多个内核上运行良好,并且不确定作为 DEoptim 控制的一部分向 foreachArgs 提供哪些参数。当使用并行类型 = 1 时,我必须通过 parVar 和 DEoptim 控制中的包来提供变量和包。
    • @user2901667 否。如果您指定parallelType=1,则使用parallel::makeCluster(parallel::detectCores()) 创建一个集群对象,并且在DEoptim 2.2 版中似乎无法自定义它的创建方式-3.
    猜你喜欢
    • 2016-11-21
    • 2010-11-13
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多