給你的大殺器裝備核彈——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
- 如果命令報錯,別手動輸入,直接複製去執行,還有問題那就繼續往下看我的方法
接下來是我自己的方法
- 克隆最新的xgboost原始碼
git clone --recursive https://github.com/dmlc/xgboost
生成構建檔案
開啟桌面的CMake (cmake-gui)
分別選擇原始碼目錄以及原始碼目錄下的build資料夾(沒有就新建一個)
點選Configure
,選擇Yes
,然後選擇自己的VS版本,點選Finish
結束
然後你會發現一片紅,這不是錯誤的意思,不用擔心,把USE_CUDA勾上
再點選Configure
啥也不管再來Configure
!! 發現沒有紅的了,就說明Configure結束了
點選Generate
,你會發現build
資料夾下多了vs的工程檔案
開始構建
在CMake GUI中,點選Open Project
,會自動呼叫VS開啟工程,直接右鍵生成解決方案
等待就好了,大概十分鐘左右
中途會出現各種錕斤拷,不必理會,只要最後不報錯就成
安裝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,至於多卡一起跑,我暫時還沒裝置,以後有機會再更新吧
總結
大殺器配上核彈,效果棒極了!