【问题标题】:R: DEoptim parallel optimization - number of coresR:DEoptim 并行优化 - 核心数
【发布时间】:2015-09-21 05:01:02
【问题描述】:

我正在尝试在 R 中使用 DEoptim 优化包来解决连续优化问题,并且由于我的成本函数需要很长时间来评估(2 分钟),我正在尝试使用并行计算。我的问题是:

  1. paralleltype=1 (parallel) 和 2 (foreach) 选项有什么区别?何时使用两者之一?

  2. 是否可以使用paralleltype=1 指定内核数量,以免占用所有可用内核进行计算(例如,64 个内核上的 50 个内核)?

【问题讨论】:

  • 有人有想法吗?

标签: r optimization parallel-processing continuous


【解决方案1】:

广告。 1 - 包文档中对此进行了说明。

广告。 2 - 需要修改两个函数:DEoptim.control 和 DEoptim

首先,添加一个变量 - 比如 limitCores - 到 DEoptim.control 函数,它控制 DE 优化的执行参数。

其次,对 DEoptim 包装函数进行修改,以作用于 limitCores 设置的限制。

if (ctrl$parallelType == 1) {

    if (!is.na(ctrl$limitCores)) {

        if (ctrl$limitCores<1) useCores <- round(parallel::detectCores()*ctrl$limitCores) else useCores <- ctrl$limitCores

        cl <- parallel::makeCluster(parallel::detectCores())

    } else {

        cl <- parallel::makeCluster(parallel::detectCores())

    }

完整代码:http://pastebin.com/NumDx4ae

【讨论】:

  • 谢谢。但是我在包文档中的任何地方都看不到何时使用一种类型的并行性而不是另一种。我确实看到paralleltype=1 使用parallel 包而=2 使用foreach 包,仅此而已。
  • parallelType 指向将使用的并行后端。一些并行后端是系统特定的,在某些系统上不起作用。目前,R 中的并行处理非常可靠。几年前并非如此,选择正确的后端至关重要。
  • 可能有点过时了,但我可以问一下它是否不应该是本质上使用 useCores 的东西,因为在上面的版本中,如果我使用 limitCores>1,我的计算机使用 detectCores()
  • 我在 Pastebin 的代码已经有一年的历史了,但据我记得,总体思路是限制使用的内核/线程的比例。所以,>=1 意味着所有的核心/线程都应该参与。
【解决方案2】:

感谢您的代码 mjaniec!

我知道你发布它已经有一段时间了,但我认为在第 91 行应该是:

cl <- parallel::makeCluster(useCores)

代替:

cl <- parallel::makeCluster(parallel::detectCores())

【讨论】:

    猜你喜欢
    • 2012-02-16
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多