OS X で XGBoost & xgboost4j をビルドする手順 2016-09-27 版

今年の 3 月ごろ に、OS X 上で XGBoost をビルドする方法についてメモを残していましたが、最新版の XGBoost ではビルド方法がまたちょこっとアップデートされているようなので、改めてメモを残しておきます。

XGBoost のビルド

マルチスレッド非対応版の XGBoost がビルドできれば構わない場合

こちらは Building on OSX - Installation Guide に書かれているとおり、

git clone --recursive https://github.com/dmlc/xgboost
cd xgboost
cp make/minimum.mk ./config.mk
make -j4

とすれば OK です (以前の手順と変わりありません)。

マルチスレッド対応の XGBoost をビルドしたい場合

こちらも基本的には 以前の手順 から大きく変わってはいませんが、要求されている gcc のバージョンが 5.x から 6.x にアップグレードしていることに注意が必要です (5.x 以前や clang を利用していると、コンパイルに失敗します)。 既存の環境に gcc-6 がインストールされていなければ、事前に Homebrew などでインストールしておきましょう。

手順をまとめると、以下になります。

# gcc 6.x を Homebrew 経由でインストールしておく
# (古い gcc を既にインストールしていたら、brew upgrade gcc --without-multilib とする)
brew update
brew install gcc --without-multilib

git clone --recursive https://github.com/dmlc/xgboost
cd xgboost

# gcc-6 / g++-6 を利用するように明示した config.mk を生成して make する
cat make/config.mk | sed -e 's/# export CC = gcc/export CC = gcc-6/' | sed -e 's/# export CXX = g++/export CXX = g++-6/' >./config.mk
make -j4

なお、ドキュメントには

NOTE: If you use OSX El Capitan, brew installs gcc the latest version gcc-6. So you may need to modify Makefile#L46 and change gcc-5 to gcc-6.

と書かれていますが、すでにその Makefile は こちらの commit で修正されているので無視してしまっていいでしょう。

xgboost4j のビルド

xgboost4j のビルドは、以前よりもさらに楽になりました。JAVA_HOME の環境変数が定義されていれば、jvm-packages ディレクトリにて mvn package を実行するだけ、となります。

# もし環境変数 JAVA_HOME が定義されていないようであれば、以下のコマンドなどで定義しておく
export JAVA_HOME=`/usr/libexec/java_home`

# XGBoost のビルドを済ませた状態で、mvn package する
cd jvm-packages/
mvn package

なお、OpenJDK を使って mvn package を実行すると、テストケースの実行で以下のように SEGV で落ちてしまうことがあるので、できるかぎり Oracle JDK を使うことをおすすめします。

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fff909ffd7c, pid=52058, tid=0x000000000000f903
#
# JRE version: OpenJDK Runtime Environment (8.0_112-b69) (build 1.8.0_112-release-b325)
# Java VM: OpenJDK 64-Bit Server VM (25.112-b325 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# C  [libsystem_c.dylib+0x33d7c]  __numeric_load_locale+0x204
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/atsushi.komiya/tmp/xgboost/jvm-packages/xgboost4j-spark/hs_err_pid52058.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#