1. 程式人生 > >Windows下編譯xgboost的C++原始碼(方便vs執行的)

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,否則就會報錯。 這句話到底怎麼改,看下圖: 在這裡插入圖片描述

如果你用的vs版本是2017,那麼你需要把最後一句話改成cmake … -G"Visual Studio 15 2017 Win64"。 編譯成功的標準就是:命令列視窗會提示你成功了,並且lib資料夾下會出現xgboost.dll檔案,並且build資料夾下會出現xgboost.sln檔案,有了這個檔案才能在vs上執行。

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的時候,我們才能進行單步除錯。我的這個問題也還沒解決,有解決了的小夥伴,可以留言分享你的方法,不勝感激。

參考文章: