まず、LightGBMとはMicrosoftが開発した高速な勾配ブースティング木が実行可能なものです。同様のものではXGBoostが有名らしいですが、それよりも数倍高速という話があり今回使ってみることにしました。
ただ、使ってみるにあたり色々とエラーが起こって大変だったので備忘録として残しておきます。。
まずpip install lightgbm
でインストールして行ったところ下記のエラーが出るところが始まりでした。
OSError: dlopen(/Users/ldap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so, 6): Library not loaded: /usr/local/opt/gcc/lib/gcc/7/libgomp.1.dylib
Referenced from: /Users/ldap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so
Reason: image not found
とりあえずgcc環境については何もした記憶がなかったので、早速brewでインストールし用途したところ、これもエラーとなり上手くいかなかったのでMacPortsからインストールすることにしました。。
macOS High Sierra 10.13
Python 3.6.5
MacPortsインストール
MacPortsとはOSXで利用可能なパッケージ管理システムです。
インストールは下記のサイトのメニュー「vailable Downloads」から自身のOSにあったものを選んでインストーラの指示に従って行くだけでできました。
https://www.macports.org/install.php
インストール後パスをvi ~/.profile
で以下を記述。
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export MANPATH="/opt/local/man:$MANPATH"
# 設定を反映させる
source ~/.profile
# 反映を確認
port version
Version: 2.4.4
# 一応最新版に更新しておく
sudo port selfupdate
sudo port sync
■参考サイト
http://tweeeety.hateblo.jp/entry/2014/10/01/223700
gcc環境インストール gccはC言語プログラムを作成するためのコンパイラです。MacPortsからインストールを試みます。
sudo port install gcc6 openmpi-gcc6
# それぞれのバージョンを確認(おそらく何も表示されません)
g++-mp-6 -v
gcc-mp-6 -v
どうもリンクを通しておかないとダメなようです。コンパイル時に必要そうだった下記の2つのリンクを通します。
sudo ln -sf /opt/local/bin/g++-mp-6 /usr/bin/g++
sudo ln -sf /opt/local/bin/gcc-mp-6 /usr/local/bin/gcc
リンクを通した後、それぞれのバージョンを確認するときちんと反映されている事が確認できました。
■参考サイト
https://qiita.com/Hiroki11x/items/261612c142da176bbba5
LightGBMインストール ようやくLightGBMをインストールできる環境が整いました。ただ、ここでもインストール時に色々と設定をしないといけなくて大変でした。
ビルドする時にコンパイラを指定するのがポイントのようです。
# LightGBMを取ってきてそのディレクトリに移動
git clone --recursive https://github.com/Microsoft/LightGBM; cd LightGBM
# buildディレクトリを作り、そのディレクトリに移動
mkdir build
cd build
# ビルド
cmake -DCMAKE_CXX_COMPILER=g++-mp-6 -DCMAKE_C_COMPILER=gcc-mp-6 ..
make -j4
buildした後、setup.pyがあるLightGBM直下のディレクトリに移動してインストールしますが、ここでもsetup.pyの記述の変更が必要でした。
# python-packageディレクトリに移動
cd python-package
ここにsetup.pyがありますで、このファイルを開いてvi setup.py
で以下の2行を追加します。追加する場所はcompile_cpp()
内のelse文の所です。
else: # Linux, Darwin (macOS), etc.
logger.info("Starting to compile with CMake.")
cmake_cmd.append("-DCMAKE_CXX_COMPILER=clang++-mp-6.0") #ここにこれを追加
cmake_cmd.append("-DCMAKE_C_COMPILER=clang-mp-6.0") #ここにこれを追加
silent_call(cmake_cmd, raise_error=True, error_msg='Please install CMake and all required dependencies first')
記述した後インストール
sudo python setup.py install --precompile
これでようやくLightGBMが利用できるようになりました。
■参考サイト
https://github.com/Microsoft/LightGBM/issues/710
正直、色々し過ぎて何が正しくて何が悪かったかなどはよくわかっていません。。 間違ったことやもっと簡単な方法がありましたら教えて頂けますとありがたいです。