【问题标题】:Parallel execution fails for XGBoost with R and OS-X使用 R 和 OS-X 的 XGBoost 并行执行失败
【发布时间】:2018-08-30 21:38:50
【问题描述】:

xgboost 无法与 R 3.5.1 和 OS X 10.12.6 并行工作。我关注了这个instructions。编译C代码时好像是openMP OK,但是在R中编译时,找不到-fopenmp选项,并行执行不起作用。

Makevars

cat ~/.R/Makevars 
CC=gcc-7
CXX=g++-7
CXX1X=g++-7
CXX11=g++-7
CXX14=g++-7
CXX17=g++-7

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

我也试过 gcc-8 没有成功。

实验:

  • 编译 C 代码:xgboost$ make -j4 => 似乎可以工作,-fopenmp 包含编译器选项:g++-7 -c -DDMLC_LOG_CUSTOMIZE=1 -std=c++11 -Wall -Wno-unknown-pragmas -Iinclude -Idmlc-core/include -Irabit/include -I/include -O3 -funroll-loops -msse2 -fPIC -fopenmp src/common/common.cc -o build/common/common.o

  • 来自来源:R-package$ R CMD INSTALL . => checking whether OpenMP will work in a package... nog++-7 -std=gnu++11 -I"/usr/local/Cellar/r/3.5.1/lib/R/include" -DNDEBUG -I../..//include -I../..//dmlc-core/include -I../..//rabit/include -I../../ -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=1 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/opt/gettext/include -I/usr/local/opt/readline/include -I/usr/local/include -fPIC -g -O2 -c xgboost_R.cc -o xgboost_R.o

R 似乎没有考虑 Makevars 选项中的 SHLIB_OPENMP_*。有什么想法吗?

【问题讨论】:

    标签: r gcc parallel-processing openmp xgboost


    【解决方案1】:

    感谢 hcho3 (https://github.com/dmlc/xgboost/issues/2503)

    mkdir build
    cd build
    cmake .. -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7 -DR_LIB=ON
    make
    make install
    

    最后一次 make 安装可能会失败。如果发生这种情况,请运行

    # still inside build/
    cd R-package
    mv src/libxgboost.dylib src/xgboost.so # in my case 'mv src/xgboost.dylib src/xgboost.so'
    R CMD INSTALL .
    

    他的解释: 到目前为止,我在修改 Makevars 方面没有取得多大成功,因为它被 R-package 中的配置脚本覆盖。在应用自定义构建选项时,IMO 更容易使用 CMake,它将在 R 包中生成配置和其他构建文件(因此在 build/ 下生成 R-package 目录)到目前为止我看到的唯一缺陷与 CMake 的不同之处在于它生成名为 libxgboost.dylib 的共享库,而 R 需要 xgboost.so

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 2013-01-08
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2013-04-07
      • 1970-01-01
      相关资源
      最近更新 更多