2

我在 R 中使用 xgb.cv 和 xgboost。但是,它不能并行工作

我的示例代码如下

library(xgboost)
library(parallel)
param <- list("objective" = "reg:logistic"
          , "eval_metric" = "logloss"
          ,"nthread" = 8
          ,"bst:eta" = .025
          ,"bst:max_depth" = 3
          ,"lambda" = 1
          ,"lambda_bias" = 0
          ,"alpha" = .8
          ,"min_child_weight" = 3
          ,"subsample" = .9
          ,"colsample_bytree" = .6)
bst.cv3 = xgb.cv(param=param, data = x, label = y,
             nfold = 3, nrounds=cv.nround, missing = NA
             ,prediction = TRUE)

但是,上面的代码不起作用。我必须做什么才能使它们平行?

我在 xgboost 网站和 github 上找到了这个

  1. https://github.com/dmlc/xgboost/blob/master/doc/build.md#building-on-osx

  2. https://github.com/dmlc/xgboost/issues/276

但是,我无法运行

brew install clang-omp

或者

brew install gcc --without-multilib

sudo 也不起作用谢谢

4

3 回答 3

5

不幸的是,以前选择的答案现在已经过时了。该clang-omp软件包不再在自制软件中可用。所以这对我有用。

首先,在外壳上:

brew reinstall gcc --without-multilib

然后,~/.R/Makevars使用以下内容创建文件,确保更新路径,以便它们正确反映安装的 gcc 版本自制软件:

CC=/usr/local/Cellar/gcc/6.1.0/bin/gcc-6
CXX=/usr/local/Cellar/gcc/6.1.0/bin/g++-6
SHLIB_CXXLD=/usr/local/Cellar/gcc/6.1.0/bin/g++-6
FC=/usr/local/Cellar/gcc/6.1.0/bin/gfortran-6
F77=/usr/local/Cellar/gcc/6.1.0/bin/gfortran-6
MAKE=make -j8

SHLIB_OPENMP_CFLAGS=-fopenmp
SHLIB_OPENMP_CXXFLAGS=-fopenmp
SHLIB_OPENMP_FCFLAGS=-fopenmp
SHLIB_OPENMP_FFLAGS=-fopenmp

最后,重新启动 R 或 RStudio 并从源代码重新安装包。

顺便说一下,在https://asieira.github.io/using-openmp-with-r-packages-in-os-x.html上写了一篇关于此的小博客文章。

于 2016-07-21T20:56:43.420 回答
3

好吧,我想通了。

创建一个新文件vi ~/.R/Makevars 并将其放入

CC=clang-omp
CXX=clang-omp++
CXX1X=clang-omp++
SHLIB_OPENMP_CFLAGS=-fopenmp
SHLIB_OPENMP_CXXFLAGS=-fopenmp
SHLIB_OPENMP_FCFLAGS=-fopenmp
SHLIB_OPENMP_FFLAGS=-fopenmp

然后安装 install.packages("xgboost", repos="http://dmlc.ml/drat/", type = "source")

如果这不起作用,请使用 brew 安装 clang 和 gcc

brew reinstall clang-omp

然后运行上面的代码。

于 2016-03-29T01:33:06.903 回答
0

这似乎在最近的 xgboost 提交 [1] 中得到修复

[1] https://github.com/dmlc/xgboost/commit/d754ce7dc19e0d7c7465999d464e13f9bf21b40d

于 2016-08-23T19:01:54.673 回答