2016-02-29 93 views
1

我在使用R.和xgb.cv但是xgboost,它不工作并行如何使R包xgboost在OS X中与OpenMP编译并行?

我的示例代码如下

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也没有工作 感谢

+0

像你得到一个错误,它不工作,或者不使用8个核的工作?你在Mac或Windows? – TBSRounder

+0

我正在使用mac电脑 –

回答

4

不幸的是之前选择的答案现在已过时。 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上写了一篇小博客文章。

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安装铛和gcc

brew reinstall clang-omp

然后运行上面的代码。

+0

该软件包已不再可用于自制软件,因为该项目已迁移到llvm.org。 – asieira