2016-02-29 52 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