Windows10に、GPU版LigtGBMをsource codeからbuildしてpythonで使う
21
- 10月
2019
Posted By : boomin
Windows10に、GPU版LigtGBMをsource codeからbuildしてpythonで使う
Advertisements

TL; DR

pythonでLightGBMを使いたいのですが、GPUを持っていれば、当然GPUで動かしたくなります。そこで、GPU版LigtGBMを、Windows10に環境構築をする手順をまとめます。ポイントは以下です。

  • VS2019とOpenCLとCMakeとboostをインストール
  • <Anacondaインストール先path>\Scripts\activate.bat
  • GPU版LigtGBMのbuild実行コマンドとそのオプション

ここでポイントは、GithubのSource Codeからbuildすることです。 GPU版でなくても、pypi版には並列化周りにバグがあるらしいので、sourceからbuildすべきです。

0. 公式手順

公式手順では、コマンドラインで使用するバイナリを、compileしてbuildする手順となっています。 ただし、pythonで使用するためにはこれではダメです。pythonから使えるものをbuildしなければいけません。

あ、大前提として、Git for Windowsはインストールしておきましょう。

それでは、「Microsoft Visual C++」でbuildする手順を紹介していきます。MinGWを使う手順でbuildしたい場合は、適当にほかのサイトをご覧ください笑。

1. VS2019とCMakeとOpenCLとboostをインストールする

1.1 VS2019のインストール

Visual Studio 2015か、それより新しい(2019でも可)をインストールします。 まぁ、素直に最新版をインストールすればいいと思います。

ここでもポイントは、インストール時に以下のコンポーネントを追加することです。 もし追加していない場合は、構成の変更から、追加しましょう。

変更は、Visual Studio Installerから、

変更を選んで、

MSVC v140、MSVC v141も追加しましょう。そうしないと、build時にこけます。 しかもconsoleには出力されず、よくよくエラーログを読まないとわかりません。

Advertisements

1.2 OpenCLインストール

GPUの種類によって、どのOpenCLを入れるのかが決まります。公式では、

For running on Intel, get Intel SDK for OpenCL.
For running on AMD, get AMD APP SDK.
For running on NVIDIA, get CUDA Toolkit.

と書かれています。ここではNVIDIAのGPUを使うということで、CUDA Toolkitをインストールします。詳しい手順は、このあたりを参考にしてください。

1.3 CMakeのインストール

CMakeの3.8以上をインストールしましょう。これも素直に最新版を入れておけば大丈夫です。なお、筆者の環境では3.15.2でした。

1.4 boostのインストール

Boost Binariesをダウンロードして、インストールします。この時、Visual Studioのバージョンによって、インストールするBoostのバージョンが違うことに注意してください。

  • Visual Studio 2015 -> msvc-14.0-64.exe,
  • Visual Studio 2017 -> msvc-14.1-64.exe,
  • Visual Studio 2019 -> msvc-14.2-64.exe.

を選ぶことになります。

上記の画像でお気づきのように、筆者の環境ではVisula Studio 2019となっていますので、14.2を選ぶ必要があります。なお、boost自体のバージョンは、1.71を選びました。

2. CUIでのインストール方法

2.1 source codeの取得

まず、Githubから最新のMaster branchのsource codeを取得します。 そして、python-packageフォルダへ移動します。

> git clone --recursive https://github.com/microsoft/LightGBM
> cd LightGBM\python-package

2.2 python環境のpath追加

pythonをコマンドプロンプトから実行します。 多くの人は、Anacondaでpython環境を構築していると思うので、これを前提とします。 Anacondaのインストール先に、pathなどの環境変数をセットするバッチがあるので、これを実行します。

> <Anacondaインストールpath>\Scripts\activate.bat  

これで、いま開いているdos窓から、pythonコマンドやpipなどを実行できるようになります。

2.3 いよいよbuild

gpu版でLightGBMをbuildには、5つのオプションが必要となります。

  • –gpu
  • –opencl-include-dir
  • –opencl-library
  • –boost-root
  • –boost-librarydir

具体的には、以下のように実行します。 CUDAやboostのインストール先のpathは、各自の環境に合わせて読み替えて下さい

> python setup.py install --gpu \
--opencl-include-dir="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include" \
--opencl-library="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64\OpenCL.lib" \
--boost-root="<boostインストール先path>\boost_1_71_0" \
--boost-librarydir="<boostインストール先path>\lib64-msvc-14.2"

running install
INFO:LightGBM:Starting to compile the library.
INFO:LightGBM:Starting to compile with Visual Studio 16 2019.
running build
running build_py
running egg_info
writing lightgbm.egg-info\PKG-INFO
writing dependency_links to lightgbm.egg-info\dependency_links.txt
writing requirements to lightgbm.egg-info\requires.txt
writing top-level names to lightgbm.egg-info\top_level.txt
reading manifest file 'lightgbm.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
no previously-included directories found matching 'build'
warning: no files found matching '*.txt'
warning: no files found matching '*.so' under directory 'lightgbm'
warning: no files found matching '*.so' under directory 'compile'
warning: no files found matching '*.dll' under directory 'compile\windows\x64\DLL'
warning: no previously-included files matching '*.py[co]' found anywhere in distribution
writing manifest file 'lightgbm.egg-info\SOURCES.txt'
running install_lib
creating <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\basic.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\callback.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\compat.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\engine.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\libpath.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\plotting.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\sklearn.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\VERSION.txt -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
copying build\lib\lightgbm\__init__.py -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
INFO:LightGBM:Installing lib_lightgbm from: ['compile\\Release\\lib_lightgbm.dll', '..\\Release\\lib_lightgbm.dll']
copying compile\Release\lib_lightgbm.dll -> <Anacondaインストール先path>\Lib\site-packages\lightgbm
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\basic.py to basic.cpython-36.pyc
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\callback.py to callback.cpython-36.pyc
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\compat.py to compat.cpython-36.pyc
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\engine.py to engine.cpython-36.pyc
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\libpath.py to libpath.cpython-36.pyc
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\plotting.py to plotting.cpython-36.pyc
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\sklearn.py to sklearn.cpython-36.pyc
byte-compiling <Anacondaインストール先path>\Lib\site-packages\lightgbm\__init__.py to __init__.cpython-36.pyc
running install_egg_info
Copying lightgbm.egg-info to <Anacondaインストール先path>\Lib\site-packages\lightgbm-2.3.1-py3.6.egg-info
running install_scripts

はい、GPU版のLightGBMのbuildができました。これで、pythonからLightGBMを使えるようになります。

>ipython
Python 3.6.8 |Anaconda, Inc.| (default, Feb 21 2019, 18:30:04) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import lightgbm as lgb

In [2]:

ということで、問題なく使えるようです。

3. まとめ

GPU版をインストールしたからといっても、学習データの特性やGPUのコア数・メモリ数によって、CPUより遅くなります。それよりも、CPUのコア数が8個以上使える環境なら、場合によってGPUを使うよりも学習が早いケースがありました。

やみくもにGPUを使えばいいというのではなく、いろいろ試してみたほうがいいでしょう。

Advertisements

コメントを残す