Windows下編譯xgboost的C++原始碼(方便vs執行的)
(作者:陳玓玏)
1、 下載原始碼:
網址:https://github.com/dmlc/xgboost ,最好不要直接下載zip,而是克隆,因為直接下載會下載不到xgboost依賴的dmlc-core和rabbit等庫,導致編譯失敗。克隆的好方法是通過git,Windows版的git下載地址:https://gitforwindows.org/
下載好git後,開啟git bash,輸入:
$ git clone --recursive https://github.com/dmlc/xgboost $ git init --初始化一個空的本地倉庫 $ git submodule init --對子模組初始化
–recursive可以幫我們把依賴庫也下載下來。並且在輸入git submodule init前一定要先輸入git init,不然會報錯:fatal: not a git repository (or any of the parent directories): .git.
2、安裝cmake
如果想用vs執行原始碼,需要先產生sln格式的解決方案,所以我們需要一個神器叫cmake。下載地址:https://cmake.org/download/ 。我下的是圖中紅線畫出的版本: 接著是傻瓜式安裝,不過在選擇是否把cmake加入到系統變數中時選擇是。 安裝完之後記得重啟,否則不能使用cmake。
3、編譯原始碼
開始跟著xgboost官方文件 https://xgboost.readthedocs.io/en/latest/build.html 中的Compile XGBoost with Microsoft Visual Studio部分操作: 右鍵開始,點選執行,輸入cmd,由此開啟windows命令列。 開啟命令列之後,cd到xgboost資料夾下,逐行輸入以下命令:
$ mkdir build
$ cd build
$ cmake .. -G"Visual Studio 12 2013 Win64"
最後一句話要注意一下,12 2013指的是你所用的vs的版本號,所以要對應,比如我用的是2017版,這裡也需要把2013改為2017,否則就會報錯。 這句話到底怎麼改,看下圖:
4、執行xgboost
用vs開啟build資料夾中的xgboost.sln檔案。
3.開啟xgboost.sln工程,接下來部分介紹如何執行cli_main.cc檔案3.1 找到碼源的xgboost\demo\binary_classification目錄 cmd下執行下面命令生成資料 python mapfeat.py python mknfold.py agaricus.txt 1 其中mushroom.conf是要作為cli_main.cc的主函式引數傳入的(其中資料路徑的引數改成絕對路徑不加引號) 3.2開啟vs2013工程右鍵xgboost專案->屬性->配置屬性->除錯->命令列引數:mushroom.conf的絕對路徑 3.3程式中打斷點,debug執行xgboost專案(注意只執行xgboost,不要debug solution中的其他專案),至此就可以單步執行C++碼源了!!
這裡介紹的是怎麼執行binary_classification模型,其實我還想知道怎麼去執行其他的模型,比如多分類,經過一番折騰,發現這些命令就藏在D:\Users\chendile\Documents\Visual Studio 2017\xgboost\demo\binary_classification\runexp.sh檔案中,用記事本開啟就能看到了。這個檔案是shell指令碼,在linux上就能直接運行了,生成訓練集測試集、訓練模型、預測模型這些命令都已經寫好了。但是在windows下稍微麻煩些,如果想知道這個檔案裡每一步在做什麼,就看這個資料夾裡的readme檔案即可,其他的模型demo也是類似的方法來看。5、可能出現的錯誤
我在嘗試單步執行過程中出現了一個錯誤: 一般這種錯誤發生的原因是環境的不相容,即電腦用的是64位的,而軟體還是32位的環境。我第一個想到的解決方案是把軟體的環境改成64位的,找到一個方案: https://blog.csdn.net/u010452239/article/details/70238105/
如果你的dll、計算機、軟體環境都已經是64位的了,但是無法單步執行,檢查你的vs的配置項是否為release,因為只有配置項是debug的時候,我們才能進行單步除錯。我的這個問題也還沒解決,有解決了的小夥伴,可以留言分享你的方法,不勝感激。
參考文章: