本文最後更新於2017/12/28,看起來很多,實際安裝命令很少,多數內容在總結安裝過程中可能出現的問題。
各版本情況:
mac:10.13.2
XGBoost:0.6
gcc:7.2
關於xgboost的安裝我們可以參考官方文檔:Installation Guide,但是使用mac的同學要注意,默認我們使用pip安裝的xgboost並不是多線程的,包括未安裝gcc直接從源碼編譯的也不是多線程的。下面我們介紹多線程版本的xgboost在high sierra(蘋果於2017.9.20推出)上的安裝。
1下載XGBoost源碼
git clone --recursive https://github.com/dmlc/xgboost
如果不需要使用多線程版本,則運行如下命令即可完成編譯。
cd xgboost; cp make/minimum.mk ./config.mk; make -j4
2 安裝gcc
# 運行brew安裝gcc,默認是7.2(2017.12.28)
# 需要時間較長,耐心等待
brew install gcc
注意,如果看過較久之前的安裝博客發現通常在gcc後邊加上
--without-multilib
,字面意義感覺是不使用多線程,爲什麼會這樣?因爲gcc的multilib會和mac系統的openMP衝突,所以以前安裝gcc的時候需要制指定這個參數,不過從gcc7不需要了。如果編譯的時候讓gcc使用openMP,需要加上-fopenmp參數。
如果遇到錯誤看這裏:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
這個問題通常在mac系統一更新就出現,不侷限這裏,很多情況會觸發這個問題,使用xcode-select --install
來安裝插件即可。Error: /usr/local must be writable!
或者提示/usr/local
無權限,在high sierra之前的版本sudo chown -R $(whoami) /usr/local
可以解決,但是更新後無法解決。可以嘗試兩個方法:
- 一個是
sudo chown -R $(whoami) $(brew --prefix)/*
更改權限(部分人可以解決) - 另一個是使用這條命令重新安裝brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
,基本上都可以解決。詳細說明見這裏
- 一個是
3 編譯
cd xgboost
# 拷貝配置文件
cp make/minimum.mk ./config.mk;
這裏我們要使用gcc來完成編譯,雖然在上一步中我們已經下載了,但是我們並沒有使用。如果你直接使用make -4j
來編譯,你會遇到-fopenmp
的錯誤。因爲,mac系統本身的gcc其實是clang。可以在終端輸入gcc
看提示信息或者輸入gcc -v
來查看。那麼我們怎麼使用,編輯你拷貝過來的config.mk
文件。將其中做如下更改:
# export CC = gcc
# export CXX = g++
# ===>
export CC = gcc-7 # 注意之前這兩行是註釋掉的,需要去掉註釋。
export CXX = g++-7
或者使用ls /usr/local/bin/*
,找到gcc和g++的位置,讓CC和CXX等於絕對路徑。
然後使用make -j4
編譯即可。
4 添加進python環境
# 使用如下命令添加進當前python環境
# 當前目錄在xgboost下
cd python-package
python setup.py install
5 使用多線程
你以爲安裝完了就完了,並沒有。mac版你需要手動指定nthread
這個參數,使用-1並不會幫你自動選擇最優的線程數量。(2017.12.28是這個樣子)
Reference