記錄 windows 10 在Anaconda環境下安裝 LightGBM-GPU版本

<前言murmur>
2018/8在做趨勢舉辦的數據分析競賽時,隊友使用了xgboost 和 lightGBM做回歸分析測試,惟那時涉略不深,僅做安裝測試,還有測試結果知道boost tree效果似乎挺不錯的,直到最近自己在工作(研究)上,研究相關國外論文時,發現使用類似方法做預處理,並與其他神經網路學習方法的組合回歸分析,啟發一些方向的思考,才於這幾天深入了解lightGBM的理論架構與使用方式。
安裝CPU版本較為簡單,anaconda已經有現成的package可以用了。直接在anaconda的UI上處理即可,但是GPU版本就完全是另一回事啦,照官方介紹安裝,總是這裡錯那裡錯的,不是很順,有介於網路上的中文資源亦較少,所以就趁這一刻總算是debug完,執行順利的時候,來將這一套流程記錄下來供大家參考。


<環境介紹>
系統: windows 10 -64 bit
顯示卡Nvidia - gtx1060
python 3.6.7
anaconda 4.5.12

<選擇安裝方式>
使用Windows Command,不用MinGW或VS GUI安裝,避免冗餘的程式安裝造成麻煩及可用的SSD空間損失。


<<安裝流程>>
A.<安裝套件>
1. 先安裝最新版本的cmake:
https://cmake.org/download/
(1)選擇Binary distributions:platform裡的x64-installer(.msi安裝檔)比較省事,下載完後依照指示安裝,中間記得勾選add cmake to system path將路徑加到系統環境變數中。
(2)先到windows解除安裝應用程式裡,確認電腦裡是否有安裝就版本的cmake,若有就先移除,再安裝這個新版本。

2.安裝Microsoft VS build tools
https://visualstudio.microsoft.com/zh-hant/downloads/?rr=https%3A%2F%2Flightgbm.readthedocs.io%2Fen%2Flatest%2FInstallation-Guide.html
(1)選擇''其他工具與架構'',下載並安裝''適用於 Visual Studio 2017 的 Microsoft Visual C++ 可轉散發套件'',這樣就不用安裝visual studio 2017,可以避免掉龐大的等待下載和安裝時間,又耗盡資源空間了,不過如果已有安裝Visual Studio就沒這問題了。
(2)這裡很賊的是Microsoft官網裡Visual Studio 2017 工具底下的Build Tools for Visual Studio 2017似乎不是lightgbm文件所提的Build tools,比較像是VS的核心套件,讓你選擇要配合開發的專案安裝對應的VS區塊,早前在安裝tensorflow時,曾經被狠狠的騙過一次。
(3)安裝完需要重啟電腦,可以等到所有需要的東西安裝完再執行。

3.安裝OPENCL
會想用GPU版本,相信大部分的人都是知道自己已經有Nvidia的顯卡了,而這裡的Opencl安裝其實跟其他神經網路/深度學習的套件一樣,需依照Nvidia官網的流程安裝tookit及對應的驅動及程式,若在執行其他python深度學習專案時,已經安裝過CUDA toolkit並執行,則就無需再安裝了。(此段又是一個辛苦的複雜過程....若仍有需求可以詢問....)

4.安裝boost
https://sourceforge.net/projects/boost/files/boost-binaries/1.64.0/
基於64位元,選擇對應的boost_1_64_0-msvc-14.1-64.exe下載並安裝

B.<流程開始>
5.請記得依第2步需求重啟電腦。

6.首先打開Aanconda的Navigator,選擇自己已建置且欲安裝lightgbm的虛擬環境,並切換至enviroment在該虛擬環境下open terminal(或在開始選單搜尋anaconda,並以系統管理員開啟對應的command prompt)。

