Linux下安装Xgboost并支持GPU

下载源码

git clone --recursive https://github.com/dmlc/xgboost
#若安装CPU版,直接执行以下命令
cd xgboost
make -j4

支持GPU

正常流程

$ cd xgboost
$ mkdir build
$ cd build
$ cmake .. -DUSE_CUDA=ON

切记:不要返回上一层目录(不要执行cd …)

直接执行:

$ make -j4

报错:nvcc fatal : redefinition of argument ‘std’

原因:编译参数中重复出现 -std=c++11

上网搜索的主要原因是:cmake版本新旧导致。

查看本机cmake版本

$ cmake --version
cmake version 3.17.0-rc2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

本机cmake版本是3.17

查看CMakeList.txt要求版本:

$ vim CMakeLists.txt

结果

cmake_minimum_required(VERSION 3.12)

要求3.12以上,按道理符合要求

查找报错原因

$ rm -rf * #删除build路径下的所有文件和文件夹
$ cmake .. -DUSE_CUDA=ON #重新cmake
$ make -j4 VERBOSE=1 #make同时打印信息

确认报错原因

[ 76%] Building CUDA object src/CMakeFiles/objxgboost.dir/c_api/c_api.cu.o
cd /home/zhendongwu/molecule/xgboost/build/src && /usr/local/cuda-10.0/bin/nvcc  -ccbin=/usr/local/bin/c++ -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_BUILTIN_PREFETCH_PRESENT=1 -DXGBOOST_MM_PREFETCH_PRESENT=1 -DXGBOOST_USE_CUDA=1 -D_MWAITXINTRIN_H_INCLUDED -I/home/zhendongwu/molecule/xgboost/cub -I/home/zhendongwu/molecule/xgboost/include -I/home/zhendongwu/molecule/xgboost/dmlc-core/include -I/home/zhendongwu/molecule/xgboost/rabit/include  -O3 -DNDEBUG -Xcompiler=-fPIC   --expt-extended-lambda --expt-relaxed-constexpr -lineinfo --std=c++11 --generate-code=arch=compute_35,code=sm_35 --generate-code=arch=compute_50,code=sm_50 --generate-code=arch=compute_52,code=sm_52 --generate-code=arch=compute_60,code=sm_60 --generate-code=arch=compute_61,code=sm_61 --generate-code=arch=compute_70,code=sm_70 --generate-code=arch=compute_75,code=sm_75 --generate-code=arch=compute_75,code=compute_75 -Xcompiler=-fopenmp -std=c++11 -x cu -c /home/zhendongwu/molecule/xgboost/src/c_api/c_api.cu -o CMakeFiles/objxgboost.dir/c_api/c_api.cu.o
nvcc fatal   : redefinition of argument 'std'
make[2]: *** [src/CMakeFiles/objxgboost.dir/c_api/c_api.cu.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory `/home/zhendongwu/molecule/xgboost/build'
make[1]: *** [src/CMakeFiles/objxgboost.dir/all] Error 2
make[1]: Leaving directory `/home/zhendongwu/molecule/xgboost/build'
make: *** [all] Error 2

从信息中可以看出,确实存在2个 -std=c++11

解决办法

找到 xgboost/src/ CMakeList.txt文件

$ vim ../src/CMakeLists.txt

删除带有-std=c++11的那一行

$<$<AND:$<NOT:$<CXX_COMPILER_ID:MSVC>>,$<COMPILE_LANGUAGE:CUDA>>:--std=c++11>

重新编译,顺利通过

安装Python支持

$ cd python-package
$ sudo python setup.py install

查看安装包

$ pip list

xgboost                            1.1.0-SNAPSHOT

大功告成,可以使用GPU支持的 Xgboost 了 !

发布了1 篇原创文章 · 获赞 1 · 访问量 23

猜你喜欢

转载自blog.csdn.net/weixin_43836548/article/details/105216451