注:这其实是一次踩坑经历,为什么呢?因为我编译源码的目的是开启Nvidia显卡的cuda加速。但是当我编译安装完源码后,发现XGBoost其实默认pip安装的版本就支持在双显卡的笔记本下,使用Nvidia独立显卡跑计算的,根本用不着自己编译。具体的查看方法很简单:
跑一下xgboost官方的benchmark文件,在跑的过程中打开任务管理器,到“性能”标签下,查看GPU1 - cuda详情:
但是,既然已经做成功了,而且关于其源码编译的过程似乎很少有人写,就记录下来,以防有人需要,也可以一起交流。
本文讲的主要是如何使用XGBoost官方Github上的开源代码,自己进行编译并安装的过程,可能适用于通过pip安装的xgboost无法使用GPU加速的小伙伴,或者是想要使用最新版本XGBoost的小伙伴(例如:Nightly版本)。
如果只是想要安装CUDA,开启GPU加速的小伙伴,可以直接查看我另一篇文章:机械革命s1(双显卡笔记本)安装cuda10.2并用pycuda、xgboost测试GPU计算效率
编译XGBoost源码所需的环境有:
CUDA
Visual Studio,with C++桌面开发组件(网上有小伙伴说还需要C++所有移动开发组件,我这边实测也不是必须)
CMake(安装Visual Studio的时候一定会自动安装)
其实基本就是按照XGBoost官网文档的流程走了一遍:Installation Guide
看到网上很多文章说官网文档没法编译成功的,或者缺失dll文件的,其实文档里都有写,我这里就用中文再梳理一遍。
基本流程分为4步:①从Github下载源码,②CMake配置,③编译并获得dll文件,④安装
很简单了直接clone,源码存放目录无所谓,桌面也可以,最后反正都会安装进site-packages里
git clone --recursive https://github.com/dmlc/xgboost
# 进入源码目录
cd xgboost
# 新建build文件夹,并使用Visual Studio配置,这里我的是VS2019
mkdir build
cd build
# -DUSE_CUDA就是生成支持GPU加速的版本
cmake .. -G"Visual Studio 16 2019" -DUSE_CUDA=ON
如果你的CMake不在PATH中的话,可能会出现“'cmake' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的错误,如果不想把它添加进PATH的话,直接输入它的绝对路径即可,VS2019在默认安装下的路径应该是:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake" .. -G"Visual Studio 16 2019" -DUSE_CUDA=ON
完成上一步后,在build文件夹里应该会出现一个 xgboost.sln 文件,使用Visual Studio打开它,然后生成解决方案。
这一步可能需要花点时间,官网文档提到可以使用多核加速,不用客户端生成,直接使用命令:
cmake --build . --target xgboost --config Release -- /MP
(这里我没有尝试这句代码,有兴趣的小伙伴可以自己试下)
万事大吉,不出意外的话,你的 xgboost.dll 文件应该会自动生成在 \xgboost\lib 文件夹里,将它移动到 \xgboost\python-packages\xgboost 这个目录里,然后用命令行进入python-packages,输入 python setup.py install 进行安装即可
cd python-packages
python setup.py install
最后,基本上就是这样了。后来用我的MX150破显卡测试了一下官方基准,使用自己编译的xgboost-1.0.0 Snapshot版本反倒还比0.9.0版本,要慢了3秒钟左右(tree_method = gpu_hist),0.9.0版本是48秒多,1.0.0版本用了51秒……
a. 除了使用Visual Studio,也可以使用MinGW进行编译,详见官方文档:Compile Xgboost using MinGW
b. 想要我编译好的xgboost.dll文件
上传到了蓝奏云,请自取:https://www.lanzous.com/i8a4a7e
注意我的编译环境为:cuda 10.2,Visual Studio 16 2019。
c. 我的 Visual Studio 版本不是 2019版 怎么办?
可用的Generators如下,比如如果你是VS2015,win64架构,则需要填入"Visual Studio 15 2017 Win64":
Generators
* Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
Use -A option to specify architecture.
Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
Optional [arch] can be "Win64" or "ARM".
Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
Optional [arch] can be "Win64" or "ARM".
Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
Optional [arch] can be "Win64" or "ARM".
Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
Optional [arch] can be "Win64" or "ARM".
Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.
Optional [arch] can be "Win64" or "IA64".
Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.
Optional [arch] can be "Win64" or "IA64".
Borland Makefiles = Generates Borland makefiles.
NMake Makefiles = Generates NMake makefiles.
NMake Makefiles JOM = Generates JOM makefiles.
MSYS Makefiles = Generates MSYS makefiles.
MinGW Makefiles = Generates a make file for use with
mingw32-make.
Unix Makefiles = Generates standard UNIX makefiles.
Green Hills MULTI = Generates Green Hills MULTI files
(experimental, work-in-progress).
Ninja = Generates build.ninja files.
Watcom WMake = Generates Watcom WMake makefiles.
CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.
CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.
CodeBlocks - NMake Makefiles JOM
= Generates CodeBlocks project files.
CodeBlocks - Ninja = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
CodeLite - MinGW Makefiles = Generates CodeLite project files.
CodeLite - NMake Makefiles = Generates CodeLite project files.
CodeLite - Ninja = Generates CodeLite project files.
CodeLite - Unix Makefiles = Generates CodeLite project files.
Sublime Text 2 - MinGW Makefiles
= Generates Sublime Text 2 project files.
Sublime Text 2 - NMake Makefiles
= Generates Sublime Text 2 project files.
Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.
Sublime Text 2 - Unix Makefiles
= Generates Sublime Text 2 project files.
Kate - MinGW Makefiles = Generates Kate project files.
Kate - NMake Makefiles = Generates Kate project files.
Kate - Ninja = Generates Kate project files.
Kate - Unix Makefiles = Generates Kate project files.
Eclipse CDT4 - NMake Makefiles
= Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - MinGW Makefiles
= Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.