如何使用 OpenMP 编译使 R 包 xgboost 在 OS X 中并行?
How to make R package xgboost parallel in OS X with OpenMP compilation?
我在 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
但是,我无法运行
brew install clang-omp
或
brew install gcc --without-multilib
sudo 也不起作用
谢谢
好的,我明白了。
创建一个新文件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
然后运行上面的代码。
不幸的是,之前选择的答案现在已经过时了。 clang-omp
包在自制软件中不再可用。所以这对我有用。
首先,在 shell:
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 上写了一篇关于此的小博客 post。
这似乎已在最近的 xgboost 提交中修复 [1]
[1] https://github.com/dmlc/xgboost/commit/d754ce7dc19e0d7c7465999d464e13f9bf21b40d
我在 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
但是,我无法运行
brew install clang-omp
或
brew install gcc --without-multilib
sudo 也不起作用 谢谢
好的,我明白了。
创建一个新文件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
然后运行上面的代码。
不幸的是,之前选择的答案现在已经过时了。 clang-omp
包在自制软件中不再可用。所以这对我有用。
首先,在 shell:
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 上写了一篇关于此的小博客 post。
这似乎已在最近的 xgboost 提交中修复 [1]
[1] https://github.com/dmlc/xgboost/commit/d754ce7dc19e0d7c7465999d464e13f9bf21b40d