randomForestSRC 包 R 中的 rfsrc() 命令不使用多核功能

标签 r parallel-processing multicore random-forest

我正在使用 R(适用于 Windows 7,32 位)使用 randomForests 进行文本分类.由于数据集很大,我在网上查了加快模型构建的速度,遇到了randomForestSRC包裹。

我已按照软件包安装手册中的所有步骤进行操作,但在执行 rfsrc() 期间命令,R 仅使用其中一个逻辑核心(与 randomforest() 相同),最大 CPU 利用率为 25%。
我按照手册使用了以下命令。

options(mc.cores=detectcores()-1, rf.cores = detectcores()-1)

我在具有 4 个逻辑内核的 Intel i3 2120 CPU 上使用 Windows 7 Professional 32 位 Service Pack 1。任何人都可以对我可能缺少的东西有所了解吗?任何其他有效的使用方式 randomForest多核利用也会有帮助!

最佳答案

问题是randomForestSRC使用 mclapply并行执行的函数,但 mclapply不支持在 Windows 上并行执行。 randomForestSRC也可以使用 OpenMP 进行多线程并行执行,但这并未内置在 CRAN 的二进制分发版中,因此您必须在启用 OpenMP 支持的情况下从源代码构建包。

我认为你的两个选择是:

  • 构建 randomForestSRC在您的 Windows 机器上支持 OpenMP;
  • 自己并行调用随机森林函数。

  • 这是一个使用 randomForest 的简单并行示例包装与 foreachdoParallel源自 foreach 中的示例小插图:
    library(randomForest)
    library(doParallel)
    workers <- detectCores() 
    cl <- makePSOCKcluster(workers)
    registerDoParallel(cl)
    
    x <- matrix(runif(500), 100)
    y <- gl(2, 50)
    ntree <- 1000
    
    rf <- foreach(n=rep(ceiling(ntree/workers), workers),
                  .combine=combine, .multicombine=TRUE,
                  .packages='randomForest') %dopar% {
      randomForest(x, y, ntree=n)
    }
    

    这个例子应该适用于 Windows、Mac OS X 和 Linux。见 foreach vignette想要查询更多的信息。

    关于randomForestSRC 包 R 中的 rfsrc() 命令不使用多核功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29810781/

    相关文章:

    r - 大型栅格数据集的像素级回归

    r - 如何编辑由 mfrow 拆分的 R 图形设备中的先前绘图

    r - 将一些函数应用于多个对象

    在 dplyr 链中动态重命名列名

    windows - 并行执行shell进程

    c++ - C++11中通过pthreads获取线程Core affinity

    c++ - 在低功耗多核微 Controller 中使用全局变量不好吗? (C++)

    java-8 - 如何在链式 CompletableFuture 中扇出?

    c++ - 使用 MPI 在处理器之间分配工作,但所有处理器都在完成整个工作,而不是只做其中的一部分

    c# - 如何在不冒应用程序失败风险的情况下调用 SemaphoreSlim.Release()?