XGBoost源码编译教程,以及编译后.dll文件下载(with cuda 10.2)

注:这其实是一次踩坑经历,为什么呢?因为我编译源码的目的是开启Nvidia显卡的cuda加速。但是当我编译安装完源码后,发现XGBoost其实默认pip安装的版本就支持在双显卡的笔记本下,使用Nvidia独立显卡跑计算的,根本用不着自己编译。具体的查看方法很简单:

跑一下xgboost官方的benchmark文件,在跑的过程中打开任务管理器,到“性能”标签下,查看GPU1 - cuda详情:

XGBoost源码编译教程,以及编译后.dll文件下载(with cuda 10.2)_第1张图片XGBoost源码编译教程,以及编译后.dll文件下载(with cuda 10.2)_第2张图片

但是,既然已经做成功了,而且关于其源码编译的过程似乎很少有人写,就记录下来,以防有人需要,也可以一起交流。

1. 引言

本文讲的主要是如何使用XGBoost官方Github上的开源代码,自己进行编译并安装的过程,可能适用于通过pip安装的xgboost无法使用GPU加速的小伙伴,或者是想要使用最新版本XGBoost的小伙伴(例如:Nightly版本)。

如果只是想要安装CUDA,开启GPU加速的小伙伴,可以直接查看我另一篇文章:机械革命s1(双显卡笔记本)安装cuda10.2并用pycuda、xgboost测试GPU计算效率

2. 环境准备

编译XGBoost源码所需的环境有:

CUDA

Visual Studio,with C++桌面开发组件(网上有小伙伴说还需要C++所有移动开发组件,我这边实测也不是必须)

CMake(安装Visual Studio的时候一定会自动安装)

3. 方法

其实基本就是按照XGBoost官网文档的流程走了一遍:Installation Guide

看到网上很多文章说官网文档没法编译成功的,或者缺失dll文件的,其实文档里都有写,我这里就用中文再梳理一遍。

基本流程分为4步:①从Github下载源码,②CMake配置,③编译并获得dll文件,④安装

3.1 下载源码

很简单了直接clone,源码存放目录无所谓,桌面也可以,最后反正都会安装进site-packages里

git clone --recursive https://github.com/dmlc/xgboost

3.2 使用CMake配置build

# 进入源码目录
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

3.3 使用Visual Studio编译并获取xgboost.dll文件

完成上一步后,在build文件夹里应该会出现一个 xgboost.sln 文件,使用Visual Studio打开它,然后生成解决方案。

XGBoost源码编译教程,以及编译后.dll文件下载(with cuda 10.2)_第3张图片

这一步可能需要花点时间,官网文档提到可以使用多核加速,不用客户端生成,直接使用命令:

cmake --build . --target xgboost --config Release -- /MP

(这里我没有尝试这句代码,有兴趣的小伙伴可以自己试下)

3.4 安装

万事大吉,不出意外的话,你的 xgboost.dll 文件应该会自动生成在 \xgboost\lib 文件夹里,将它移动到 \xgboost\python-packages\xgboost 这个目录里,然后用命令行进入python-packages,输入 python setup.py install 进行安装即可

cd python-packages
python setup.py install

4. 总结

最后,基本上就是这样了。后来用我的MX150破显卡测试了一下官方基准,使用自己编译的xgboost-1.0.0 Snapshot版本反倒还比0.9.0版本,要慢了3秒钟左右(tree_method = gpu_hist),0.9.0版本是48秒多,1.0.0版本用了51秒……

5. 常见问题

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. 

 

你可能感兴趣的:(人工智能,Python,自然语言处理)