簡體   English   中英

帶有R和OS-X的XGBoost的並行執行失敗

[英]Parallel execution fails for XGBoost with R and OS-X

xgboost不能與R 3.5.1和OS X 10.12.6並行工作。 我遵循了此指示 編譯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包含-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... no然后g++-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_* 任何想法?

感謝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中的configure腳本覆蓋。 在應用自定義構建選項時,使用CMake可以使IMO容易得多,CMake可以在R包中生成配置文件和其他構建文件(因此,在build /下生成R-package目錄)與CMake一起使用的是它生成了名為libxgboost.dylib的共享庫,而R期望xgboost.so

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM