1. 程式人生 > >給你的大殺器裝備核彈——Windows下安裝使用GPU版XGBoot詳細參考指南

給你的大殺器裝備核彈——Windows下安裝使用GPU版XGBoot詳細參考指南

很早就知道XGBoost支援GPU了,不過一直沒有配置,一方面是GPU版本的xgb配置,中文安裝教程根本找不到,還有就是支援GPU的xgb還不是穩定版的。
花了兩天時間踩遍各種坑,特意整理好這個教程,方便各位。

安裝CUDA

這應該算是第一個坑,我的電腦在裝tensorflow的時候就已經配置好CUDA了,看了下官方文件

Windows requirements for GPU build: only Visual C++ 2015 or 2013 with CUDA v8.0 were fully tested. Either install Visual C++ 2015 Build Tools separately, or as a part of Visual Studio 2015.

剛好我電腦上已經裝好了VS2015還有CUDA v8.0,結果在下面的構建過程中炸了,各種嘗試後,裝了最新版的CUDA v9.0,再也沒有出過問題。

構建XGBoost

先說下官網的教程

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

在根目錄下新建資料夾build,並進入該資料夾執行cmake相關命令

mkdir build
cd build
cmake .. -G"Visual Studio 14 2015 Win64" -DUSE_CUDA=ON

然後cmake構建

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

最後安裝python包
進入python-package目錄安裝

cd ..\python-package
python setup.py install

注意

  • 根據你電腦的VS版本來更改Visual Studio 14 2015 Win64,比如你電腦上裝的是vs2013的,就應該改為Visual Studio 12 2013 Win64
  • 如果命令報錯,別手動輸入,直接複製去執行,還有問題那就繼續往下看我的方法

接下來是我自己的方法

  1. 克隆最新的xgboost原始碼
git clone --recursive https://github.com/dmlc/xgboost
  1. 生成構建檔案
    開啟桌面的CMake (cmake-gui)
    分別選擇原始碼目錄以及原始碼目錄下的build資料夾(沒有就新建一個)

    點選Configure,選擇Yes,然後選擇自己的VS版本,點選Finish結束

    然後你會發現一片紅,這不是錯誤的意思,不用擔心,把USE_CUDA勾上

    再點選Configure

    啥也不管再來Configure!! 發現沒有紅的了,就說明Configure結束了

    點選Generate,你會發現build資料夾下多了vs的工程檔案

  2. 開始構建
    CMake GUI中,點選Open Project,會自動呼叫VS開啟工程,直接右鍵生成解決方案等待就好了,大概十分鐘左右

    中途會出現各種錕斤拷,不必理會,只要最後不報錯就成

  3. 安裝Python包
    進入python-package目錄

cd ..\python-package
python setup.py install

開跑

官方提供了一個基準(Benchmarks)

Training time time on 1,000,000 rows x 50 columns with 500 boosting iterations and 0.25/0.75 test/train split on i7-6700K CPU @ 4.00GHz and Pascal Titan X.

i7-6700K的CPU(4.00GHz)和Pascal Titan X,資料集大小為 1,000,000行 x 50列,按0.25/0.75劃分測試集和訓練集,訓練時間如下

tree_method Time (s)
gpu_hist 13.87
hist 63.55
gpu_exact 161.08
exact 1082.20

我拿我自己的機器嘗試了一下,E3-1230V5 CPU (3.40GHz),GTX 1060 GPU
tests\benchmark目錄下
分別執行

python benchmark.py --tree_method gpu_hist
python benchmark.py --tree_method hist
python benchmark.py --tree_method gpu_exact
python benchmark.py --tree_method exact

訓練時間如下

tree_method Time (s)
gpu_hist 23.32
hist 57.34
gpu_exact 237.32
exact 689.52

吃驚!CPU效能爆炸!
(⊙﹏⊙) 我的E3咋這麼快呢。。。
暫時不管了,反正快也不是啥壞事。。。。

總的來說,訓練時間縮短了不少

順帶一提,跑的過程中如果沒有報錯,那說明你安裝是成功的,要是炸了,重頭看看哪裡出了問題吧~

使用方法

大體上和以前沒區別,只要把 tree_method 改為 gpu_hist 或者 gpu_exact 就行
兩者的區別可以簡單歸為:gpu_exact準確,但耗時耗記憶體,gpu_hist速度快,但不那麼準確

param['gpu_id'] = 0
param['tree_method'] = 'gpu_hist' # or 'gpu_exact'

如果有多個GPU,想要讓指定GPU跑,那就改下gpu_id,至於多卡一起跑,我暫時還沒裝置,以後有機會再更新吧

總結

大殺器配上核彈,效果棒極了!

參考