本文最后更新于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