7.windows command依序輸入以下訊息設定環境及下載Lightgbm:
cd psuedo: any directory location you want to put the file at
Set BOOST_ROOT=C:\local\boost_1_64_0\
Set BOOST_LIBRARYDIR=C:\local\boost_1_64_0\lib64-msvc-14.0
git clone --recursive https://github.com/Microsoft/LightGBM
cd LightGBM
mkdir build
cd build
cmake -DCMAKE_GENERATOR_PLATFORM=x64 -DUSE_GPU=1 ..
cmake --build . --target ALL_BUILD --config Release
第1行請使用cd指令轉換到任何你後續想要存放lightgbm下載資料的位置。
第2.3行為boost參照的資料夾位置,請輸入剛剛第4步驟安裝boost所對應的資料夾位置,注意64位元版本,目前要將14.0改成14.1。
第4-7行從github下載lightgbm資料至當前所在資料夾。
第8-9行設定cmake使安裝時可順利連結gpu
(註1:)可以打開CMAKE的GUI,在where is the source code填入lightgbm資料夾位置,及where to build the binarys填入''lightgbm資料夾位置\build'',並確認USE_GPU是否打勾。

8.windows command依序輸入以下訊息安裝lightgbm:
在輸入前,先在anaconda中確認是否有依照lightgbm的需求,安裝setuptools、wheel、numpy、scipy、scikit-learn等套件,然後執行以下輸入
cd lightgbm資料夾位置\python-package
python setup.py install --gpu
等候安裝完成後,若無意外請輸入
conda list lightgbm
即可確認是否有安裝,且anaconda已抓到該Package的訊息

9. (在該虛擬環境下)開啟python編輯環境,執行測試:
值得注意的是,下載的lightgbm安裝資料裡有提供測試的檔案在:
lightgbm資料夾位置\examples裡
test.py(參考文獻4):
import lightgbm as lgb
import time

#讀取data資料
train_data = lgb.Dataset(r'LightGBM\examples\parallel_learning\binary.train')

#設定lightgbm參數,gpu版本測試
params = {'max_bin': 63,
'num_leaves': 255,
'learning_rate': 0.1,
'tree_learner': 'serial',
'task': 'train',
'is_training_metric': 'false',
'min_data_in_leaf': 1,
'min_sum_hessian_in_leaf': 100,
'ndcg_eval_at': [1,3,5,10],
'sparse_threshold': 1.0,
'device': 'gpu',
'gpu_platform_id': -1,
'gpu_device_id': -1}
t0 = time.time()

#執行模型訓練
gbm = lgb.train(params, train_set=train_data, num_boost_round=10,
valid_sets=None, valid_names=None,
fobj=None, feval=None, init_model=None,
feature_name='auto', categorical_feature='auto',
early_stopping_rounds=None, evals_result=None,
verbose_eval=True,
keep_training_booster=False, callbacks=None)
t1 = time.time()
#顯示執行時間
print('gpu version elapse time: {}'.format(t1-t0))

#設定lightgbm參數,cpu版本
params = {'max_bin': 63,
'num_leaves': 255,
'learning_rate': 0.1,
'tree_learner': 'serial',
'task': 'train',
'is_training_metric': 'false',
'min_data_in_leaf': 1,
'min_sum_hessian_in_leaf': 100,
'ndcg_eval_at': [1,3,5,10],
'sparse_threshold': 1.0,
'device': 'cpu'
}
t0 = time.time()

#執行模型訓練
gbm = lgb.train(params, train_set=train_data, num_boost_round=10,
valid_sets=None, valid_names=None,
fobj=None, feval=None, init_model=None,
feature_name='auto', categorical_feature='auto',
early_stopping_rounds=None, evals_result=None,
verbose_eval=True,
keep_training_booster=False, callbacks=None)
t1 = time.time()

#顯示執行時間

print('cpu version elapse time: {}'.format(t1-t0))

若沒有出現import錯誤,順利執行。
那就表示成功囉!
執行結果:


從結果來看....大概是使用的資料集太小,而gpu版本還要呼叫對應的程式,造成執行時間居然還輸cpu版本。


<參考文獻>
1.官方文件-Installation Guide-GPU version:
https://lightgbm.readthedocs.io/en/latest/Installation-Guide.html#build-gpu-version

2.官方文件-GPU Windows Compilation:
https://lightgbm.readthedocs.io/en/latest/GPU-Windows.html

3.官方github-https://github.com/Microsoft/LightGBM/tree/master/python-package

4.gpu版本安裝測試驗證:https://blog.csdn.net/lccever/article/details/80535058

留言

張貼留言

熱門文章