Ryzenマシン組んだのでXGBoostのGPU版やってみた

Ryzen 7 1700とGTX 1080 Tiでマシンを組んだので、動作確認がてらXGBoostGPU版を使ってみました。

タイムラインでそういう話題があったのでネタをパクったような形になってしまいましたが、私自身前からやってみたいと思っていたテーマであり、H2O.aiが最近担いでいる話でもあるので許して頂きたい。

構成

  • Ryzen 7 1700 (3.7GHz 8core/16thread)
  • GTX 1080 Ti FOUNDERS EDITION (1582MHz 11GB)

今のところ定格で動かしてます。 記事と前後してしまいますが、Deep Learning以外の機械学習アルゴリズムGPUで気軽に計算を高速化できるような予感があったのでCPUはケチりました。 将来GPUを追加する際の資金の足しにしたい。

インストー

公式のドキュメント

私はUbuntuの環境でmakeを使ってビルドしました。

CUDA

CUDAをインストールして

export PATH="$PATH:/usr/local/cuda-8.0/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64"

あたりのパスを通しておきます。nvccが動けば問題ないはずなので、cudnnは不要と思われます。

ビルド

make/config.mkファイルの該当行を

CUB_PATH = cub
PLUGIN_UPDATER_GPU = ON

と変更します。

後は通常と同様にmakeするだけです。

インストールについてもpython3 setup.py installとすれば問題ありませんでした。(Anaconda)

使い方

updaterパラメータを変更してGPUでの計算に切り替えることができます。 今までと同じパラメータを使っている限りではGPU版をビルドしても通常のCPUによる計算となります。

param['updater'] = 'grow_gpu'
  • GPU fast histgram
param['updater'] = 'grow_gpu_hist'
param['max_bin'] = 16

max_binLightGBMとかのアレなので、問題に合わせて設定してください。

サンプルをぼんやり眺めて、GPUが1つしかないのに

param['gpu_id'] = 1

とやるとエラーになって死ぬので注意です。

実験

CPU/GPUとexact/fast histgramで計算時間を比較しました。

データは以前の記事と同様にOttoのデータを利用しました。

github.com

f:id:marugari2:20170611104703p:plain

ntread CPU exact CPU hist GPU exact GPU hist
1 143.213904 43.093807 10.793109 7.385136
2 75.984772 24.485343 10.793109 7.385136
3 56.342093 18.662806 10.793109 7.385136
4 43.276191 14.980951 10.793109 7.385136
5 35.087812 12.747035 10.793109 7.385136
6 29.960601 11.476474 10.793109 7.385136
7 26.535089 11.396709 10.793109 7.385136
8 25.082611 9.916659 10.793109 7.385136
9 24.930102 11.761317 10.793109 7.385136
10 23.934886 11.543043 10.793109 7.385136
11 23.353146 11.724661 10.793109 7.385136
12 23.154665 11.528249 10.793109 7.385136
13 22.851917 11.614104 10.793109 7.385136
14 22.556055 11.890477 10.793109 7.385136
15 22.435674 11.309677 10.793109 7.385136
16 22.297691 11.825569 10.793109 7.385136

CPUよりGPU、exactよりもfast histgramが高速ですが、公表されているベンチマーク程は差が出ませんでした。

CPU fast histgramでも十分速い。X付きのにしときべきだったかなぁ…

nvidia-smiでモニタリングしたところGPUはまだまだ余裕ある感じだったので、データが巨大になった場合には差が出てくるのかもしれません。

また今更ですが、ntreadをコア数以上に設定しても速くなっていません。

LightGBMは?

LightGBMでもGPU対応されています。 公式のチュートリアル

インストールの仕方の説明でドライバをaptで入れてたので何となく回避しました。

OpenCLを使っているようなので、QuadroAMDのグラボを持ってる人には面白いかもしれません。

最後に

今日、我々はDeep Learningに留まらず勾配ブースティングにおいてもGPUモードをポチっとするだけで計算を高速にできるようになりました。 専門家以外にも扱い易い機械学習アルゴリズムGPUで使われるようになれば、ますますGPU需要が高まることが予想され、AI半導体メーカーの株価動向からは目が離せません。