結構詰まったので、うまく行ったときの方法をメモ。
環境
- Windows 10 1903
- python 3.7.3
- CUDA 10.1
- Visual Studio 16 2019
- git 2.21.0.windows.1
- boost 1.71.0
- cmake 3.15.2
- lightgbm 2.3.1
手順
基本は公式ドキュメント通りにすればよいが、公式ドキュメントのコピペで済まない部分もあったりするのでメモ。
1. CUDA, Visual Studio, Git, Cmake, Boost等のインストール
公式ドキュメント通りやればよい。つまり、例えば
- Git for Windows、CMake、Visual Studioをインストールする
- NVIDIAならCUDA Toolkitを入れる
- Boostを入れる(Visual Studio 2019なら
msvc-14.2-64.exe
のバージョンを選ぶ)
といった感じ1。
気をつけたほうがいいかもしれないポイント:
- BoostはBuildせず、公式ドキュメント通りexeファイルでインストールしたほうが楽
- Buildしても
lib64-msvc-14.2
ディレクトリは生成されない。 - そうなると公式ドキュメント通りの入れ方ができなくなる。(おそらく若干パスの指定が変わるだけだが、私には知識がないのでbuild時のパスはわからない…)
- Buildしても
2. LGBMのビルド
GitHubからbuildする場合
公式ドキュメント通りやればよくて、例えばVisual Studio 16 2019ならGit Bash等で以下を実行する。
git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM
mkdir build
cd build
cmake -A x64 -DUSE_GPU=1 -DBOOST_ROOT=C:/local/boost_1_71_0 -DBOOST_LIBRARYDIR=C:/local/boost_1_71_0/lib64-msvc-14.2 ..
cmake --build . --target ALL_BUILD --config Release
そしてpythonライブラリをインストールする。powershell等で以下を実行すればよさそう。
# python-packageに移動(以下ではbuildに居ることを想定)
cd ../python-package
# インストール
python setup.py install --precompile
pipからbuildする場合
公式ドキュメントには書かれていないが、boostを使う場合はboostのパスを指定して2pip installする必要がある模様。
pip install lightgbm --install-option=--gpu --install-option="--boost-root=C:/local/boost_1_71_0/" --install-option="--boost-librarydir=C:/local/boost_1_71_0/lib64-msvc-14.2"
楽だが、pipよりもGitHubのほうが新しくてバグ修正などが進んでいるので現状はあまり意味がないように思える。GPUを使いたいだけの場合用。
(Google Colabは現在LGBMのGPUバージョンが入っていないのでColabでGPU使いたいときサクッとビルドするにはいいかも)
参考
-
LightGBM/python-package at master · microsoft/LightGBM
- ドキュメントよりGitHubのほうが情報が多い
- Installation Guide — LightGBM 2.3.1 documentation
XGBoostのbuildについてはこちら:GPUが使えるXGBoostをWin10にインストールする - Qiita
-
MinGWでbuildするよりもVisual Studioでbuildしたほうが10倍高速らしいので、面倒でもVisual Studioを使ったほうがよさそう。 ↩
-
公式ドキュメント通りの
pip install lightgbm --install-option=--gpu
だとCould NOT find Boost (missing: Boost_INCLUDE_DIR filesystem system)
のエラーがlogに出た(関連して「MS Buildが見つからない」「VS Codeを入れろ」などのメッセージもでたが、これらは結局関係なかったっぽい)のでBoostの場所を指定する ↩